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

Компьютерный форум 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 | Цитировать


Да только не понятно как это все
Цитата Sham:
вы должны все параметры передавать методом get (и хтмл-форма должна быть get - т.е. через URL).
в ссылках навигации я не вижу никаких параметров кроме страницы, а должны быть все данные, включая строку запроса, и остальные данные формы (т.е. GET)
соответственно все $_POSTы после этого замените на $_GETы (переход по ссылкам означает, что вы посылаете параметры методом get)...
не забывайте все данные перед вставкой в строку запроса обрабатывать функцией mysql_real_escape_string() - это защита от изменения строки запроса извне...
в принципе можно совместить post и get (первоначально слать post, а ссылки уже будут get слать), и тогда нужно проверять уже $_REQUEST (это все данные подряд, присланные юзером)... »
выглядит, но сообщение определенно полезное

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


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



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

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


Аватара для dmitryst

Ветеран


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

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


Цитата dima1981:
на перле? )
при всем уважении у меня не получился этот код. »
Нет, я потихоньку учу PHP . А метод, который я описал, работает и там, и тут.

GET-запрос выглядит так: "http://site.com/script.php?parametr1=10¶metr2=test&page=3" и так далее, то есть все нужные параметры передаются в ссылке. Соответственно, в скрипте, который эти параметры принимает, пишем $var = $_GET['parametr1'], например. Вы уж определитесь - или все GET или все POST, а то запутаетесь. Кстати, все эскейп-функции можно не применять, если у вас все параметры гарантировано числа или на английском (во всяком случае, на первом этапе). Кроме того, в сложных случаях я дублирую запросы к базе данных на экран - мало ли, может, какая-то переменная принимает не то значение, какое хотелось бы.

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


Отправлено: 11:23, 05-11-2008 | #12


Ветеран


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

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


dima1981,
Цитата dmitryst:
Кроме того, в сложных случаях я дублирую запросы к базе данных на экран - мало ли, может, какая-то переменная принимает не то значение, какое хотелось бы. »
Вот с этого и надо начинать.
PHP код: Выделить весь код

##Не писать 

$result mysql_query("SELECT * FROM rt WHERE m_o='$m_o' AND m_d='$m_d'");
##а писать так:
$query "SELECT * FROM rt WHERE m_o='$m_o' AND m_d='$m_d'";
$result mysql_query($query);
##а в конце страницы
echo $query

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

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


Отправлено: 13:44, 05-11-2008 | #13


Аватара для dmitryst

Ветеран


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

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


Igor_I, не согласен.

Код: Выделить весь код
///вот так писать (ибо некоторые поля могут совпасть с зарезервированными словами, да и значение в обратных апострофах гарантированно считается названием таблицы или поля)

$query = "SELECT * FROM `rt` WHERE `m_o`='$m_o' AND `m_d`='$m_d'";
///и тут же проверять.
echo $query;
$result = mysql_query($query);

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


Отправлено: 14:41, 05-11-2008 | #14


Аватара для dima1981

Ветеран


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

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


этот запрос не срабатывает

$query("SELECT * FROM rt LIMIT $start, $num");
$result= mysql_query($query);
пишет Fatal error: Function name must be a string

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


Отправлено: 15:11, 05-11-2008 | #15


Аватара для dmitryst

Ветеран


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

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


dima1981, потому что так надо:
Цитата dima1981:
$query = ("SELECT * FROM `rt` LIMIT $start, $num"); »

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


Отправлено: 15:39, 05-11-2008 | #16


Аватара для dima1981

Ветеран


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

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


не то dmitryst, вернулся к предыдущему способу $result = mysql_query хотя полностью не осознаю последствий, которые могут возникнуть с этим переходом, но он хоть функцианирует и первую страницу показывает нормально, и число строк считается правильно, и навигация на ней отображается, только вот на вторую переходит без переменных, но это поправимо, только вот узнать бы как их передать думаю с переменной $posts, только где ее прописывать...

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


Отправлено: 16:13, 05-11-2008 | #17


Ветеран


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

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


dmitryst, для меня это не критично, можно в конце страницы, можно в середине.
Вот твой первый файл в более наглядном виде. Из которого видно что у тебя проверяются переменные $_POST, но которые не передаются на вторую страницу.

Цитата:
вернулся к предыдущему способу $result = mysql_query хотя полностью не осознаю последствий
Извини, но вспоминаются слова профессора в ответ студенту где ошибка - в генах молодой человек.
Используй функцию echo везде, где что-то не получается. Придумай каждому условию переменную и выводи её.
--------------
Исправил код. Правда я не знаю насколько он работоспособен.

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

<? 

<? 
$db mysql_connect("localhost","root","***"); 
mysql_select_db("rp"$db); 
mysql_query("SET NAMES 'utf8'"); 
mysql_query("SET CHARACTER SET 'utf8'"); 

// Текущая страница      
$page $_GET['page'];  

$pmd $_POST[m_d];
$pmo $_POST[m_o];

if (empty (
$_POST[m_d]) $pmd $_GET[pmd];
if (empty (
$_POST[m_o]) $pmd $_GET[pmo];

if (
$pmo && $pmd){  
        
$num 2;    
          
        
// Общее число сообщений  
        
$result mysql_query('SELECT * FROM rt WHERE m_o="'.$pmo.'" AND m_d="'.$pmd.'"');   
        
$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="'.$pmo.'" AND m_d="'.$pmd.'" LIMIT $start, $num');    
        }  
else if (
$pmo && !$pmd) {  
        
$num 2;            
        
// Общее число сообщений  
        
$result mysql_query('SELECT * FROM rt WHERE m_o="'.$pmo.'"');    
        
$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="'.$pmo.'" LIMIT $start, $num');    
}  
else if (
$pmd && !$pmo ){  
        
$num 2;      
        
// Общее число сообщений  
        
$result mysql_query('SELECT * FROM rt WHERE m_d="'.$pmd.'"');    
        
$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="'.$pmd.'" LIMIT $start, $num');    
}  
else {  
        
$num 2;      
        
// Общее число сообщений  
        
$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) .'&pmd='.$pmd.'&pmo='.$pmo.'><</a> ';    
// Нужны ли стрелки вперед    
if ($page != $total$nextpage ' <a href= zt.php?page='. ($page 1) .'&pmd='.$pmd.'&pmo='.$pmo.'>></a>    
                                   <a href= zt.php?page=' 
.$total'>>></a>';    

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

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

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


Последний раз редактировалось Igor_I, 05-11-2008 в 20:12.


Отправлено: 19:49, 05-11-2008 | #18


Аватара для dima1981

Ветеран


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

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


Цитата Igor_I:
Извини »
забыли, короче и обсуждение того кто да чего и как ну ее у каждого на совершение определенного поступка существуют определенные основания и то кто чем движем на самом деле это трудный вопрос но вот методы они конечно могут варьироваться в зависимости от ситуации тут дело вкуса, понимаю, что общение на програмерские темы у меня храмает очень и очень, да и понимание этих тем как таковы отсутствует напроч, да и надо ли это мне, вообщем обращаюсь на форум в процессе создания этого сайта, кода из, которых прошу подкоректировать тут на форуме и кто хочет и может тот смотрит вникает и содействует определенным образом мне, я этим людям очень благодарен и могу их понять есть и конструкты, есть и деструкты отличия одних от других очевидны, кому то хоть чего но он как есть по природе созидатель так и есть это гены вообщем ты правильно заметил, но это ладно, заделаю этот сайт полюбому хоть на это потребуется пара жизней и соответственно интересует только те темы, которые требуются для его создания и только вникать во, что то дальше в кодинге или программенге как тут получше выразить понятие это, это для меня лишне хочу этот сайт и все и считаю, что компьютер нужен для развлечения и доделов сайт только исключительно для этого его и собераюсь задействовывать, ну щас вот как сказал sham "зачем придумывать велосипед существует огромное количество готовых решений" и так далее создаю этот сайт, и кому охото и есть желание мне помагают и здорово что такие люди есть.
Сори за поэму и новелу кто этот текст так назовет

Igor_I Исправил только работоспособность велосипед говорит починил, только он так и едит только напрво но хоть сигнал появился, понял спасибо )
скопировал его и вперед с передачей параметров эксперементировать дошел только до этого
<a href= zt.php?page='. ("'.$page - 1.'" . pmd="'.$pmd.'" . pmo="'.$pmo.'"') .'><</a>
продолжу с этим спасибо продолжу

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


Последний раз редактировалось dima1981, 06-11-2008 в 00:14.


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


Ветеран


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

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


Ну вот, генератор текста включил
Ну так по теме что есть сказать? Код смотрел?

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


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



Компьютерный форум 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




 
Переход