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

Форум PHP

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

 

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

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

тема: Не работает постраничная навигация
 
 автор: Dizels   (24.03.2010 в 17:01)   письмо автору
 
 


$cat=$_GET['rub'];        
            ?>
            <h3>Категория: <?php echo $cat?></h3>        
            <?php        
            
// Переменная хранит число записей выводимых на станице 
            
$num 5
            
// Извлекаем из URL текущую страницу 
            
$page $_GET['page']; 
            
// Определяем общее число сообщений в базе данных 
            
$result mysql_query("SELECT COUNT(*) FROM pen WHERE `rub`='$cat'"); 
            
$posts mysql_fetch_row($result);  
            
            
// Находим общее число страниц 
            
$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 
            
$res mysql_query("SELECT * FROM pen  WHERE `rub`='$cat' LIMIT $start$num"); 
            
// В цикле переносим результаты запроса в массив $postrow 
            
while($i=mysql_fetch_array($res)) $postrow[]=$i
            echo 
"<table border='0'  width='100%' align='center' cellspacing='5' cellpadding='5'>";
            for(
$i 0$i $num$i++) 
            {          
                echo 
"
                    <tr> 
                        <td valign='top'><a href=''><img src='http://pic.krukro.com/public_html/supermarket/products/preview/"
.$postrow[$i]['photo']."'></a></td> 
                        <td valign='top'>
                            <center><b>"
.$postrow[$i]['name']."</b></center>
                            <p align='justify'>Артикул: "
.$postrow[$i]['artikl']."</p>
                            <p align='justify'>Цена: <font size='4' color='red'> "
.$postrow[$i]['price']." </font> руб.</p>
                            <hr>
                        </td> 
                    </tr>"
;    
            }
            echo 
"</table>";    
// Проверяем нужны ли стрелки назад 
if ($page != 1$pervpage '<a href= ./page?page=1><<</a> 
                               <a href= ./page?page='
. ($page 1) .'><</a> '
// Проверяем нужны ли стрелки вперед 
if ($page != $total$nextpage ' <a href= ./page?page='. ($page 1) .'>></a> 
                                   <a href= ./page?page=' 
.$total'>>></a>'
// Находим две ближайшие станицы с обоих краев, если они есть 
if($page 0$page2left ' <a href= ./page?page='. ($page 2) .'>'. ($page 2) .'</a> | '
if(
$page 0$page1left '<a href= ./page?page='. ($page 1) .'>'. ($page 1) .'</a> | '
if(
$page <= $total$page2right ' | <a href= ./page?page='. ($page 2) .'>'. ($page 2) .'</a>'
if(
$page <= $total$page1right ' | <a href= ./page?page='. ($page 1) .'>'. ($page 1) .'</a>';
// Вывод меню 
echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage
?>

Выводит:
Fatal error: Unsupported operand types in /home/u35265/oasis116ru/www/penoteka/index.php on line 95

95 строка:
$total = intval(($posts - 1) / $num) + 1; 

Подскажите что не так? За основу брался скрипт отсюда: http://www.softtime.ru/info/articlephp.php?id_article=33

  Ответить  
 
 автор: Dizels   (24.03.2010 в 18:16)   письмо автору
 
   для: Dizels   (24.03.2010 в 17:01)
 

Попробовал изменить так:
с:
$result = mysql_query("SELECT COUNT(*) FROM pen WHERE `rub`='$cat'"); 

на:
$result = mysql_query("SELECT COUNT(*) FROM pen WHERE `rub`=$cat"); 

в итоге вывело только первые 5 записей из БД а так же ошибку:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/u35265/oasis116u/www/penoteka/index.php on line 92

Переменная $cat содержит значение:
Luxury

  Ответить  
 
 автор: Dizels   (24.03.2010 в 18:45)   письмо автору
 
   для: Dizels   (24.03.2010 в 18:16)
 

Собственно исправил так:
$posts = mysql_fetch_row($result);  

на:
$posts = mysql_num_rows($result); 

а запрос к БД такой:
$result = mysql_query("SELECT COUNT(*) FROM pen WHERE `rub`='$cat'"); 

Ошибка ушло, но проблема с отображением только первых 5 записей осталась.
Т.е. показывается первая пятерка записей и цифра 1, а ссылок на другие страницы нет, хотя они должны быть.

  Ответить  
 
 автор: Dizels   (24.03.2010 в 19:11)   письмо автору
 
   для: Dizels   (24.03.2010 в 18:45)
 

Получилось!
Вот как правильно:
// Определяем общее число сообщений в базе данных 
            $result = mysql_query("SELECT COUNT(*) FROM pen WHERE `rub`='$cat'"); 
            $posts = mysql_result($result,0);      

  Ответить  
 
 автор: Trianon   (24.03.2010 в 21:05)   письмо автору
 
   для: Dizels   (24.03.2010 в 19:11)
 

В общем-то да.
Кроме хвоста запроса '$cat'");
Там уязвимость.

  Ответить  
 
 автор: oliss   (25.03.2010 в 00:17)   письмо автору
 
   для: Trianon   (24.03.2010 в 21:05)
 

Правильно, intval() и is_numeric() помогут.

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

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