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

Форум PHP

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

 

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

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

тема: Проблемы с постраничной навигацией
 
 автор: kodges   (28.12.2006 в 15:19)   письмо автору
 
 

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

<?
    
// Переменная хранит число сообщений выводимых на станице  
                    
$num 10;  
                    
// Извлекаем из URL текущую страницу  
                    
$page $_GET['page'];  
                    
// Определяем общее число сообщений в базе данных  
                    
if(isset($_GET['id'])) $result=mysql_query("SELECT count(*) FROM site_content WHERE kategory='".$_GET['id']."'");
                    else 
$result mysql_query("SELECT count(*) FROM site_content");
                    
$posts mysql_result($result,0);
                    
// Находим общее число страниц  
                    
$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  
                    
if(isset($_GET['id'])) $result=mysql_query("SELECT * FROM site_content WHERE kategory='".$_GET['id']."' LIMIT $start$num");
                    else 
$result=mysql_query("SELECT * FROM site_content LIMIT $start$num");
                    
// В цикле переносим результаты запроса в массив $postrow  
                    
while ( $postrow[] = mysql_fetch_array($result)) 
                    
////////////////////////////////////////////////
                    
echo "<table width='100%' border='0' cellpadding='4' cellspacing='0'>";  
                    for(
$i 0$i $num$i++)  
                    {
                        echo 
"<tr> 
                            <td width='80%' background='images/last.jpg' height='20' align='left'>&nbsp;&nbsp;<span style='color: #652200'><b>"
.$postrow[$i]['name']."</b></span></td>
                            <td width='20%' background='images/last.jpg' height='20' align='right'><span style='color: #652200'>"
.$postrow[$i]['date']."</span>&nbsp;&nbsp;</td>";
                            
                            
//////Выясняем категорию
                            
$query1=mysql_query("SELECT name FROM site_kategory WHERE id='".$postrow[$i]['kategory']."'"); 
                            if(!
$query1)exit(mysql_error());
                            
$kat=mysql_result($query1,0);
                            
//////Выясняем автора
                            
$query2=mysql_query("SELECT name FROM site_users WHERE id='".$postrow[$i]['autor']."'"); 
                            if(!
$query2)exit(mysql_error());
                            
$autor=mysql_result($query2,0);
                            
//////Выясняем количество комментариев
                            
$query3=mysql_query("SELECT * FROM site_coment WHERE kategory='".$postrow[$i]['kategory']."' AND post='".$postrow[$i]['id']."'"); 
                            if(!
$query3)exit(mysql_error());
                            
$post=mysql_num_rows($query3);
                            
/////Выводим сам документ, категорию, автора, и количество комментариев
                            
echo "<tr>
                                        <td width='100%' colspan=2>
                                        <p align='right'>Категория: <a href='index.php?page="
.$postrow[$i]['kategory']."'>".$kat."</a> | Автор: ";
                                        if(isset(
$_SESSION['name']))
                                        {
                                            echo
"<a href='index.php?user=".$postrow[$i]['autor']."'>".$autor."</a> | Комментарий: 
                                                    <a href='index.php?post="
.$postrow[$i]['id']."&kategory=".$postrow[$i]['kategory']."'>".$post."</a>";
                                        }
                                        else
                                        {
                                            echo 
"$autor | Комментарий: $post";
                                        }
                                        echo
"</p><p align='left'>".$postrow[$i]['text']."</p>";
                                        if(isset(
$_SESSION['name']))
                                        {
                                            echo
"<p align='right'><a href='".$postrow[$i]['link']."'>download | скачать</a></p>";
                                        }
                                        else
                                        {
                                            echo
"<p align='right'>download | скачать</p>";
                                        }
                                        echo
"</td>
                                 </tr>"
;
                    }
                    echo 
"</table>";
                    
/////////////////////////////////////////////////
                    // Проверяем нужны ли стрелки назад  
                    
if ($page != 1$pervpage '<a href= ./index?page=1><<</a>  
                                                   <a href= ./index?page='
. ($page 1) .'><</a> ';  
                    
// Проверяем нужны ли стрелки вперед  
                    
if ($page != $total$nextpage ' <a href= ./index?page='. ($page 1) .'>></a>  
                                                       <a href= ./index?page=' 
.$total'>>></a>';  
                    
// Находим две ближайшие станицы с обоих краев, если они есть  
                    
if($page 0$page2left ' <a href= ./index?page='. ($page 2) .'>'. ($page 2) .'</a> | ';  
                    if(
$page 0$page1left '<a href= ./index?page='. ($page 1) .'>'. ($page 1) .'</a> | ';  
                    if(
$page <= $total$page2right ' | <a href= ./index?page='. ($page 2) .'>'. ($page 2) .'</a>';  
                    if(
$page <= $total$page1right ' | <a href= ./index?page='. ($page 1) .'>'. ($page 1) .'</a>'
                    
// Вывод меню  
                    
echo"<center>";
                    echo 
$pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;
                    echo
"</center>";
                    
?>


Теперь о проблеме:
Если в базе находится записей меньше чем выводится на одну страницу то выдается ошибка

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 22 in C:\usr\www\content.php on line 38

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 23 in C:\usr\www\content.php on line 42

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 25 in C:\usr\www\content.php on line 38

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 26 in C:\usr\www\content.php on line 42

затем выводится содержимое базы как надо а дальше пустые ячейки таблици до 10 в сумме потому что выводится по 10 записей на страницу. Короче если в базе к примеру 4 записи то выдается вышеупомянутая ошибка потом выводятся записи а потом еще 6 пустых строк.

Как сделать чтобы небыло ошибки и если записей меньше чем выводится на страницу то после последней записи не выводились еще и пустые строки ???

PS: Ошибки

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 22 in C:\usr\www\content.php on line 38

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 23 in C:\usr\www\content.php on line 42

указывают на строки
$kat=mysql_result($query1,0);

и
$autor=mysql_result($query2,0);

соответственно.

   
 
 автор: cheops   (28.12.2006 в 15:28)   письмо автору
 
   для: kodges   (28.12.2006 в 15:19)
 

Замените строки вида
<?php
$autor
=mysql_result($query2,0);
?>

на
<?php
if(mysql_num_rows($query2)) $autor=mysql_result($query2,0);
else 
$autor "";
?>

   
 
 автор: kodges   (28.12.2006 в 15:45)   письмо автору
 
   для: cheops   (28.12.2006 в 15:28)
 

Спасибо, с ошибками справиться это помогло, но пустые строки по прежнему выводятся если в базе записей меньше чем нужно вывести на страницу.
Как с этим бороться ?

=================================

Все спасибо за помощь я уже разобрался...
Надо было добавить в скрипт оператор break с условием :)))

   
Rambler's Top100
вверх

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