Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: постраничная навигация. ошибка.
 
 автор: vecher   (06.01.2014 в 04:34)   письмо автору
 
 

здравстуйте.
чтобы комменты не выходили длинной страницей решил сделать для них постраничную навигацию.
работает, с небольшим условием
если нет ни одного комментария
то выходит надпись
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 0$page5left ' <a href=post.php?id='.$id.'&page='. ($page 5) .'>'. ($page 5) .'</a> | ';
                                    if(
$page 0$page4left ' <a href=post.php?id='.$id.'&page='. ($page 4) .'>'. ($page 4) .'</a> | ';
                                    if(
$page 0$page3left ' <a href=post.php?id='.$id.'&page='. ($page 3) .'>'. ($page 3) .'</a> | ';
                                    if(
$page 0$page2left ' <a href=post.php?id='.$id.'&page='. ($page 2) .'>'. ($page 2) .'</a> | ';
                                    if(
$page 0$page1left '<a href=post.php?id='.$id.'&page='. ($page 1) .'>'. ($page 1) .'</a> | ';

                                    if(
$page <= $total$page5right ' | <a href=post.php?id='.$id.'&page='. ($page 5) .'>'. ($page 5) .'</a>';
                                    if(
$page <= $total$page4right ' | <a href=post.php?id='.$id.'&page='. ($page 4) .'>'. ($page 4) .'</a>';
                                    if(
$page <= $total$page3right ' | <a href=post.php?id='.$id.'&page='. ($page 3) .'>'. ($page 3) .'</a>';
                                    if(
$page <= $total$page2right ' | <a href=post.php?id='.$id.'&page='. ($page 2) .'>'. ($page 2) .'</a>';
                                    if(
$page <= $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 
"Ваш комментарий будет первым.";
                            }
                                    
?>

как убрать вывод предупреждения?

  Ответить  
 
 автор: confirm   (06.01.2014 в 07:12)   письмо автору
 
   для: 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() вообще не нужна, уже после первого запроса на количество записей будет известно есть ли они, а следовательно и что делать. Вся логика кода у вас неверна.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования