Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
постраничная навигация mysql, php

Аватара для dima1981

Ветеран


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

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


PHP код: Выделить весь код

<?

$db 
mysql_connect("localhost","root","***");
mysql_select_db("rp"$db);
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
if (
$_POST[m_o] && $_POST[m_d]){ 
      
$num 2;   
// Текущая страница 
$page=$_GET['page'];   
// Общее число сообщений 
$result mysql_query('SELECT * FROM rt WHERE m_o="'.$_POST[m_o].'" AND m_d="'.$_POST[m_d].'"');  
$posts mysql_num_rows($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;   
// Вывод с $start 
$result mysql_query('SELECT * FROM rt WHERE m_o="'.$_POST[m_o].'" AND m_d="'.$_POST[m_d].'" LIMIT $start, $num');   

else if (
$_POST[m_o] && !$_POST[m_d]) { 
      
$num 2;   
// Текущая страница 
$page=$_GET['page'];   
// Общее число сообщений 
$result mysql_query('SELECT * FROM rt WHERE m_o="'.$_POST[m_o].'"');   
$posts mysql_num_rows($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;   
// Вывод с $start 
$result mysql_query('SELECT * FROM rt WHERE m_o="'.$_POST[m_o].'" LIMIT $start, $num');   

else if ( 
$_POST[m_d] && !$_POST[m_o] ){ 
      
$num 2;   
// Текущая страница 
$page=$_GET['page'];   
// Общее число сообщений 
$result mysql_query('SELECT * FROM rt WHERE m_d="'.$_POST[m_d].'"');   
$posts mysql_num_rows($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;   
// Вывод с $start 
$result mysql_query('SELECT * FROM rt WHERE m_d="'.$_POST[m_d].'" LIMIT $start, $num');   

else { 
   
$num 2;   
// Текущая страница 
$page=$_GET['page'];   
// Общее число сообщений 
$result mysql_query('SELECT * FROM rt');   
$posts mysql_num_rows($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;   
// Вывод с $start 
$result mysql_query("SELECT * FROM rt LIMIT $start, $num");   

while ( 
$abc mysql_fetch_row($result))
{
echo (
"$abc[0]  | $abc[1]");
}
if (
$page != 1$pervpage '<a href= zt.php?page=1><<</a>   
                               <a href= zt.php?page='
. ($page 1) .'><</a> ';   
// Нужны ли стрелки вперед   
if ($page != $total$nextpage ' <a href= zt.php?page='. ($page 1) .'>></a>   
                                   <a href= zt.php?page=' 
.$total'>>></a>';   

// Стр. с обоих краев 
if($page 0$page2left ' <a href= zt.php?page='. ($page 2) .'>'. ($page 2) .'</a> | ';   
if(
$page 0$page1left '<a href= zt.php?page='. ($page 1) .'>'. ($page 1) .'</a> | ';  
if(
$page <= $total$page2right ' | <a href= zt.php?page='. ($page 2) .'>'. ($page 2) .'</a>';   
if(
$page <= $total$page1right ' | <a href= zt.php?page='. ($page 1) .'>'. ($page 1) .'</a>'

// Вывод 
echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage
mysql_close($db);
?>

Скажите пожалуйста, почему у меня тут всю таблицу постранично хорошо показывает, но когда задан поиск по базе mysql то не показывает, понимаю, что вот в этом php запросе или строке, что то не так $result = mysql_query('SELECT * FROM rt WHERE m_d="'.$_POST[m_d].'" LIMIT $start, $num');
но, что кавычки нужны но где или как тут сделать двойные кавычки читаемые браузером нормально, как тут $result = mysql_query("SELECT * FROM rt LIMIT $start, $num"); ?
Заранее спасибо.

-------
не уверен, что знаешь наверняка, говори об этом заблаговремено )


Отправлено: 10:16, 04-11-2008

 

Аватара для dima1981

Ветеран


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

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


По теме:
скорее всего подходит изначальный код т.к. там присутствуют все переменные требуемые для нормальной работы навигации, только единственное это каким образом эти данные передать на вторую к примеру страницу т.е. как это выглядит
method=get $m_o or или && $m_d and $start такая тема, полазию по интернету, что то да отрою но тут все походу баста в этой теме наглость какая то из меня прет типа мне обязан кто то что то, пойду с машинами общаться как код созреет добавлю в тему,
спасибо всем

-------
не уверен, что знаешь наверняка, говори об этом заблаговремено )


Отправлено: 01:45, 06-11-2008 | #21



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

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


Deadooshka


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

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


Цитата dima1981:
но сообщение определенно полезное »
еще бы... оно животворящее, целебное, придает жизненных сил... очищает организм от шлаков... и снабжает мозги кислородом. Читай на здоровье...

Отправлено: 02:01, 06-11-2008 | #22


Ветеран


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

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


Значит код не смотрел

<a href= zt.php?page='. ($page - 1) .'&pmd='.$pmd.'&pmo='.$pmo.'><</a> - примерно так

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


Отправлено: 02:09, 06-11-2008 | #23


Аватара для dima1981

Ветеран


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

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


Да смотрел началось с того, что он не понял первые пару ifов потом когда, как то получилось сделать и он пошел дальше них то не смог, как раз эту строку прочитать, которая у тебя, ну и до чего дошел там написал строку она оказалась примерно тридцатой модификацией, из тех, которые эксперементируя задействовал, решил, что нужен образец в, котором с кавычками нормально, потому, что как и ты не знаю, как их там расставлять и остального, теперь в интернет за образцом только добраться до него бы, доберусь ) спасибо Igor_I

Sham, это было про то, что не совсем понял про get и post и то как эта строка, которая следуя приведенным инструкциям получится выглядит в виде коде, но зато понял примерно теорию т.е. какие примерно переменные и данные требуется передавать и то, что их надо передавать потому, что они сами не передадуться без инструкций т.е. требуется те, которые приходят из форм обязательно и тут думаю получится и можно заместо postа get и не прописывать не могу понять для чего но это ладно зато на основе него т.е. сообщения мысли появились, спасибо и поэтому посчитал это сообщение полезным

-------
не уверен, что знаешь наверняка, говори об этом заблаговремено )


Отправлено: 03:23, 06-11-2008 | #24


Deadooshka


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

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


dima1981, ваши посты невозможно читать... ставьте запятые и точки правильно хотя бы, не впадлу...

Отправлено: 03:35, 06-11-2008 | #25


Аватара для dima1981

Ветеран


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

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


да посты как посты никогда не мог правильно их расставлять сори, я бы их совсем бы не читал т.к. трудно разбираемы они очень

-------
не уверен, что знаешь наверняка, говори об этом заблаговремено )


Отправлено: 04:22, 06-11-2008 | #26


Аватара для dima1981

Ветеран


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

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


Строка в браузере при навидении курсора на ссылку страницы отображается так page=2&mos=&mds
из html данные передаются методом get

код теперь выглядит так
PHP код: Выделить весь код

$mos=$_get[m_o];
$mds=$_get[m_d];
if (
$_get[m_o] && $_get[m_d])

  
$num 5;
  
$page=$_get['page'];
  
$result mysql_query('SELECT * FROM rt WHERE m_o="'.$mos.'" AND m_d="'.$mds.'"');  
  
$posts mysql_num_rows($result); 
  
$total intval(($posts 1) / $num) + 1;
  
$page intval($page);
if(empty(
$page) or $page 0$page 1;   
  if(
$page $total$page $total;
  
$start $page $num $num;
  
$result mysql_query('SELECT * FROM rt WHERE m_o="'.$m_o.'" AND m_d="'.$m_d.'" LIMIT $start, $num');   


навигация так
PHP код: Выделить весь код

if ($page != 1$pervpage '<a href= zt.php?page=1><<</a>   
                               <a href= zt.php?page="'
.($page 1).'"><</a> ';
if (
$page != $total$nextpage ' <a href= zt.php?page='.($page 1).'&mos='.$mos.'&mds'.$mds.'>></a>   
                                   <a href= zt.php?page='
.$total.'>>></a>'

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

-------
не уверен, что знаешь наверняка, говори об этом заблаговремено )


Отправлено: 06:16, 06-11-2008 | #27


Ветеран


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

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


Сначала
'SELECT * FROM rt WHERE m_o="'.$mos.'" AND m_d="'.$mds.'"'
потом
'SELECT * FROM rt WHERE m_o="'.$m_o.'" AND m_d="'.$m_d.'" LIMIT $start, $num'
Переменные-то разные.
Да и зачем проверять те переменные, которые уже присвоенны другим переменным
if ($_get[m_o] && $_get[m_d])
Кстати, но это уже на будущее, в первом запросе можно использовать count для подсчета получившихся строк. Но пока голову этим не заморачивай.

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


Отправлено: 09:41, 06-11-2008 | #28


Аватара для dima1981

Ветеран


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

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


Исправил теперь строка выглядит так http://127.0.0.1/zt.php?m_o=&submit=...82%D1%8C&m_d=h h это то что в форме прописываю, вот в начале, когда до Переменные-то разные у меня первая страница показывалась правильно и строки правильно подсчитывал и остальное, но на вторую страницу не мог данные запроса передать, теперь с первой страницы начинает не тот результат показывать, может как то начальный код подправить может получится?

запрос
PHP код: Выделить весь код

else if ( $_get[mds] && !$_get[mos] ){ 

  
$num 5;
  
$page=$_get['page'];
  
$result mysql_query('SELECT * FROM rt WHERE m_d="'.$mds.'"');   
  
$posts mysql_num_rows($result);
  
$total intval(($posts 1) / $num) + 1;
  
$page intval($page);
if(empty(
$page) or $page 0$page 1;   
  if(
$page $total$page $total;
  
$start $page $num $num;
  
$result mysql_query('SELECT * FROM rt WHERE m_d="'.$mds.'" LIMIT $start, $num');


навигация как в предыдущем посте
только не получается т.е. как до этого полностью таблицу и про
Цитата Igor_I:
if ($_get[m_o] && $_get[m_d]) »
не совсем понел, деревянный я потому что

-------
не уверен, что знаешь наверняка, говори об этом заблаговремено )


Отправлено: 10:29, 06-11-2008 | #29


Аватара для dmitryst

Ветеран


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

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


Цитата dima1981:
не совсем понел, деревянный я потому что »
ну, не вы первый..
Короче, я совсем запутался в вашем алгоритме. Я предлагаю сделать так. Первым делом считаем общее количество строк в таблице - SELECT COUNT(*) FROM `rt` WHERE ваше_условие (пишем это значение в переменную $total). Далее, считаем количество страниц - $pages = ceil($total / $onpage), здесь $onpage это количество результатов на странице, ceil округляет это дело до следующего целого(то есть из 5,2 получится 6, что логично ). На первой странице выбираем нужные значения из таблицы - SELECT * FROM `rt` WHERE ваше_условие LIMIT 0,$onpage. Понятно? Надеюсь, понятно.
Далее, штампуем линки для следующей страницы -
PHP код: Выделить весь код

<a href="script.php?page=1&pages=$pages">next page</a

На следующей странице нам ничего считать не надо, просто проверим, не дошли ли до конца страниц, ($page == $pages), берем данные из базы (вычисляем сдвиг от начала - $offset= $page * $onpage; SELECT * FROM `rt` WHERE ваше_условие LIMIT $offset,$onpage ) ну и штампуем ссылки навигации
PHP код: Выделить весь код

$page1 $page 1;

$page2 $page 1;
print <<<END
print  <a href="script.php?page=$page1&pages=$pages">prev. page</a>
<a href="script.php?page=$page2&pages=$pages">next page</a>
END
;; 

-------
Осваиваю FreeBSD


Последний раз редактировалось dmitryst, 06-11-2008 в 13:02.


Отправлено: 12:04, 06-11-2008 | #30



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
php + mysql Аlchemist Программирование в *nix 10 04-09-2008 17:49
[решено] Apache 2.2.8 + Php 5.2.6 + MySQL 5.0.51b (win) - не работает php v0f41k Вебмастеру 4 11-05-2008 22:08
PHP+MYSQL pauluss Вебмастеру 6 09-07-2004 22:46
PHP+MySQL GhostBuster Программирование и базы данных 7 21-08-2003 21:07
php и mysql ZDemon Программное обеспечение Linux и FreeBSD 7 08-02-2003 03:33




 
Переход