Войти

Показать полную графическую версию : постраничная навигация mysql, php


Страниц : 1 [2]

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

Sham
06-11-2008, 02:01
но сообщение определенно полезное »
еще бы... оно животворящее, целебное, придает жизненных сил... очищает организм от шлаков... и снабжает мозги кислородом. Читай на здоровье...

Igor_I
06-11-2008, 02:09
Значит код не смотрел :)

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

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

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

Sham
06-11-2008, 03:35
dima1981, ваши посты невозможно читать... ставьте запятые и точки правильно хотя бы, не впадлу...

dima1981
06-11-2008, 04:22
да посты как посты никогда не мог правильно их расставлять сори, я бы их совсем бы не читал т.к. трудно разбираемы они очень

dima1981
06-11-2008, 06:16
Строка в браузере при навидении курсора на ссылку страницы отображается так page=2&mos=&mds
из html данные передаются методом get

код теперь выглядит так
$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');
}

навигация так 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>'; и когда делается запрос, то показываются данные из всей таблицы постранично т.е. например по запросу существует три страницы, но показывает что десять и соответственно запрос не выполняется по условию, но переменные из форм на страницу вывода передаются нормально

Igor_I
06-11-2008, 09:41
Сначала
'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 для подсчета получившихся строк. Но пока голову этим не заморачивай.

dima1981
06-11-2008, 10:29
Исправил теперь строка выглядит так http://127.0.0.1/zt.php?m_o=&submit=%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C&m_d=h h это то что в форме прописываю, вот в начале, когда до Переменные-то разные у меня первая страница показывалась правильно и строки правильно подсчитывал и остальное, но на вторую страницу не мог данные запроса передать, теперь с первой страницы начинает не тот результат показывать, может как то начальный код подправить может получится?

запрос 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');
}

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

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

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

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

$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
;;

dima1981
06-11-2008, 18:34
скоро отпишусь мускл не соединяется со скриптами и вообщем спасибо всем, мне не удобно за то, что не понимаю и при всем уважении не та тема чтобы так растягивать, пойду на поиски получу нормальный, работающий код напишу тут, для завершения темы.

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

dima1981
10-11-2008, 03:33
<?
$db = mysql_connect("localhost","root","***");
mysql_select_db("rp", $db);
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
$m_o=$_GET[m_o];
$m_d=$_GET[m_d];
if ($_GET[m_o] && $_GET[m_d])
{
$num = 5;
$page=$_GET['page'];
$result = mysql_query("SELECT * FROM rt WHERE m_o='$m_o' AND m_d='$m_d'");
$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");
}
else if ($_GET[m_o] && !$_GET[m_d]) {
$num = 5;
$page=$_GET['page'];
$result = mysql_query("SELECT * FROM rt WHERE m_o='$m_o'");
$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='$m_o' LIMIT $start, $num");
}
else if ( $_GET[m_d] && !$_GET[m_o] ){
$num = 5;
$page=$_GET['page'];
$result = mysql_query("SELECT * FROM rt WHERE m_d='$m_d'");
$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='$m_d' LIMIT $start, $num");
}
else {
$num = 5;
$page=$_GET['page'];
$result = mysql_query('SELECT * FROM rt');
$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 LIMIT $start, $num");
echo ( "<center><h4>Не был сделан запрос, выведена информация по всей базе.</h4></center>");
}
while ( $abc = mysql_fetch_row($result))
{
?>

<table><tr><td><?php $abc[0] ?></td><td><?php $abc[1] ?></td></tr></table> <!-- вывод данных в браузер -->

<?php
}
if ($page != 1) $pervpage = '<a href="zt.php?page='. (1) .'&m_o='. $m_o .'&m_d='. $m_d .'"><<</a>
<a href="zt.php?page='. ($page - 1) .'&m_o='. $m_o .'&m_d='. $m_d .'"><</a> ';
if ($page != $total) $nextpage = ' <a href="zt.php?page='. ($page + 1) .'&m_o='. $m_o .'&m_d='. $m_d .'">></a>
<a href= zt.php?page=' .$total. '>>></a>';
echo ("<br><div align='center'>$pervpage $page2left $page1left $page $page1right $page2right $nextpage</div>");
echo ("<br><br><div align='center'>Всего страниц по запросу $total</div>");
mysql_close($db);
?>


Походу полностью рабочий код, только с безопасностью не знаю на сколько, хорошо тут но страницы и считает, и отображает, и показывает, как надо и нормально )

Хочу сказать всем спасибо, все таки и такое натянутое общение, какое происходило у меня с некоторыми участвующими способствует прогрессу и если бы не те знания, которые во мне сформировались, при общение в этой теме мне бы не удалось доработать этот код (спасибо автору) до нужного результата, благодарю )

dima1981
10-11-2008, 04:28
Поторопился, не получается вывод данных, как сделать, чтобы получилось, например запрашиваются данные, которых в базе нет, щас у меня отображается пустая страница, но хотелось бы, чтобы например или при такой ситуации строка появлялась(данных нет) или выводилась вся таблица?
Заранее спасибо.

Igor_I
11-11-2008, 00:04
Помнится на phpclube, толи Фанат, то ли tony сказал примерно такую вещь. Программа думать не умеет, что вы ей скажете, то она и сделает.
В данном случае думаем и конспектируем.
запрашиваются данные, которых в базе нет = if (mysql_num_rows == 0)
появлялась строка - данных нет = echo 'Данных нет';
выводилась вся таблица = mysql_query('SELECT * FROM rt')

dima1981
11-11-2008, 07:40
Программа думать не умеет, что вы ей скажете, то она и сделает » да где то я это видел, теперь за эксперементы, спасибо.

Не догнал я, как это делается заместо этой строки $posts = mysql_num_rows($result);во всех полях кода прописал эту
$posts = mysql_num_rows(==0);
да разные остальные комбинации пробывал подбирать, ходил на phpclub посмотреть, но тишина т.е. ничего не получилось, но получится постепенно, уверен )

Igor_I
11-11-2008, 19:27
if (mysql_num_rows($result) == 0) $empty = 1;

А внизу вывод

if ($empty == 1) echo "Данных нет";

http://tony2001.phpclub.net/doc/standard/ - мне кажется будет полезна.




© OSzone.net 2001-2012