|
|
|
| здравстуйте.
чтобы комменты не выходили длинной страницей решил сделать для них постраничную навигацию.
работает, с небольшим условием
если нет ни одного комментария
то выходит надпись
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/site/public_html/post.php on line 670
Ваш комментарий будет первым.
670 строка - if(mysql_num_rows($result) > 0) {
<?php
$num = 5;
// Извлекаем из URL текущую страницу
@$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result00 = mysql_query("SELECT COUNT(*) FROM comment WHERE post='" . mysql_real_escape_string($id_comp) . "'");
$temp = mysql_fetch_array($result00);
$posts = $temp[0];
// Находим общее число страниц
$total = (($posts - 1) / $num) + 1;
$total = intval($total);
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная с какого номера
// следует выводить сообщения
$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start
$result = mysql_query("
SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, text, author
FROM comment
WHERE post='" . mysql_real_escape_string($id_comp) . "'
ORDER BY id DESC LIMIT $start, $num
", $db);
if(mysql_num_rows($result) > 0) {
$comment = mysql_fetch_array($result);
do {
$text = $comment["text"];
$author = $comment["author"];
$date = $comment["date"];
printf("
<div class='comment'>
<p class='comment'>%s
<span class='date'>%s</span>
</p>
<p class='comment'>%s</p>
</div>
",$author,$date,$text);
}
while ($comment = mysql_fetch_array($result));
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href=post.php?id='.$id.'&page=1>Первая</a> | <a href=post.php?id='.$id.'&page='. ($page - 1) .'>Предыдущая</a> | ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' | <a href=post.php?id='.$id.'&page='. ($page + 1) .'>Следующая</a> | <a href=post.php?id='.$id.'&page=' .$total. '>Последняя</a>';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 5 > 0) $page5left = ' <a href=post.php?id='.$id.'&page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';
if($page - 4 > 0) $page4left = ' <a href=post.php?id='.$id.'&page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';
if($page - 3 > 0) $page3left = ' <a href=post.php?id='.$id.'&page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';
if($page - 2 > 0) $page2left = ' <a href=post.php?id='.$id.'&page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href=post.php?id='.$id.'&page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 5 <= $total) $page5right = ' | <a href=post.php?id='.$id.'&page='. ($page + 5) .'>'. ($page + 5) .'</a>';
if($page + 4 <= $total) $page4right = ' | <a href=post.php?id='.$id.'&page='. ($page + 4) .'>'. ($page + 4) .'</a>';
if($page + 3 <= $total) $page3right = ' | <a href=post.php?id='.$id.'&page='. ($page + 3) .'>'. ($page + 3) .'</a>';
if($page + 2 <= $total) $page2right = ' | <a href=post.php?id='.$id.'&page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href=post.php?id='.$id.'&page='. ($page + 1) .'>'. ($page + 1) .'</a>';
// Вывод меню если страниц больше одной
if ($total > 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div class='number'>";
echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
echo "</div>";
}
}
else {
echo "Ваш комментарий будет первым.";
}
?>
|
как убрать вывод предупреждения? | |
|
|
|
|
|
|
|
для: vecher
(06.01.2014 в 04:34)
| | Не убирать надо, а разбираться с ошибкой. Сообщение гласит, что $result не является ресурсом mysql, то есть запрос вернул ошибку, а вы ее пытаетесь обработать. Проверьте ошибку. Выводить непосредственно ее только при отладке, на реальном сервер лучше писать "Извините....". Если колонка post, это число, то mysql_real_escape_string лишнее, и лучше приводить к числу, и делать это нужно до запроса, проверяя.
<?
if($result = mysql_query("SELECT DATE_FORMAT(`date`,'%d.%m.%Y') AS `date`, `text`, author
FROM comment
WHERE post=" . (int)$id_comp . "
ORDER BY id DESC LIMIT $start, $num", $db)) {
if(mysql_num_rows($result)) {
//вывод, но только не do...while, а while
} else {
//по умолчанию
}
} else echo mysql_error();
|
DATE, TEXT зарезервировано в mysql и нужно обрамлять - `date`.
PS. mysql_num_rows() вообще не нужна, уже после первого запроса на количество записей будет известно есть ли они, а следовательно и что делать. Вся логика кода у вас неверна. | |
|
|
|