[PHP] Страницы.

Khvosticov Sergey
Сообщения: 201
Зарегистрирован: 31 дек 2009
Сейчас взял скрипт с http://www.php.su/articles/?cat=examples&page=062 начал делать страницы на стенах у пользователей на своём сайте и тут такая ошибка не могу правильно рассчитать кол-во выводимых страниц

Готовый скрипт предлагает сделать так

Код: Выделить всё

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


Но так у меня ругается

Код: Выделить всё

Fatal error: Unsupported operand types in /var/www/page.php on line 278

Вот скрипт

Код: Выделить всё

<?


// Переменная хранит число сообщений выводимых на станице
$num = 10;
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result2 = mysql_query("SELECT COUNT(*) FROM usercomments WHERE post='$id'");
$posts = mysql_fetch_array($result2);
// Находим общее число страниц

$total = intval(($posts - 1) / $num) + 1;
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
  if($page > $total) $page = $total;
// Вычисляем начиная к какого номера
// следует выводить сообщения
$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start







}

$result3 = mysql_query ("SELECT * FROM usercomments WHERE post='$id' ORDER BY `date` DESC LIMIT $start, $num",$db);

while ( $postrow[] = mysql_fetch_array($result2));





if (mysql_num_rows($result3) > 0)
{
$myrow3 = mysql_fetch_array($result3);

do
{
echo "

<table style='margin:auto' width='600' class='plist'>

<tr  class='server' onmouseover='lightRow(this);' onmouseout='darkRow(this);'>
<td width='1%' class='server' onmouseover='lightRow(this);' onmouseout='darkRow(this);' valign='top'>

<a href='page.php?id=$myrow3[user]'><font size='1'>$myrow3[login]</font></a><br>
<a href='page.php?id=$myrow3[user]'><img src='$myrow3[avatar]' width='50' height='50'></a>

</td>
<td width='600' valign='top' class='server' onmouseover='lightRow(this);' onmouseout='darkRow(this);'  colspan=\"2\">
<br>$myrow3[text]
</td>
<td width='20%' valign='top' style='white-space:nowrap; text-align:right'>
<font size='1'><br>$myrow3[date]</font>
</td>
</tr>
<TD colSpan='6'><div id='hr'></div></TD>

</table>

";
}
while ($myrow3 = mysql_fetch_array($result3));
}


// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href= ./user-'.$myrow[id].'&page=1><<</a>
                               <a href= ./user-'.$myrow[id].'&page='. ($page - 1) .'><</a> ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' <a href= ./user-'.$myrow[id].'&page='. ($page + 1) .'>></a>
                                   <a href= ./user-'.$myrow[id].'&page=' .$total. '>>></a>';

// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = ' <a href= ./user-'.$myrow[id].'&page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href= ./user-'.$myrow[id].'&page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = ' | <a href= ./user-'.$myrow[id].'&page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href= ./user-'.$myrow[id].'&page='. ($page + 1) .'>'. ($page + 1) .'</a>';

// Вывод меню
echo "<center><font size='1'>";
echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;
echo "</font></center>";
?>



В данный момент стоит так

Код: Выделить всё

$total = $posts;


Помогите разобраться !
Были времена я срывался и падал вниз, но всегда успевал ухватиться за карниз...

Аватара пользователя
AgentSIB
Администратор
Сообщения: 328
Зарегистрирован: 17 май 2010
$total = intval(($posts - 1) / $num) + 1;
Используй ceil или round. В зависимости от того, что нужно. Лучший вариант
$total = ceil ($posts / $num) ;

А вообще ты что то тут понакрутил...
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Khvosticov Sergey
Сообщения: 201
Зарегистрирован: 31 дек 2009
Не прёт ;))
Были времена я срывался и падал вниз, но всегда успевал ухватиться за карниз...

Аватара пользователя
AgentSIB
Администратор
Сообщения: 328
Зарегистрирован: 17 май 2010
Еще бы оно перло))

Код: Выделить всё

// Определяем общее число сообщений в базе данных
$result2 = mysql_query("SELECT COUNT(*) FROM usercomments WHERE post='$id'");
$posts = mysql_fetch_array($result2);

Замени на

Код: Выделить всё

// Определяем общее число сообщений в базе данных
$result2 = mysql_query("SELECT COUNT(*) cnt FROM usercomments WHERE post='$id'");
$row = mysql_fetch_array($result2);
$posts = $row['cnt'];
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"


Вернуться в «Другие вопросы»