SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.02.2008 19:09:15

Никита
Завсегдатай
Откуда: Тюмень
Зарегистрирован: 15.11.2007
Сообщений: 73

Постраничная навигация

Здравствуйте)Я пытаюсь сделать постраничную навигацию по ьому скрипту,который представлен сдесь:http://www.softtime.ru/info/articlephp.php?id_article=33
Но когда я все подстраиваю,то у меня вылезает ошибка:
Fatal error: Unsupported operand types in Z:\home\test1.ru\www\Copy_obnovleniya\songs.php on line 68
Я считаю,что ошибка заключается в данной строчке:$total=intval(($songs-1)/$num_songs)+1;
Но я так и не смог определить в чем же здесь ошибка....Подскажите,пожалуйста.

Код:

<?php
$ex=$_GET['ex'];
  // Устанавливаем соединение с базой данных
  include "config.php";
$num_songs = 3;  
// Извлекаем из URL текущую страницу  
$pn = $_GET['pn'];  
// Определяем общее число сообщений в базе данных  
$query ="SELECT COUNT(*) FROM songs WHERE executor_num=$ex";  
$result = mysql_query($query);
if(!$result) exit(mysql_error());
$songs = mysql_fetch_row($result);  
// Находим общее число страниц  
$total=intval(($songs-1)/$num_songs)+1;
// Определяем начало сообщений для текущей страницы  
$pn = intval($pn);  
// Если значение $pn меньше единицы или отрицательно  
// переходим на первую страницу  
// А если слишком большое, то переходим на последнюю  
if(empty($pn) or $pn < 0) $pn = 1;  
  if($pn > $total) $pn = $total;  
// Вычисляем начиная к какого номера  
// следует выводить сообщения  
$start = $pn * $num_songs - $num_songs;  
// Выбираем $num сообщений начиная с номера $start  
$result = mysql_query("SELECT * FROM songs WHERE executor_num=$ex LIMIT $start, $num_songs");  
// В цикле переносим результаты запроса в массив $postrow  
while ( $songs = mysql_fetch_assoc($result))  
  for($i = 0; $i < $num_songs; $i++)  
{
 echo "<a class=song_link href=songs_design.php?num=".$songs[$i]['song_id']." alt=".$songs[$i]['song_name'].">".$songs[$i]['song_name']."</a><br>";  
}   

?>

Неактивен

 

#2 05.02.2008 20:15:27

vladimirov
Завсегдатай
Зарегистрирован: 16.12.2007
Сообщений: 69

Re: Постраничная навигация

у меня тут в наработках есть кое что похожее

    $query = "SELECT id FROM site_news WHERE visible='yes'";
    $result = mysql_query($query);
    $num_rows = mysql_num_rows($result);
    $numpages = intval(ceil($num_rows / $limit));
    $links_page = '<SPAN CLASS=NEWSTEXT>страницы: </SPAN>';
    $j=1;
    for ($i = 1; $i <= $numpages; $i++) {
         if ($p == $i)  {
             $links_page .= '['.$i.']&nbsp;&nbsp;';
         }else{
             $links_page .= '<a href="?action=archive&p='.$i.'">['.$i.']</a>&nbsp;&nbsp;';
         }
         if ($i/20 == $j) {
              $links_page .= "<br>\n";
              $j++;
         }
    }

может вам и пригодится...

дока по ceil - http://php.yar.ru/manual/en/function.ceil.php

Отредактированно vladimirov (05.02.2008 20:27:45)

Неактивен

 

#3 05.02.2008 20:24:18

Никита
Завсегдатай
Откуда: Тюмень
Зарегистрирован: 15.11.2007
Сообщений: 73

Re: Постраничная навигация

Нет к сожалению не получается......Проблема заключена в строчке:$total=intval(($songs-1)/$num_songs)+1;Но я не знаю в чем именно там проблема......

Неактивен

 

#4 05.02.2008 20:32:43

Никита
Завсегдатай
Откуда: Тюмень
Зарегистрирован: 15.11.2007
Сообщений: 73

Re: Постраничная навигация

Пасиба)Постараюсь переделать под себя)

Неактивен

 

#5 05.02.2008 21:32:07

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Постраничная навигация

К сожалению, в приведенном Вами скрипте нет 68 строки, поэтому проверить не могу smile

Неактивен

 

#6 06.02.2008 12:00:20

Никита
Завсегдатай
Откуда: Тюмень
Зарегистрирован: 15.11.2007
Сообщений: 73

Re: Постраничная навигация

А что это за 68 строка?

Неактивен

 

#7 06.02.2008 12:10:31

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Постраничная навигация

Fatal error: Unsupported operand types in Z:\home\test1.ru\www\Copy_obnovleniya\songs.php on line 68.
Фатальная ошибка: Неподдерживаемые типы операндов в файле Z:\home\test1.ru\www\Copy_obnovleniya\songs.php на строке 68.

Вот и я думаю - что за 68 строка smile

Неактивен

 

#8 06.02.2008 12:21:31

Никита
Завсегдатай
Откуда: Тюмень
Зарегистрирован: 15.11.2007
Сообщений: 73

Re: Постраничная навигация

А что значит неподдерживаемые типы операндов?

Неактивен

 

#9 06.02.2008 13:03:38

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Постраничная навигация

Ну, например, если сложить базу данных и слона, то будет ошибка. Хотя, перемножить
их, конечно, можно - будет гипотетическая слонобаза данных. smile

Думаю, стоит все-таки написать 68 строку здесь smile

Неактивен

 

#10 06.02.2008 13:36:45

Никита
Завсегдатай
Откуда: Тюмень
Зарегистрирован: 15.11.2007
Сообщений: 73

Re: Постраничная навигация

Я тут попробовал совместить два скрипта и у меня это вроде неплохо получилось....Поэтому если надо,то я могу выложить скрипт постраничной навигации....Вдруг кому-нибудь понадобиться...

Неактивен

 

#11 06.02.2008 13:42:15

Никита
Завсегдатай
Откуда: Тюмень
Зарегистрирован: 15.11.2007
Сообщений: 73

Re: Постраничная навигация

Код:

<?php
 include "config.php";
$ex=$_GET['ex'];
$pnumber = 1;
if(isset($_GET['pn'])) 
{
$pn = $_GET['pn'];
$start = (($pn - 1)*$pnumber);
}
else 
{
$pn = 1;
$start = 0;
}
$query = "SELECT * FROM songs WHERE executor_num=$ex ORDER BY song_name LIMIT $start,$pnumber";
    $prd = mysql_query($query);
    if(!$prd) exit(mysql_error());
    // Если в текущем каталоге имеется хотя бы
    // одна товарная позиция выводим её
    if(mysql_num_rows($prd) > 0)
    {
     while($songs = mysql_fetch_assoc($prd))
{ 
echo "<a class=song_link href=songs_design.php?num=".$songs['song_id']." alt=".$songs['song_name'].">".$songs['song_name']."</a><br>";
}  
    }
  // Определяем общее число сообщений в базе данных  
$query ="SELECT COUNT(*) FROM songs WHERE executor_num=$ex";  
$result = mysql_query($query);
if(!$result) exit(mysql_error());
$songs = mysql_result($result,0);  
// Находим общее число страниц  
$number = (int)($songs/$pnumber);
if((float)($songs/$pnumber) - $number != 0) $number++;
echo"<center>";
if ($pn-7 > 0) $pervpage = '<a href= design.php?page=songs&ex='.$ex.'&pn='. ($pn - 6) .'><<&nbsp</a>'; 
 // Проверяем нужны ли стрелки вперед  
if ($pn+6 < $number) $nextpage = '<a href= design.php?page=songs&ex='.$ex.'&pn='. ($pn + 6) .'>&nbsp>></a>'; 
// Находим ближайшие станицы с обоих краев, если они есть 
if($pn - 6 > 0) $pn6left = '<a href= design.php?page=songs&ex='.$ex.'&pn='.($pn - 6).'>'. ($pn - 6) .'</a>  ';  
if($pn - 5 > 0) $pn5left = '<a href= design.php?page=songs&ex='.$ex.'&pn='. ($pn - 5) .'>'. ($pn - 5) .'</a>  ';
if($pn - 4 > 0) $pn4left = '<a href= design.php?page=songs&ex='.$ex.'&pn='.($pn - 4).'>'. ($pn - 4) .'</a>  ';  
if($pn - 3 > 0) $pn3left = '<a href= design.php?page=songs&ex='.$ex.'&pn='. ($pn - 3) .'>'. ($pn - 3) .'</a>  ';  
if($pn - 2 > 0) $pn2left = '<a href= design.php?page=songs&ex='.$ex.'&pn='. ($pn - 2) .'>'. ($pn - 2) .'</a>  ';  
if($pn - 1 > 0) $pn1left = '<a href= design.php?page=songs&ex='.$ex.'&pn='.($pn - 1).'>'. ($pn - 1) .'</a>  ';  
if($pn + 6 <= $number) $pn6right = '&nbsp  <a href= design.php?page=songs&ex='.$ex.'&pn='. ($pn + 6) .'>'. ($pn + 6) .'</a>';  
if($pn + 5 <= $number) $pn5right = '&nbsp  <a href= design.php?page=songs&ex='.$ex.'&pn='. ($pn + 5) .'>'. ($pn + 5) .'</a>'; 
if($pn + 4 <= $number) $pn4right = '&nbsp  <a href= design.php?page=songs&ex='.$ex.'&pn='. ($pn + 4) .'>'. ($pn + 4) .'</a>';  
if($pn + 3 <= $number) $pn3right = '&nbsp  <a href= design.php?page=songs&ex='.$ex.'&pn='. ($pn + 3) .'>'. ($pn + 3) .'</a>'; 
if($pn + 2 <= $number) $pn2right = '&nbsp  <a href= design.php?page=songs&ex='.$ex.'&pn='. ($pn + 2) .'>'. ($pn + 2) .'</a>';  
if($pn + 1 <= $number) $pn1right = '&nbsp  <a href= design.php?page=songs&ex='.$ex.'&pn='. ($pn + 1) .'>'. ($pn + 1) .'</a>'; 
// Вывод меню  
if($number>1)
echo $pervpage.$pn6left.$pn5left.$pn4left.$pn3left.$pn2left.$pn1left.'<b>'.$pn.'</b>'.$pn1right.$pn2right.$pn3right.$pn4right.$pn5right.$pn6right.$nextpage;  
echo"</center>";
?>

Неактивен

 

#12 06.03.2008 00:10:56

evgenijj
Участник
Зарегистрирован: 06.03.2008
Сообщений: 1

Re: Постраничная навигация

Код:

$songs = mysql_fetch_row($result);  
// Находим общее число страниц  
$total=intval(($songs-1)/$num_songs)+1;

Смотри: $songs - массив. И из массива ты пытаешься вычитать число: ($songs-1). Вот тебе и ошибка - Unsupported operand types.

Отредактированно evgenijj (06.03.2008 00:11:49)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson