Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Постраничная навигация в результатах поиска

Сообщения:  [1-7] 

 
 автор: Front   (21.02.2007 в 16:48)   письмо автору
 
   для: cheops   (21.02.2007 в 15:56)
 

Почему то ничего не изменилось, все равно пишет
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1"

Может быть это из-за implode в запросе.
И почему то в адресной строке после работы скрипта:

s_res.php?mkomn=1&floor=&sall_min=&sall_max=&kitchen_min=&kitchen_max=&sort=mkomn
Хотя я указывают только параметр mkomn.
ведь правильно в случае выбора 1 параметра он должен писать
s_res.php?mkomn=1

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

в этом скрипте два запроса. В них обоих должна быть функция implobe?
И еще хотел спросить что такое urlencode вот здесь:


<?php 
  pager
($page$total$pnumber$page_link"&objectid=".urlencode($_GET['objectid'])."&mkomn=".urlencode($_GET['mkomn'])); 
?> 

   
 
 автор: cheops   (21.02.2007 в 15:56)   письмо автору
 
   для: Front   (21.02.2007 в 14:06)
 

Вызов функции постраничной навигации должен выглядеть теперь примерно так
<?php
  pager
($page$total$pnumber$page_link"&objectid=".urlencode($_GET['objectid'])."&mkomn=".urlencode($_GET['mkomn']));
?>

только должны быть перечислены все GET-параметры, которые передаются из HTML-формы, а не два как в примере.

   
 
 автор: Front   (21.02.2007 в 14:06)   письмо автору
 
   для: cheops   (21.02.2007 в 13:53)
 

После замены метода на GET ничего не изменилось все тоже самое, подскажите что не так. Скрипт с формой и обработчиком во вложенном файле, спасибо!

   
 
 автор: cheops   (21.02.2007 в 13:53)   письмо автору
 
   для: Front   (21.02.2007 в 13:45)
 

Можно и с POST, однако придётся данные из формы помещать в сессию - получается достаточно сложно-управляемая структура, с передачей данных методом GET гораздо удобнее.

   
 
 автор: Front   (21.02.2007 в 13:45)   письмо автору
 
   для: cheops   (21.02.2007 в 13:36)
 

По поводу листингов учту. А по поводу скрипта то есть просто нужно изменить метод передачи на GET и все. А с POST вообще никак не сделать, да?

   
 
 автор: cheops   (21.02.2007 в 13:36)   письмо автору
 
   для: Front   (21.02.2007 в 13:24)
 

Всё правильно, переходя по ссылке вы сбрасываете POST-данные - обычно поиск с постраничной навигацией организуют через GET, а не через POST. В этом случае все необходимые параметры можно передать через ссылку.

PS Объёмные листинги лучше прикреплять к сообщению в виде архива.

   
 
 автор: Front   (21.02.2007 в 13:24)   письмо автору
 
 

Всем добрый день!

Друзья подскажите пож-та:

Есть таблица:


CREATE table stroy (objectid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
area TINYTEXT NOT NULL,
mkomn INT(2) NOT NULL,
address TINYTEXT NOT NULL,
floor TINYTEXT NOT NULL,
sall float(4,1) NOT NULL,    
slive TINYTEXT NOT NULL,
kitchen float(3,1) NOT NULL,
metro TINYTEXT NOT NULL,
tim TINYTEXT NOT NULL,
house TINYTEXT NOT NULL,
wc TINYTEXT NOT NULL,
info TINYTEXT NOT NULL,
sdacha TINYTEXT NOT NULL,
dop TINYTEXT NOT NULL


Есть скрипт:


<?php 
include("pm_inc.php");
  
// Элемент постраничной навигация 
  
if(empty($_GET['page'])) $page 1
  else 
$page $_GET['page']; 

  
// Число ссылок в постраничной навигации 
  
$page_link 5
  
// Число позиций на странице 
  
$pnumber 10
  
// Постраничная навигация 
  
$first = ($page 1)*$pnumber

include (
"config.php"); 
  
    
$where[] = "1=1";
  if(!empty(
$_POST['objectid'])) $where[] = "objectid = ".$_POST['objectid'];  
  if(!empty(
$_POST['mkomn'])) $where[] = "mkomn = ".$_POST['mkomn']; 
  if(!empty(
$_POST['area'])) $where[] = "area like '%".$_POST['area']."%'"
  if(!empty(
$_POST['floor'])) $where[] = "floor rlike '^".$_POST['floor']."/'";
  if(!empty(
$_POST['sall_min'])) $where[] = "sall >= ".$_POST['sall_min']; 
  if(!empty(
$_POST['sall_max'])) $where[] = "sall <= ".$_POST['sall_max']; 
  if(!empty(
$_POST['kitchen_min'])) $where[] = "kitchen >= ".$_POST['kitchen_min']; 
  if(!empty(
$_POST['kitchen_max'])) $where[] = "kitchen <= ".$_POST['kitchen_max'];  
   if(!empty(
$_POST['metro'])) $where[] = "metro like '%".$_POST['metro']."%'";
  if(!empty(
$_POST['house'])) $where[] = "house like '%".$_POST['house']."%'";
  if(!empty(
$_POST['wc'])) $where[] = "wc like '%".$_POST['wc']."%'";
  
  
$query "SELECT COUNT(*) FROM stroy WHERE ".implode(" AND ",$where)." ORDER by $sort"
  

  
$num mysql_query($query); 
  if (!
$num) exit(mysql_error());
  if(!
$num) exit("Ошибка при подсчёте количества записей"); 
  
// Ввыводим ссылки на другие страницы 
  
$total mysql_result($num,0); 

$query "SELECT COUNT(*) FROM stroy WHERE ".implode(" AND ",$where)." ORDER by $sort LIMIT $first$pnumber"
  
$acb mysql_query($query); 
  if (!
$acb) exit(mysql_error());
  if(!
$acb) exit("Ошибка при обращении к таблице stroy"); 
  if(
mysql_num_rows($acb) > 0
  { 
    echo 
"<table border=1>"
    while(
$postrow mysql_fetch_array($acb)) 
    { 
echo 
"<td bgcolor=$color class=3 align=center>".$postrow ["objectid"]."</td>";
echo 
"<td bgcolor=$color class=3 align=center>".$postrow["area"]."</td>";
echo 
"<td bgcolor=$color class=3 align=center>".$postrow["mkomn"]."</td>";
echo 
"<td bgcolor=$color class=3 align=center>".$postrow["address"]."</td>";
echo 
"<td bgcolor=$color class=3 align=center>".$postrow["floor"]."</td>";
echo 
"<td bgcolor=$color class=3 align=center>".$postrow["sall"]."</td>";
echo 
"<td bgcolor=$color class=3 align=center>".$postrow["slive"]."</td>";
echo 
"<td bgcolor=$color class=3 align=center>".$postrow["kitchen"]."</td>";
echo 
"<td bgcolor=$color class=3 align=center>".$postrow["metro"].",".$postrow["tim"]."</td>";
echo 
"<td bgcolor=$color class=3 align=center>".$postrow["house"]."</td>";
echo 
"<td bgcolor=$color class=3 align=center>".$postrow["wc"]."</td>";
echo 
"<td bgcolor=$color class=3 align=center>".$postrow["info"]."</td>";
echo 
"<td bgcolor=$color class=3 align=center>".$postrow["sdacha"]."</td>";
echo 
"<td bgcolor=$color class=3 align=center>".$postrow["dop"]."</td>";
echo 
"<td class=3 align=center><a href=print_str.php?objectid=".$postrow['objectid']."><img src=images/print.jpg border=0></a></td></tr>";  
    } 
    echo 
"</table><br>"
    
// Постраничная навигация 
    
pager($page$total$pnumber$page_link""); 
  } 

  function 
pager($page$total$pnumber$page_link$parameters)  
  {  
    
// Вычисляем число страниц в системе  
    
$number = (int)($total/$pnumber);  
    if((float)(
$total/$pnumber) - $number != 0$number++;  
    
// Проверяем есть ли ссылки слева  
    
if($page $page_link 1)  
    {  
      echo 
"<a class=menu href=$_SERVER[PHP_SELF]?page=1{$parameters}>[1-$pnumber]</a>&nbsp;&nbsp;...&nbsp;&nbsp;";  
      
// Есть  
      
for($i $page $page_link$i<$page$i++)  
      {  
          echo 
"&nbsp;<a class=menu href=$_SERVER[PHP_SELF]?page=$i{$parameters}>[".(($i 1)*$pnumber 1)."-".$i*$pnumber."]</a>&nbsp;";  
      }  
    }  
    else  
    {  
      
// Нет  
      
for($i 1$i<$page$i++)  
      {  
          echo 
"&nbsp;<a class=menu href=$_SERVER[PHP_SELF]?page=$i{$parameters}>[".(($i 1)*$pnumber 1)."-".$i*$pnumber."]</a>&nbsp;";  
      }  
    }  
    
// Проверяем есть ли ссылки справа  
    
if($page $page_link $number)  
    {  
      
// Есть  
      
for($i $page$i<=$page $page_link$i++)  
      {  
        if(
$page == $i)  
          echo 
"&nbsp;<em class=menu>[".(($i 1)*$pnumber 1)."-".$i*$pnumber."]</em>&nbsp;";  
        else  
          echo 
"&nbsp;<a class=menu href=$_SERVER[PHP_SELF]?page=$i{$parameters}> <nobr>[".(($i 1)*$pnumber 1)."-".$i*$pnumber."]</a>&nbsp;";  
      }  
      echo 
"&nbsp;...&nbsp;&nbsp;<a class=menu href=$_SERVER[PHP_SELF]?page=$number{$parameters}>[".(($number 1)*$pnumber 1)."-$total]</a>&nbsp;";  
    }  
    else  
    {  
      
// Нет  
      
for($i $page$i<=$number$i++)  
      {  
        if(
$number == $i)  
        {  
          if(
$page == $i)  
            echo 
"&nbsp;<em class=menu>[".(($i 1)*$pnumber 1)."-$total]</em>&nbsp;";  
          else  
            echo 
"&nbsp;<a class=menu href=$_SERVER[PHP_SELF]?page=$i{$parameters}>[".(($i 1)*$pnumber 1)."-$total]</a>&nbsp;";  
        }  
        else  
        {  
          if(
$page == $i)  
            echo 
"&nbsp;<em class=menu>[".(($i 1)*$pnumber 1)."-".$i*$pnumber."]</em>&nbsp;";  
          else  
            echo 
"&nbsp;<a class=menu href=$_SERVER[PHP_SELF]?page=$i{$parameters}>[".(($i 1)*$pnumber 1)."-".$i*$pnumber."]</a>&nbsp;";  
        }  
      }  
    }  
    echo 
"<br><br>";  
  } 
?> 


Результат работы скрипта:
Количество найденных по поиску записей он определяет правильно, но не выводит в таблице самих данных. Если нажимать на появившееся ссылки постраничной навигации ругается:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

   

Сообщения:  [1-7] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования