Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Проблема с постраничной навигацией, не ставит огриничение на вывод (http://forum.oszone.net/showthread.php?t=130273)

igrikk 29-01-2009 13:39 1023414

Проблема с постраничной навигацией, не ставит огриничение на вывод
 
Помогите пожалуйста уже сил нет, два дня бьюсь.
1 - выводит все статьи из БД на странице, хотя стоит ограничение 2 на страницу, в БД это значение хранится в таблице option поле str
2 - при переходе по навигации на 2-ю , 3-ю и тд странички выводится все та же информация, думаю что из за пункта 1.
Вот вывод на страничку index.php
PHP код:

<?    $result13 mysql_query("SELECT * FROM lessons ",$db);  if (!$result13)    {  echo "<p>Запрос на выборку данных из базы не прошел! <br> <strong>Код ошибки:</strong></p>";  exit (mysql_error());  }    if (mysql_num_rows ($result13)>0)    {  $myrow mysql_fetch_array($result13);    do    {    printf("<table width='350' cellpadding='0' cellspacing='0' class='lessons'>          <tr>      <td>         <h3><a href='wiew_lessons.php?id=%s'><p>%s</p></a><p>%s</p></h3></p>                   <p class='lesson3'>Автор урока: %s</p>                   <p class='lesson3'>Дата добавления урока: %s</p>      </td>            <td></td>          </tr>                    <tr>            <td>%s</td>            <td></td>          </tr>        </table>",$myrow['id'],$myrow['title'],$myrow['img'],$myrow['author'],$myrow['date'],$myrow['description']);    }    while ($myrow mysql_fetch_array($result13));    }    else    {  echo "<p>В таблице нет записей!</p>";  exit();  }    ?>

Чуть ниже идет постраничная навигация:
PHP код:

<? $result77 mysql_query("SELECT str FROM options"$db);  $myrow77 mysql_fetch_array($result77);  $num $myrow77["str"];  // Извлекаем из URL текущую страницу  if(isset($_GET['page'])) $page = $_GET['page'];  else $page = 1;  // Определяем общее число сообщений в базе данных  $result00 = mysql_query("SELECT COUNT(*) FROM lessons",$db);  $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  $result14 = mysql_query("SELECT * FROM lessons ORDER BY id LIMIT $start, $num",$db);  ?>

Продолжение кода.
PHP код:

<?  // Проверяем нужны ли стрелки назад  if ($page != 1) $pervpage = '<a href=./index.php?page=1>Первая</a> | <a href=./index.php?page='. ($page - 1) .'>Предыдущая</a> | ';  // Проверяем нужны ли стрелки вперед  if ($page != $total) $nextpage = ' | <a href=./index.php?page='. ($page + 1) .'>Следующая</a> | <a href=./index.php?page=' .$total. '>Последняя</a>';    // Находим две ближайшие станицы с обоих краев, если они есть  if($page - 5 > 0) $page5left = ' <a href=./index.php?page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';  if($page - 4 > 0) $page4left = ' <a href=./index.php?page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';  if($page - 3 > 0) $page3left = ' <a href=./index.php?page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';  if($page - 2 > 0) $page2left = ' <a href=./index.php?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';  if($page - 1 > 0) $page1left = '<a href=./index.php?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';    if($page + 5 <= $total) $page5right = ' | <a href=./index.php?page='. ($page + 5) .'>'. ($page + 5) .'</a>';  if($page + 4 <= $total) $page4right = ' | <a href=./index.php?page='. ($page + 4) .'>'. ($page + 4) .'</a>';  if($page + 3 <= $total) $page3right = ' | <a href=./index.php?page='. ($page + 3) .'>'. ($page + 3) .'</a>';  if($page + 2 <= $total) $page2right = ' | <a href=./index.php?page='. ($page + 2) .'>'. ($page + 2) .'</a>';  if($page + 1 <= $total) $page1right = ' | <a href=./index.php?page='. ($page + 1) .'>'. ($page + 1) .'</a>';    // Вывод меню если страниц больше одной    if ($total > 1)  {  Error_Reporting(E_ALL & ~E_NOTICE);  echo "<div class=\"pstrnav\">";  echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;  echo "</div>";  }  ?>

Вот так код нагляднее будет:
PHP код:

<?

$result13 
mysql_query("SELECT * FROM lessons ",$db);
if (!
$result13)

{
echo 
"<p>Запрос на выборку данных из базы не прошел! <br> <strong>Код ошибки:</strong></p>";
exit (
mysql_error());
}

if (
mysql_num_rows ($result13)>0)

{
$myrow mysql_fetch_array($result13);

do

{

printf("<table width='350' cellpadding='0' cellspacing='0' class='lessons'>
        <tr>
    <td>         <h3><a href='wiew_lessons.php?id=%s'><p>%s</p></a><p>%s</p></h3></p>
                 <p class='lesson3'>Автор урока: %s</p>
                 <p class='lesson3'>Дата добавления урока: %s</p>
    </td>
          <td></td>
        </tr>
        
        <tr>
          <td>%s</td>
          <td></td>
        </tr>
      </table>"
,$myrow['id'],$myrow['title'],$myrow['img'],$myrow['author'],$myrow['date'],$myrow['description']);

}

while (
$myrow mysql_fetch_array($result13));

}

else

{
echo 
"<p>В таблице нет записей!</p>";
exit();
}

?>
<? $result77 
mysql_query("SELECT str FROM options"$db);
$myrow77 mysql_fetch_array($result77);
$num $myrow77["str"];
// Извлекаем из URL текущую страницу
if(isset($_GET['page'])) $page $_GET['page'];
else 
$page 1;
// Определяем общее число сообщений в базе данных
$result00 mysql_query("SELECT COUNT(*) FROM lessons",$db);
$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
$result14 mysql_query("SELECT * FROM lessons ORDER BY id LIMIT $start, $num",$db);
?>
<?
// Проверяем нужны ли стрелки назад
if ($page != 1$pervpage '<a href=./index.php?page=1>Первая</a> | <a href=./index.php?page='. ($page 1) .'>Предыдущая</a> | ';
// Проверяем нужны ли стрелки вперед
if ($page != $total$nextpage ' | <a href=./index.php?page='. ($page 1) .'>Следующая</a> | <a href=./index.php?page=' .$total'>Последняя</a>';

// Находим две ближайшие станицы с обоих краев, если они есть
if($page 0$page5left ' <a href=./index.php?page='. ($page 5) .'>'. ($page 5) .'</a> | ';
if(
$page 0$page4left ' <a href=./index.php?page='. ($page 4) .'>'. ($page 4) .'</a> | ';
if(
$page 0$page3left ' <a href=./index.php?page='. ($page 3) .'>'. ($page 3) .'</a> | ';
if(
$page 0$page2left ' <a href=./index.php?page='. ($page 2) .'>'. ($page 2) .'</a> | ';
if(
$page 0$page1left '<a href=./index.php?page='. ($page 1) .'>'. ($page 1) .'</a> | ';

if(
$page <= $total$page5right ' | <a href=./index.php?page='. ($page 5) .'>'. ($page 5) .'</a>';
if(
$page <= $total$page4right ' | <a href=./index.php?page='. ($page 4) .'>'. ($page 4) .'</a>';
if(
$page <= $total$page3right ' | <a href=./index.php?page='. ($page 3) .'>'. ($page 3) .'</a>';
if(
$page <= $total$page2right ' | <a href=./index.php?page='. ($page 2) .'>'. ($page 2) .'</a>';
if(
$page <= $total$page1right ' | <a href=./index.php?page='. ($page 1) .'>'. ($page 1) .'</a>';

// Вывод меню если страниц больше одной

if ($total 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo 
"<div class=\"pstrnav\">";
echo 
$pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
echo 
"</div>";
}
?>


Sham 29-01-2009 19:17 1023730

Цитата:

Цитата igrikk
mysql_query("SELECT COUNT(*) FROM lessons",$db) »

емнип COUNT(*) без GROUP BY не работает...

igrikk 29-01-2009 20:44 1023832

Что то не то, уже голова не варит.

Sham 30-01-2009 03:29 1024080

Цитата:

Цитата igrikk
выводит все статьи из БД на странице, хотя стоит ограничение 2 на страницу »

а зачем тогда в начале это
Цитата:

Цитата igrikk
$result13 = mysql_query("SELECT * FROM lessons ",$db);
if (!$result13) »

???

igrikk 30-01-2009 13:57 1024438

Должно выводиться по два урока из базы на страницу, в базе options прописано два урока str
а выводятся все которые есть в базе
ни как не врублюсь где ошибка, помогите профи, пожалуйста.

Igor_I 30-01-2009 19:49 1024797

Со своими разными result ты сам себя запутал.
PHP код:

Error_Reporting(E_ALL & ~E_NOTICE);
    
    
$limit mysql_result (mysql_query ("SELECT str FROM options"$db), 0);     
    
$num $limit;
             
    
// Извлекаем из URL текущую страницу
    
if(isset($_GET['page'])) $page $_GET['page'];
    else 
$page 1;

    
// Определяем общее число сообщений в базе данных
    
$posts = = mysql_result (mysql_query ("SELECT COUNT(*) FROM lessons",$db), 0);

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

    
// Определяем начало сообщений для текущей страницы
    
$page intval($page);

    
// Если значение $page меньше единицы или отрицательно
    // переходим на первую страницу
    // А если слишком большое, то переходим на последнюю
    
if(empty($page) or $page 0$page 1;
    if(
$page $total$page $total;

    
// Вычисляем начиная с какого номера
    // следует выводить сообщения
    
$start $page $num $num;

    
// Проверяем нужны ли стрелки назад
    
if ($page != 1$pervpage '<a href=./index.php?page=1>Первая</a> | <a href=./index.php?page='. ($page 1) .'>Предыдущая</a> | ';
    
    
// Проверяем нужны ли стрелки вперед
    
if ($page != $total$nextpage ' | <a href=./index.php?page='. ($page 1) .'>Следующая</a> | <a href=./index.php?page=' .$total'>Последняя</a>';

    
// Находим две ближайшие станицы с обоих краев, если они есть
    
if($page 0$page5left ' <a href=./index.php?page='. ($page 5) .'>'. ($page 5) .'</a> | ';
    if(
$page 0$page4left ' <a href=./index.php?page='. ($page 4) .'>'. ($page 4) .'</a> | ';
    if(
$page 0$page3left ' <a href=./index.php?page='. ($page 3) .'>'. ($page 3) .'</a> | ';
    if(
$page 0$page2left ' <a href=./index.php?page='. ($page 2) .'>'. ($page 2) .'</a> | ';
    if(
$page 0$page1left '<a href=./index.php?page='. ($page 1) .'>'. ($page 1) .'</a> | ';

    if(
$page <= $total$page5right ' | <a href=./index.php?page='. ($page 5) .'>'. ($page 5) .'</a>';
    if(
$page <= $total$page4right ' | <a href=./index.php?page='. ($page 4) .'>'. ($page 4) .'</a>';
    if(
$page <= $total$page3right ' | <a href=./index.php?page='. ($page 3) .'>'. ($page 3) .'</a>';
    if(
$page <= $total$page2right ' | <a href=./index.php?page='. ($page 2) .'>'. ($page 2) .'</a>';
    if(
$page <= $total$page1right ' | <a href=./index.php?page='. ($page 1) .'>'. ($page 1) .'</a>';
    
    
// Выбираем $num сообщений начиная с номера $start
    
$result mysql_query("SELECT * FROM lessons ORDER BY id LIMIT $start, $num",$db);
    
    if (!
$result)
    {
        echo 
"<p>Запрос на выборку данных из базы не прошел! <br> <strong>Код ошибки:</strong></p>";
        exit (
mysql_error());
    }

    if (
mysql_num_rows ($result)>0)
    {
        
$myrow mysql_fetch_array($result);

        do
        {
            
printf("<table width='350' cellpadding='0' cellspacing='0' class='lessons'>
            <tr>
            <td> <h3><a href='wiew_lessons.php?id=%s'><p>%s</p></a><p>%s</p></h3></p>
            <p class='lesson3'>Автор урока: %s</p>
            <p class='lesson3'>Дата добавления урока: %s</p>
            </td>
            <td></td>
            </tr>

            <tr>
            <td>%s</td>
            <td></td>
            </tr>
            </table>"
,$myrow['id'],$myrow['title'],$myrow['img'],$myrow['author'],$myrow['date'],$myrow['description']);
        }

        while (
$myrow mysql_fetch_array($result));
    }

    else

    {
        echo 
"<p>В таблице нет записей!</p>";
        exit();
    }

    
// Вывод меню если страниц больше одно
    
if ($total 1)
    {
        echo 
"<div class=\"pstrnav\">";
        echo 
$pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
        echo 
"</div>";
    } 

Хотя насчет
PHP код:

// Определяем общее число сообщений в базе данных
    
$posts = = mysql_result (mysql_query ("SELECT COUNT(*) FROM lessons",$db), 0); 

есть сомнения, но ты проверь.
Насчет подсветки кода - сначала размещаем код - потом заключаем в теги.

Odessyt 10-07-2010 10:56 1450732

Вижу, что ветка форума довольно старая, но осмелюсь задать вопрос знатокам. У меня на сайте стоит практически аналогичная форма навигации и всё работало без проблем, но я столкнулся с непонятным мне багом: если страниц больше одной и в переменную $region попадает одно слово целиком - то всё ОК, если же переменная состоит из двух слов с пробелом между ними - то выводится только первое слово, а вся ссылка после него обрезается
Пример: $region Pattaya - http://www.dta.odessa.ua/hotel.php?r...Pattaya&page=2 (Всё правильно)
$region Куала Lumpur - должно выводиться так: http://www.dta.odessa.ua/hotel.php?r... Lumpur&page=2 , а выводится только http://www.dta.odessa.ua/hotel.php?region=Kuala
Я никак не могу понять, что именно обрезает ссылку на пробеле. Если в этом кто-то разобрался - откликнитесь, плиз!!! - очень нужна помощь

PHP код:
PHP код:

<?
$result77 
mysql_query("SELECT str FROM options"$db);
$myrow77 mysql_fetch_array($result77);
$num $myrow77["str"];
// Извлекаем из URL текущую страницу
@$page $_GET['page'];
// Определяем общее число сообщений в базе данных
$result00 mysql_query("SELECT COUNT(*) FROM hotel  WHERE region = '$region' ");
$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 * FROM hotel  WHERE region ='$region' ORDER BY name LIMIT $start, $num",$db);
$myrow mysql_fetch_array ($result);
do {
$result15 mysql_query ("SELECT COUNT(*) FROM comments WHERE post ='$myrow[id]'",$db);
$r2 mysql_fetch_array ($result15);
    
$r $myrow["rating"]/$myrow["q_vote"];
    
$r intval($r);
printf(
       
"<table></table>");
}
while (
$myrow mysql_fetch_array ($result));

// Проверяем нужны ли стрелки назад
if ($page != 1$pervpage '<a href=hotel.php?region='.$region.'&page=1>Первая</a> | <a href=hotel.php?region='.$region.'&page='. ($page 1) .'>Предыдущая</a> | ';
// Проверяем нужны ли стрелки вперед
if ($page != $total$nextpage ' | <a href=hotel.php?region='.$region.'&page='. ($page 1) .'>Следующая</a> | <a href=hotel.php?region='.$region.'&page=' .$total'>Последняя</a>';

// Находим две ближайшие станицы с обоих краев, если они есть
if($page 0$page5left ' <a href=hotel.php?region='.$region.'&page='. ($page 5) .'>'. ($page 5) .'</a> | ';
if(
$page 0$page4left ' <a href=hotel.php?region='.$region.'&page='. ($page 4) .'>'. ($page 4) .'</a> | ';
if(
$page 0$page3left ' <a href=hotel.php?region='.$region.'&page='. ($page 3) .'>'. ($page 3) .'</a> | ';
if(
$page 0$page2left ' <a href=hotel.php?region='.$region.'&page='. ($page 2) .'>'. ($page 2) .'</a> | ';
if(
$page 0$page1left ' <a href=hotel.php?region='.$region.'&page='. ($page 1) .'>'. ($page 1) .'</a> | ';

if(
$page <= $total$page5right ' | <a href=hotel.php?region='.$region.'&page='. ($page 5) .'>'. ($page 5) .'</a>';
if(
$page <= $total$page4right ' | <a href=hotel.php?region='.$region.'&page='. ($page 4) .'>'. ($page 4) .'</a>';
if(
$page <= $total$page3right ' | <a href=hotel.php?region='.$region.'&page='. ($page 3) .'>'. ($page 3) .'</a>';
if(
$page <= $total$page2right ' | <a href=hotel.php?region='.$region.'&page='. ($page 2) .'>'. ($page 2) .'</a>';
if(
$page <= $total$page1right ' | <a href=hotel.php?region='.$region.'&page='. ($page 1) .'>'. ($page 1) .'</a>';

// Вывод меню если страниц больше одной

if ($total 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo 
"<div class='country_name_ht'>";
echo 
$pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
echo 
"</div>";
}
?>


Sham 11-07-2010 03:03 1451053

Цитата:

Цитата Odessyt
' <a href=hotel.php?region='.$region.'&page=' »

в урле не дб пробельных символов. $region дб в urlencode.
кроме того, соблюдайте HTML-стандарты (кавычки и спец-символы).
Цитата:

Цитата Odessyt
WHERE region = '$region' »

а тут вам инъекцию сделают...

Odessyt 13-07-2010 19:47 1452764

Цитата:

Цитата Sham
в урле не дб пробельных символов. $region дб в urlencode.
кроме того, соблюдайте HTML-стандарты (кавычки и спец-символы).
Цитата Odessyt:
WHERE region = '$region' »
а тут вам инъекцию сделают... »

Спасибо за ответ. С urlencode я уже разобрался - дело было именно в этом.
А как защититься от инъекций???

Цитата:

Цитата Sham
кроме того, соблюдайте HTML-стандарты (кавычки и спец-символы). »

Вы имеете в виду не так WHERE region = '$region' а Так WHERE `region` = '$region' (незвание таблицы в обратных кавычках) или речь о другом ?

Sham 13-07-2010 23:14 1452852

Цитата:

Цитата Odessyt
как защититься от инъекций??? »

mysql_real_escape_string
Цитата:

Цитата Sham
соблюдайте HTML-стандарты (кавычки и спец-символы) »

атрибуты в кавычки ", спец-символы (& -> &amp;amp; и т.д.). см. htmlspecialchars

Odessyt 14-07-2010 10:38 1453035

Спасибо, Sham - я пошёл учиться


Время: 12:39.

Время: 12:39.
© OSzone.net 2001-