Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Проблема с постраничной навигацией, не ставит огриничение на вывод

Ответить
Настройки темы
Проблема с постраничной навигацией, не ставит огриничение на вывод

Новый участник


Сообщения: 9
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: Sham
Дата: 13-07-2010
Описание: оформление кода
Помогите пожалуйста уже сил нет, два дня бьюсь.
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>";
}
?>


Отправлено: 13:39, 29-01-2009

 

Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


Цитата igrikk:
mysql_query("SELECT COUNT(*) FROM lessons",$db) »
емнип COUNT(*) без GROUP BY не работает...

Отправлено: 19:17, 29-01-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 9
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 20:44, 29-01-2009 | #3


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


Цитата igrikk:
выводит все статьи из БД на странице, хотя стоит ограничение 2 на страницу »
а зачем тогда в начале это
Цитата igrikk:
$result13 = mysql_query("SELECT * FROM lessons ",$db);
if (!$result13) »
???

Отправлено: 03:29, 30-01-2009 | #4


Новый участник


Сообщения: 9
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 13:57, 30-01-2009 | #5


Ветеран


Сообщения: 1862
Благодарности: 132

Профиль | Сайт | Отправить PM | Цитировать


Со своими разными 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); 

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

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4


Отправлено: 19:49, 30-01-2009 | #6


Аватара для Odessyt

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вижу, что ветка форума довольно старая, но осмелюсь задать вопрос знатокам. У меня на сайте стоит практически аналогичная форма навигации и всё работало без проблем, но я столкнулся с непонятным мне багом: если страниц больше одной и в переменную $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>";
}
?>


Отправлено: 10:56, 10-07-2010 | #7


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


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

Отправлено: 03:03, 11-07-2010 | #8


Аватара для Odessyt

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 19:47, 13-07-2010 | #9


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


Цитата Odessyt:
как защититься от инъекций??? »
mysql_real_escape_string
Цитата Sham:
соблюдайте HTML-стандарты (кавычки и спец-символы) »
атрибуты в кавычки ", спец-символы (& -> &amp; и т.д.). см. htmlspecialchars

Отправлено: 23:14, 13-07-2010 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Проблема с постраничной навигацией, не ставит огриничение на вывод

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Драйвер - Не ставит драйвера на SIGMATEL STAC 92XX C-Major HD Audio Golovan Microsoft Windows 7 5 08-06-2010 08:48
Ругаеться что ОС не Лицензионная и не ставит MP11 kaEwituS Microsoft Windows 2000/XP 2 28-11-2006 07:34
Когда планируете ставит Windows Vista??? xden777 Microsoft Windows Vista 21 24-11-2006 00:50
юзер ставит себе права администратора Infinity7 Microsoft Windows 2000/XP 2 09-02-2006 22:07
Прога которая ставит Пароли. ALECS Хочу все знать 2 07-03-2004 23:14




 
Переход