|
|
|
| Всем добрый день!
Друзья подскажите пож-та:
Есть таблица:
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> ... ";
// Есть
for($i = $page - $page_link; $i<$page; $i++)
{
echo " <a class=menu href=$_SERVER[PHP_SELF]?page=$i{$parameters}>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a> ";
}
}
else
{
// Нет
for($i = 1; $i<$page; $i++)
{
echo " <a class=menu href=$_SERVER[PHP_SELF]?page=$i{$parameters}>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a> ";
}
}
// Проверяем есть ли ссылки справа
if($page + $page_link < $number)
{
// Есть
for($i = $page; $i<=$page + $page_link; $i++)
{
if($page == $i)
echo " <em class=menu>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</em> ";
else
echo " <a class=menu href=$_SERVER[PHP_SELF]?page=$i{$parameters}> <nobr>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a> ";
}
echo " ... <a class=menu href=$_SERVER[PHP_SELF]?page=$number{$parameters}>[".(($number - 1)*$pnumber + 1)."-$total]</a> ";
}
else
{
// Нет
for($i = $page; $i<=$number; $i++)
{
if($number == $i)
{
if($page == $i)
echo " <em class=menu>[".(($i - 1)*$pnumber + 1)."-$total]</em> ";
else
echo " <a class=menu href=$_SERVER[PHP_SELF]?page=$i{$parameters}>[".(($i - 1)*$pnumber + 1)."-$total]</a> ";
}
else
{
if($page == $i)
echo " <em class=menu>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</em> ";
else
echo " <a class=menu href=$_SERVER[PHP_SELF]?page=$i{$parameters}>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a> ";
}
}
}
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 | |
|
|
|
|
|
|
|
для: Front
(21.02.2007 в 13:24)
| | Всё правильно, переходя по ссылке вы сбрасываете POST-данные - обычно поиск с постраничной навигацией организуют через GET, а не через POST. В этом случае все необходимые параметры можно передать через ссылку.
PS Объёмные листинги лучше прикреплять к сообщению в виде архива. | |
|
|
|
|
|
|
|
для: cheops
(21.02.2007 в 13:36)
| | По поводу листингов учту. А по поводу скрипта то есть просто нужно изменить метод передачи на GET и все. А с POST вообще никак не сделать, да? | |
|
|
|
|
|
|
|
для: Front
(21.02.2007 в 13:45)
| | Можно и с POST, однако придётся данные из формы помещать в сессию - получается достаточно сложно-управляемая структура, с передачей данных методом GET гораздо удобнее. | |
|
|
|
|
|
|
|
для: cheops
(21.02.2007 в 13:53)
| | После замены метода на GET ничего не изменилось все тоже самое, подскажите что не так. Скрипт с формой и обработчиком во вложенном файле, спасибо! | |
|
|
|
|
|
|
|
для: Front
(21.02.2007 в 14:06)
| | Вызов функции постраничной навигации должен выглядеть теперь примерно так
<?php
pager($page, $total, $pnumber, $page_link, "&objectid=".urlencode($_GET['objectid'])."&mkomn=".urlencode($_GET['mkomn']));
?>
|
только должны быть перечислены все GET-параметры, которые передаются из HTML-формы, а не два как в примере. | |
|
|
|
|
|
|
|
для: 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']));
?>
|
| |
|
|
|