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

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

dima1981 04-11-2008 10:16 942505

постраничная навигация mysql, php
 
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"); ?
Заранее спасибо.

Sham 04-11-2008 10:42 942521

PHP код:

$result mysql_query('SELECT * FROM rt WHERE m_d="'.$_POST['m_d'].'" LIMIT '.$start.', '.$num);
$result mysql_query("SELECT * FROM rt WHERE m_d='$_POST[m_d]' LIMIT $start, $num"); 

есть еще варианты...

dmitryst 04-11-2008 13:47 942662

$result = mysql_query("SELECT * FROM `rt` WHERE `m_d`='$_POST['m_d']' LIMIT `$start`, `$num`");
Так правильно - закавычиваем всё, что можно, а названия таблиц и полей - в обратные апострофы.

PS. Чтобы не путаться, лично я делаю вывод так:
определяю все нужные переменные
вывожу их с HTML в одном потоке:

print <<<END
<a href="#">$link_value</a>
...
ну и так далее
END
;;

dima1981 05-11-2008 00:24 943198

dmitryst,
Цитата:

Цитата dmitryst
Так правильно »

на перле? )
при всем уважении у меня не получился этот код.
Цитата:

Цитата dmitryst
определяю все нужные переменные
вывожу их с HTML в одном потоке:
print <<<END
<a href="#">$link_value</a>
...
ну и так далее
END
;; »

не могу понять, как это задействовать на практике трудновато, что то при всем желании dmitryst,

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

dima1981 05-11-2008 00:53 943216

dmitryst, про это
PHP код:

$m_d=$_POST[m_d];
$result mysql_query("SELECT * FROM rt WHERE m_d='$m_d' LIMIT $start, $num"); 

определяю все нужные переменные
вывожу их с HTML в одном потоке:
print <<<END
<a href="#">$link_value</a>
...
ну и так далее
END
;; », да?

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

Sham 05-11-2008 01:49 943243

dima1981, все, что касается строк в PHP узнаете здесь http://ru2.php.net/language.types.string
Цитата:

Цитата dima1981
$m_d=$_POST[m_d]; »

если m_d не константа, то там кавычки нужны везде... $_POST['m_d'] (если не внутри строки)...

* правильный синтаксис heredoc (который у вас немного неправильный) увидите по ссылке выше...

* не понятно, что и как вы ищите...

dima1981 05-11-2008 02:24 943257

Цитата:

Цитата Sham
* не понятно, что и как вы ищите... »

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

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");    


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

Sham 05-11-2008 03:15 943266

dima1981, вы пытаетесь изобрести велосипед... поищите готовые решения и там все будет понятно...

dima1981 05-11-2008 03:41 943270

Благодарю Sham, но так я поступаю за отсутствием мозгов и все равно не получается ничего, не передаются у меня переменные в pageвые страницы
вот код понимаю, что немного не отформатирован, но все таки может посмотрите?
PHP код:

<?
$db 
mysql_connect("localhost","root","***");
mysql_select_db("rp"$db);
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
$m_o=$_POST[m_o];
$m_d=$_POST[m_d];
if (
$_POST[m_o] && $_POST[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 (
$_POST[m_o] && !$_POST[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 ( 
$_POST[m_d] && !$_POST[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><h2>по данному запросу  $_POST[m_o] $_POST[m_d] информации в базе не размещено, вы можете посмотреть информацию, которая в базе есть, но база пополняется постоянно</h2></center>");

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>';
echo (
"<br><div align='center'>$pervpage $page2left $page1left  $page $page1right $page2right $nextpage</div>");
echo (
"<br><br><div align='center'>Всего страниц по запросу $total</div>");
mysql_close($db);
?>


Sham 05-11-2008 04:34 943283

dima1981, вы должны все параметры передавать методом get (и хтмл-форма должна быть get - т.е. через URL).

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

соответственно все $_POSTы после этого замените на $_GETы (переход по ссылкам означает, что вы посылаете параметры методом get)...

не забывайте все данные перед вставкой в строку запроса обрабатывать функцией mysql_real_escape_string() - это защита от изменения строки запроса извне...

в принципе можно совместить post и get (первоначально слать post, а ссылки уже будут get слать), и тогда нужно проверять уже $_REQUEST (это все данные подряд, присланные юзером)...

dima1981 05-11-2008 08:10 943337

Да только не понятно как это все
Цитата:

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

выглядит, но сообщение определенно полезное

dmitryst 05-11-2008 11:23 943470

Цитата:

Цитата dima1981
на перле? )
при всем уважении у меня не получился этот код. »

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

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

Igor_I 05-11-2008 13:44 943635

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

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

dmitryst 05-11-2008 14:41 943705

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

Код:

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

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


dima1981 05-11-2008 15:11 943732

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

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

dmitryst 05-11-2008 15:39 943769

dima1981, потому что так надо:
Цитата:

Цитата dima1981
$query = ("SELECT * FROM `rt` LIMIT $start, $num"); »


dima1981 05-11-2008 16:13 943804

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

Igor_I 05-11-2008 19:49 944057

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); 
?>
?>


dima1981 06-11-2008 00:00 944386

Цитата:

Цитата Igor_I
Извини »

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

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

Igor_I 06-11-2008 00:10 944397

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

dima1981 06-11-2008 01:45 944460

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

Sham 06-11-2008 02:01 944468

Цитата:

Цитата dima1981
но сообщение определенно полезное »

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

Igor_I 06-11-2008 02:09 944472

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

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

dima1981 06-11-2008 03:23 944498

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

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

Sham 06-11-2008 03:35 944501

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

dima1981 06-11-2008 04:22 944525

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

dima1981 06-11-2008 06:16 944562

Строка в браузере при навидении курсора на ссылку страницы отображается так 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>'

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

Igor_I 06-11-2008 09:41 944641

Сначала
'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 944690

Исправил теперь строка выглядит так 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]) »

не совсем понел, деревянный я потому что

dmitryst 06-11-2008 12:04 944791

Цитата:

Цитата dima1981
не совсем понел, деревянный я потому что »

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


dima1981 06-11-2008 18:34 945182

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

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

dima1981 10-11-2008 03:33 948232

PHP код:

<?
$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 948236

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

Igor_I 11-11-2008 00:04 949085

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

dima1981 11-11-2008 07:40 949184

Цитата:

Цитата Igor_I
Программа думать не умеет, что вы ей скажете, то она и сделает »

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

Не догнал я, как это делается заместо этой строки
PHP код:

$posts mysql_num_rows($result); 

во всех полях кода прописал эту
PHP код:

$posts mysql_num_rows(==0); 

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

Igor_I 11-11-2008 19:27 949807

if (mysql_num_rows($result) == 0) $empty = 1;

А внизу вывод

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

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


Время: 22:37.

Время: 22:37.
© OSzone.net 2001-