| |
|
|
| | У меня есть страница, к которой пользователь получает доступ только после авторизации. На этой странице он может выбрать 2 раздела (селект), в зависимости от того, какой раздел он выбирает - (данные, выбранные пользователем передаем методом post на эту же страницу (перезагрузка)) -инклудим соответствующую страницу, например, rent.php (при выборе Аренда).
В этом файле (rent.php) в свою очередь есть несколько селектов и при выборе опять-таки данные передаются постом на эту же страницу (перезагрузка).
Как к этому беспределу :))) привинтить навигацию?
Пересмотрела очень много примеров, но не знаю, какой из них лучше начинать перепиливать с наименьшими потерями нервных клеток :)
Подскажите, плиз. | |
| |
|
|
| |
|
|
| |
для: Gandzas
(10.11.2006 в 15:45)
| | | Лучше переходите с POST-метода на GET-метод - проще будет реализовать, иначе придётся использовать сессии - это достаточно не удобный способ реализации постраничной навигации. | |
| |
|
|
| |
|
|
| |
для: cheops
(10.11.2006 в 19:20)
| | | Что-то получилось, что-то нет. Похоже, что куча ошибок. Помогите исправить.
<?php
require("globals.php");
$link=mysql_connect($sqlhost,$sqluser,$sqlpass);
mysql_select_db($dbname,$link);
//$num=10 - по сколько записей выводим
//$page=1 - страница по умолчанию
function create_page_nvg($num=10, $page=1, $cnt_obj=0)
{
$res=mysql_query("SELECT * FROM baza where oper='rent' AND tip LIKE '".$_POST["tip"]."' AND region LIKE '".$_POST["region"]."' AND data LIKE '".$_POST["data"]."' ORDER BY tip, kk, region, cena");
//данные передаются корректно. Проверяла.
$cnt_obj=mysql_num_rows($res);//считаем количество записей, соответствующих условию
$total = intval(($cnt_obj- 1) / $num) + 1; //подсчитываем количество страниц
$page = intval($page); //начало сообщений для текущей страницы
if(empty($page) or $page < 0) $page = 1; //если значение меньше 1 или отрицательно - идем на первую
if($page > $total) $page = $total; //если больше, чем есть, то на последнюю
$start = $page * $num - $num;//считаем с какого номера выводить сообщения
$pervpage=""; //значения по умолчанию
$nextpage=""; //значения по умолчанию
$page2left=""; //значения по умолчанию
$page1left=""; //значения по умолчанию
$page2right="";//значения по умолчанию
$page1right="";//значения по умолчанию
if ($page!=1)$pervpage='<a href=?page=1><< </a> <a href=?page='. ($page - 1) .'><</a> '; //Проверяем нужны ли стрелки назад
if ($page!=$total)$nextpage= ' <a href=?page='. ($page + 1) .'>></a><a href= ./page?page=' .$total. '>>></a>'; //Проверяем нужны ли стрелки вперед
if($page - 2 > 0) $page2left = ' <a href=?page='. ($page - 2) .'>'. ($page - 2) .'</a> | '; //Находим две ближайшие станицы с обоих краев, если они есть
if($page - 1 > 0) $page1left = '<a href=?page='. ($page - 1) .'>'. ($page - 1) .'</a> | '; //Находим две ближайшие станицы с обоих краев, если они есть
if($page + 2 <= $total) $page2right = ' | <a href=?page='. ($page + 2) .'>'. ($page + 2) .'</a>'; //Находим две ближайшие станицы с обоих краев, если они есть
if($page + 1 <= $total) $page1right = ' | <a href=?page='. ($page + 1) .'>'. ($page + 1) .'</a>';//Находим две ближайшие станицы с обоих краев, если они есть
echo $pervpage . $page2left . $page1left . "<b>" . $page . "</b>" . $page1right . $page2right . $nextpage; // возвращаем готовую строку навигатора
}
//строка навигатора выводится, ссылки прописываются вида my.domen/index.php?page=(номер страницы). Но для правильного отображения чего-то не хватает...
$res=mysql_query("SELECT * FROM baza where oper='rent' AND tip LIKE '".$_POST["tip"]."' AND region LIKE '".$_POST["region"]."' AND data LIKE '".$_POST["data"]."' ORDER BY tip, kk, region, cena");
$str_nav_link=create_page_nvg(10, 1, $cnt_obj);
print $str_nav_link;
// Все считается правильно, а дальше не знаю, как сделать правильно вывод
if($res)
{
while($baza = mysql_fetch_array($res))
{
echo "<tr><td><span class='gennote'>".$baza['data']."</td><td><span class='gennote'>".$baza['tip']."</td><td><span class='gennote'>".$baza['kk']."</td><td><span class='gennote'>".$baza['cena']."</td><td><span class='gennote'>".$baza['region']."</td><td><span class='gennote'>".$baza['street']."</td><td><span class='gennote'>".$baza['jil']."</td><td><span class='gennote'>".$baza['kyx']."</td><td><span class='gennote'>".$baza['et']."</td><td><span class='gennote'>".$baza['etj']."</td><td><span class='gennote'>".$baza['tel']."</td><td><span class='gennote'>".$baza['tv']."</td><td><span class='gennote'>".$baza['xol']."</td><td><span class='gennote'>".$baza['meb']."</td><td><span class='gennote'>".$baza['info']."</td></tr>";
}
}
else
{
echo "<p><b>Error: ".mysql_error()."</b></p>";
exit();
}
?>
</table>
|
Запуталась совсем с выводом, не могу разобраться. И со ссылками на следующую страницу, как их правильно прописать. | |
| |
|
|
| |
|
|
| |
для: Gandzas
(13.11.2006 в 19:14)
| | | Приведите дамп таблицы baza (структуру и пару записей), чтобы можно было воспроизвести ситуацию? | |
| |
|
|
| |
|
|
| |
для: cheops
(14.11.2006 в 00:46)
| | | Вся структура видна здесь:
echo "<tr><td><span class='gennote'>".$baza['data']."</td><td><span class='gennote'>".$baza['tip']."</td><td><span class='gennote'>".$baza['kk']."</td><td><span class='gennote'>".$baza['cena']."</td><td><span class='gennote'>".$baza['region']."</td><td><span class='gennote'>".$baza['street']."</td><td><span class='gennote'>".$baza['jil']."</td><td><span class='gennote'>".$baza['kyx']."</td><td><span class='gennote'>".$baza['et']."</td><td><span class='gennote'>".$baza['etj']."</td><td><span class='gennote'>".$baza['tel']."</td><td><span class='gennote'>".$baza['tv']."</td><td><span class='gennote'>".$baza['xol']."</td><td><span class='gennote'>".$baza['meb']."</td><td><span class='gennote'>".$baza['info']."</td></tr>";
|
Все поля текстовые.
И выводится (без навигации) все корректно. | |
| |
|
|
| |
|
|
| |
для: Gandzas
(14.11.2006 в 13:42)
| | | Под структурой понимается дамп, фрагмент которого Вы привели (08.11.2006 в 01:32) в соседней ветви. Только без купюр.
И несколько записей (строк INSERT INTO `baza` ... VALUES(...)) тоже из дампа. | |
| |
|
|
| |
|
|
| |
для: Trianon
(14.11.2006 в 13:51)
| | | Я это понимаю) Только не понимаю зачем, если и так все видно. Но, слово Мастера - закон, сча сделаю) | |
| |
|
|
| |
|
|
| |
для: Gandzas
(14.11.2006 в 13:55)
| | | При чем тут закон....
Самый простой способ разобраться - это создать пустую базу, засунуть этот дамп в нее через phpMyAdmin, скопировать в файл скрипт, запустить и посмотреть что происходит.
А создавать таблицы руками долго и муторно.
IMHO. Может cheops считает иначе. | |
| |
|
|
| |
|
|
| |
для: Gandzas
(14.11.2006 в 13:55)
| | | Мне как без админки делать дамп, так лучше застрелиться :) Навигацию я уже делаю "по месту", у хостера, а не на локалке. А хостер не счел нужным поставить phpMyAdmin... Вобщем, я уже жаловалась :)
Вот дамп структуры:
CREATE TABLE `baza` (
`id` int(11) NOT NULL auto_increment,
`data` varchar(11) NOT NULL default '',
`tip` varchar(100) NOT NULL default '',
`kk` varchar(30) NOT NULL default '',
`plan` varchar(30) NOT NULL default '',
`cena` varchar(20) NOT NULL default '',
`region` varchar(100) NOT NULL default '',
`street` varchar(100) NOT NULL default '',
`dom` varchar(10) NOT NULL default '',
`ob` varchar(10) NOT NULL default '',
`jil` varchar(10) NOT NULL default '',
`kyx` varchar(10) NOT NULL default '',
`et` varchar(3) NOT NULL default '',
`etj` varchar(3) NOT NULL default '',
`stena` varchar(10) NOT NULL default '',
`wc` varchar(10) NOT NULL default '',
`balkon` varchar(10) NOT NULL default '',
`zemlya` varchar(10) NOT NULL default '',
`tel` varchar(10) NOT NULL default '',
`tv` varchar(10) NOT NULL default '',
`xol` varchar(10) NOT NULL default '',
`meb` varchar(10) NOT NULL default '',
`vpered` varchar(10) NOT NULL default '',
`ktel` varchar(20) NOT NULL default '',
`konttel` varchar(20) NOT NULL default '',
`info` varchar(255) NOT NULL default '',
`oper` varchar(10) NOT NULL default '',
`ist` varchar(10) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `ktel` (`ktel`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4051 ;
|
Вот дамп данных (первые три записи)
INSERT INTO `baza` VALUES (1, '01.11.2006',
'Бар', '', '', '20', '', 'Голосеевский',
'', '', '120', '', '', '1', '', '', '', '',
'', '', '', '', '', '5326098',
'80677813858', 'после 18\r\n', 'rent',
'IE');
INSERT INTO `baza` VALUES (2, '01.11.2006',
'Бар', '', '', '200', 'Голосеевский',
'Заболотного', '', '', '42', '', '', '1',
'', '', '', '', '', '+', '+', '+', '',
'4133147', '', 'переуступка\r\n', 'rent',
'IE');
INSERT INTO `baza` VALUES (3, '01.11.2006',
'Бар', '', '', '1800', 'Голосеевский',
'Жилянская', '26', '', '100', '17', '1',
'2', '', '', '', '', '+', '+', '+', '+',
'', '2573317', '80973702696', 'на 3
года\r\n', 'rent', 'IE');
|
| |
| |
|
|
| |
 4.3 Кб |
|
| |
для: Gandzas
(14.11.2006 в 14:07)
| | | Исправленный вариант находится в аттаче, однако он не будет работать с методом POST, следует перейти на метод GET, в противном случае придётся помещать предварительно все POST-данные в суперглобальный массив $_SESSION и работать дальше с ним (переход на другую страницу будет всегда сбрасывать POST-данные, а GET или SESSION-данные можно передать и на другую страницу). | |
| |
|
|
| |
|
|
| |
для: cheops
(14.11.2006 в 15:44)
| | | Спасибо огромное.
По поводу метода GET. Что легче, переписать все с post на get или пользоваться SESSION? | |
| |
|
|
| |
|
|
| |
для: Gandzas
(14.11.2006 в 16:20)
| | | Сразу возник вопрос.
//$res=mysql_query("SELECT * FROM baza where oper='rent' AND tip LIKE '".$_GET["tip"]."' AND region LIKE '".$_GET["region"]."' AND data LIKE '".$_GET["data"]."' ORDER BY tip, kk, region, cena");
$res=mysql_query("SELECT * FROM baza");
|
Вы изменили строку запроса с условием на "без условия". и затем:
$cnt_obj=mysql_num_rows($res);//считаем количество записей, соответствующих условию
|
В этом случае считаются ВСЕ записи? Или я чего-то не понимаю?
Т.е. в выводе самого навигатора
$str_nav_link=create_page_nvg(10, 1, $cnt_obj);
|
переменная $cnt_obj будет равна количеству ВСЕХ записей в таблице?
Не могу понять, где эта переменная получает условие (where) | |
| |
|
|
| |
|
|
| |
для: Gandzas
(14.11.2006 в 16:29)
| | | Расплела скрипт на косички :)) Вот, что у меня получилось.
После скрипта самого навигатора добавились две переменные:
$pnumber = 2;// количество выводимых записей
$first = ($page - 1)*$pnumber; // с какой записи начинать вывод
|
Это как раз то, чего мне не хватало, для выполнения LIMIT.
Здесь есть еще одна переменная $page, которая в коде описана выше:
if(empty($_GET['page'])) $page = 1;
else $page = $_GET['page'];
|
Вот здесь я как раз и споткнулась :(
Не могу понять $page = $_GET['page'];
Откуда эта переменная передается?
Еще одна оговорка: Все события происходят на одной странице, которая перегружается с сохранением всех данных, выбранных пользователем. | |
| |
|
|
| |
|
|
| |
для: Gandzas
(14.11.2006 в 16:54)
| | | посмотрите вниз скрипта
Там куча ссылок похожих на
if ($page!=$total)$nextpage= ' <a href=?page='. ($page + 1) .'>></a>......
|
Собственно это и есть ссылки постраничной навигации.
В них-то и формируется параметр page. Передается в нем номер отображаемой страницы. | |
| |
|
|
| |
|
|
| |
для: Trianon
(14.11.2006 в 18:16)
| | | Это я понимаю. только у меня в адресной строке адрес не меняется. Все события происходят на одной странице: index.php. Вот я и хочу понять, как реализовать навигацию не меняя адреса в адресной строке. Другими словами, как сделать так, чтобы при клике "следующая страница", загружалась эта же, но данные были другие (со "следующей страницы"). Записать, например в буфер, а оттуда уже забирать или что-нибудь в этом роде... | |
| |
|
|
| |
|
|
| |
для: Gandzas
(14.11.2006 в 18:39)
| | | при нажатии на ссылку адрес не меняется?
Верится с трудом. С большим трудом. | |
| |
|
|
| |
|
|
| |
для: Trianon
(14.11.2006 в 19:15)
| | | Я, наверное, неправильно выразилась...
По порядку: после того, как пользователь прошел проверку:
<?
require("dostup.php");
?>
|
В файле "dostup.php" - одна строчка, соответствующая его "правам":
<?
include("../a.php");//здесь может быть 10 разных вариантов: b.php, c.php и т.д.
?>
|
В файле "a.php" - подключаем соответствующие файлы:
<center><font color=#691419 size=4><b>Вам доступны следующие разделы:</b></font>
<tr>
<td><center>
<table border=0>
<tr>
<td>
<form action='index.php'>
<input type=hidden name=arenda value='0'>
<input type=submit value=АРЕНДА>
</form>
</td><td>
<form action='index.php'>
<input type=hidden name=pro>
<input type=submit value=ПРОДАЖА>
</form>
</td><td>
<form action='index.php'>
<input type=hidden name=spros>
<input type=submit value=СПРОС>
</form>
</td></tr></table>
</td>
</tr>
<tr>
<?
if (isset($arenda))
{
include("../rent.php");
}
if (isset($pro))
{
include("../sale.php");
}
if (isset($spros))
{
include ("../spros.php");
}
if (isset($viborr))
{
include("../rent.php");
}
?>
</tr>
|
и уже в "rent.php" запросы к базе, где и нужна навигация.
Сначала форма для ввода:
<form name="form" method="post" action=index.php>
<input type=hidden name=viborr>
<select name=tip onChange='this.form.submit()'>
<option value='%' selected="selected">Не важно</option>
<?
$res=mysql_query("SELECT DISTINCT tip FROM baza");
if($res)
{
while($baza = mysql_fetch_array($res))
{
echo ("<option value='".$baza['tip']."' onClick='this.form.submit()'");
if ($HTTP_POST_VARS['tip']=="$baza[tip]" )
echo("selected");
echo(">".$baza['tip']."<br></option>");
}
}
else
{
echo "<p><b>Error: ".mysql_error()."<br>";
exit();
}
?>
</select>
<select name=region onChange='this.form.submit()'>
<option value="%" selected="selected">Не важно</option>
<?
$res=mysql_query("SELECT DISTINCT region FROM baza");
if($res)
{
while($baza = mysql_fetch_array($res))
{
echo ("<option value='".$baza['region']."' onClick='this.form.submit()'");
if ($HTTP_POST_VARS['region']=="$baza[region]" )
echo("selected");
echo(">".$baza['region']."<br></option>");
}
}
else
{
echo "<p><b>Error: ".mysql_error()."<br>";
exit();
}
?>
</select>
<select name=data onChange='this.form.submit()'>
<option value="%" selected="selected">Не важно</option>
<?
$res=mysql_query("SELECT DISTINCT data FROM baza");
if($res)
{
while($baza = mysql_fetch_array($res))
{
echo ("<option value='".$baza['data']."' onClick='this.form.submit()'");
if ($HTTP_POST_VARS['data']=="$baza[data]" )
echo("selected");
echo(">".$baza['data']."<br></option>");
}
}
else
{
echo "<p><b>Error: ".mysql_error()."<br>";
exit();
}
?>
</select>
</form>
|
Потом начало таблицы с первой строкой.
и потом уже запрос к базе и вывод, тот, о котором, собственно и идет речь.
Если не применять навигацию, то все выводится так, как надо. А с навигацией застряла. При клике на ссылку (навигации) - конечно же, адресная строка меняется и, естественно, она пустая.
А вот как сделать так, чтобы адресная строка не менялась (осталась index.php), а данные выводились те, которые нужны.
Насколько я себе это представляю, это где-то здесь:
if(empty($_GET['page'])) $page = 1;
else $page = $_GET['page'];
|
И потом останется поменять <a href> в навигации. Только вот как передавать $page следующей странице? Записать текущую в буфер и при переходе производить вычисления с переменной из буфера? А если пользователь сразу перейдет на третью? | |
| |
|
|
| |
|
|
| |
для: Gandzas
(14.11.2006 в 19:40)
| | | 1. Не передавая параметр page, Вы не сможете сделать так, чтоб скрипт понимал, какую страницу от него просят.
2. Поскольку ссылки навигации (как и любые другие ссылки) могут формировать только GET-параметры, единственный способ обеспечить навигацию по ссылкам - сделать так, чтоб скрипт обрабатывал именно GET параметры.
3. Адрес при этом будет меняться. GET-параметры его образуют наравне с именем сервера и самого скрипта.
4. Поскольку для работы скрипта нужны еще и параметры выбора ветви (arenda, vibor ...) и параметры фильтра (tip, region, data ....) , то их тоже нужно добавить к параметрам вызова index.php во всех ссылках постраничной навигации, помимо page. Пожалуй, это самое сложное.
5. Нужно сделать так, чтобы Форма фильтра поставляла эти параметры методом GET, а код фильтра их брал из массива $_GET (а не POST)
6.И тогда всё заработает. | |
| |
|
|
| |
|
|
| |
для: Trianon
(14.11.2006 в 20:33)
| | | Т.е., насколько я поняла, ссылки будут отображаться в любом случае?
Если это так, тогда вся затея теряет смысл. Все можно сделать гораздо проще. :)
Мне нельзя ни при каких обстоятельствах выводить в адресную строку другой адрес, кроме "my.domen/index.php", а так не получится. Я правильно понимаю? | |
| |
|
|
| |
|
|
| |
для: Gandzas
(14.11.2006 в 20:51)
| | | >Мне нельзя ни при каких обстоятельствах выводить в адресную строку другой адрес, кроме "my.domen/index.php",
Это из соображений безопасности?
>а так не получится. Я правильно понимаю?
Ну, в принципе, можно попробовать сделать навигацию на кнопках и полях формы ...
В стиле phpMyAdmin .
Показывать [__50_] строк, начиная с [_250_]-й [Перейти]
[Перейти на 50 назад] [Перейти на 50 вперед]
|
Фактически та же функциональность при довольно кондовом внешнем виде.
В этом случае Адрес останется неизменным.
Точнее, он не будет содержать проблемных данных.
Вас ведь это беспокоит? | |
| |
|
|
| |
|
|
| |
для: Trianon
(14.11.2006 в 21:05)
| | | Совершенно верно. Доступ платный. И придется или под каждый пакет создавать свой поддомен/директорию с отдельным доступом (что тоже неудобно для пользователя, подписанного на полный пакет: прыгать по ссылкам и каждый раз вводить новый пароль) или из конкретного аккаунта дать доступ только к определенным данным. Видя в адресе что-нибудь типа index.php?rent=3, ничего не стоит подставить sale и пользоваться на здоровье.
А вот навигация в стиле phpMyAdmin - это супер!
Сейчас буду пробовать написать. Не подскажите, на форуме что-нибудь подобное обсуждалось? | |
| |
|
|
| |
|
|
| |
для: Gandzas
(14.11.2006 в 21:24)
| | | >Совершенно верно. Доступ платный.
....
>Видя в адресе что-нибудь типа index.php?rent=3, ничего не стоит подставить sale и пользоваться на здоровье.
Здрасти. Так если речь идет о деньгах, то дописать в форму пару-тройку других (более дорогих) полей тоже не стоит ничего. Ну то есть посложнее немного, но ей-богу не дороже денег за доступ :)
Под безопасностью я имел в виду несколько другое. Конфиденциальность данных, с которыми идет работа. В частности, чтобы их следы не оставались в логах провайдера и в списках посещенных страниц компьютера клиента.
>Не подскажите, на форуме что-нибудь подобное обсуждалось?
Сомневаюсь я. Кому нужно-то ? Уж больно погано выглядит.
Но реализуется в чем-то даже проще, чем обычная навигация. | |
| |
|
|
| |
|
|
| |
для: Trianon
(14.11.2006 в 21:32)
| | | >>Под безопасностью я имел в виду несколько другое. Конфиденциальность данных, с которыми идет работа. В частности, чтобы их следы не оставались в логах провайдера и в списках посещенных страниц компьютера клиента.
В том числе, но не исключительно. :)
>>Здрасти. Так если речь идет о деньгах, то дописать в форму пару-тройку других (более дорогих) полей тоже не стоит ничего. Ну то есть посложнее немного, но ей-богу не дороже денег за доступ :)
Вот здесь не поняла совсем. Что Вы имеете ввиду? %-)
Кому ничего не стоит?
Подробнее о цели всего этого действа:
1. Создать шаблон аккаунта под каждый пакет, где нужно будет изменить только %user и права доступа. (В общей сложности пользователей пока не более 50, но каждый день один может добавиться, а другой отписаться, т.е. они меняются).
2. Один месяц/неделю юзер может быть подписан на один пакет, а второй месяц - на другой (дешевле/дороже). Запомнив пути, может использовать :)
3. Безопасность в Вашем понимании.
Поддомен, на котором я все это прописываю запрещен к индексации (мною) и адрес никому, кроме подписчиков не передается. Доступ к поддомену под защитой .htaccess/.htpasswd
Главная страница поддомена (index.php) - никаких данных не содержит, кроме контактов со мной. Данные выводятся на странице "my.domen/user/index.php", а обрабатываются скриптами директорией выше(скрипты одинаковы для всех юзеров).
Я что-то не предусмотрела? | |
| |
|
|
| |
|
|
| |
для: Gandzas
(14.11.2006 в 22:08)
| | | И еще. Почему плохо выглядит? Если не ставить селект с перечнем страниц, а в качестве строки навигатора поставить кнопки
[<<][<] текущая страница [>][>>] - то будет вполне прилично выглядеть. Вместо циферок-ссылок просто будут кнопки.
По сколько строк выводить прописать жестко и не давать возможность выбора (как в phpMyAdmin).
С какого конца только взяться... | |
| |
|
|
| |
|
|
| |
для: Gandzas
(14.11.2006 в 22:29)
| | | Голову уже сломала... :(
Вот, что у меня пока получилось:
<?php
require("globals.php");
$link=mysql_connect($sqlhost,$sqluser,$sqlpass);
mysql_select_db($dbname,$link);
$res=mysql_query("SELECT * FROM baza where oper='rent' AND tip LIKE '".$_POST["tip"]."' AND region LIKE '".$_POST["region"]."' AND data LIKE '".$_POST["data"]."' ORDER BY tip, kk, region, cena");
$cnt_obj=mysql_num_rows($res);//считаем количество записей, соответствующих условию
$num=10;//по сколько записей выводим
$page=1;//текущая страница, 1- по умолчанию
$total = intval(($cnt_obj- 1) / $num) + 1; //подсчитываем количество страниц
$page = intval($page); //начало сообщений для текущей страницы
$start = $page * $num - $num;//считаем с какого номера выводить сообщения
$pervpage=($page - 1); //Предыдущая
$nextpage=($page + 1); //Следующая
echo "По Вашему запросу найдено ".$total." страниц (".$cnt_obj." объектов)<br>";
//echo $pervpage . $page . $nextpage; // Строка навигатора
echo "<form name=nav action=index.php><input type=submit name=page value='<<'><input type=submit name=pervpage value='<'> ".$page." <input type=submit name=nextpage value='>'><input type=submit name=total value='>>'></form>";
$res=mysql_query("SELECT * FROM baza where oper='rent' AND tip LIKE '".$_POST["tip"]."' AND region LIKE '".$_POST["region"]."' AND data LIKE '".$_POST["data"]."' ORDER BY tip, kk, region, cena LIMIT $start, $num");
if($res)
{
while($baza = mysql_fetch_array($res))
{
echo "<tr><td><span class='gennote'>".$baza['data']."</td>
<td><span class='gennote'>".$baza['tip']."</td>
<td><span class='gennote'>".$baza['kk']."</td>
<td><span class='gennote'>".$baza['cena']."</td>
<td><span class='gennote'>".$baza['region']."</td>
<td><span class='gennote'>".$baza['street']."</td>
<td><span class='gennote'>".$baza['jil']."</td>
<td><span class='gennote'>".$baza['kyx']."</td>
<td><span class='gennote'>".$baza['et']."</td>
<td><span class='gennote'>".$baza['etj']."</td>
<td><span class='gennote'>".$baza['tel']."</td>
<td><span class='gennote'>".$baza['tv']."</td>
<td><span class='gennote'>".$baza['xol']."</td>
<td><span class='gennote'>".$baza['meb']."</td>
<td><span class='gennote'>".$baza['info']."</td></tr>";
}
}
else
{
echo "<p><b>Error: ".mysql_error()."</b></p>";
exit();
}
?>
|
Я хоть в правильном направлении двигаюсь? | |
| |
|
|
| |
|
|
| |
для: Gandzas
(15.11.2006 в 15:06)
| | | неясно почему $page = 1
А так -да. Приблизительно в том направлении. | |
| |
|
|
| |
|
|
| |
для: Trianon
(15.11.2006 в 15:32)
| | | Должна быть равна 0?
$page = 0; | |
| |
|
|
| |
|
|
| |
для: Gandzas
(15.11.2006 в 15:54)
| | | Должна быть взята из поля формы.
На самом деле проще будет брать оттуда не номер страницы, а номер первой строки отчета. | |
| |
|
|
| |
|
|
| |
для: Trianon
(15.11.2006 в 16:16)
| | | Что-то я опять потерялась. Можно поподробнее и в картинках :) | |
| |
|
|
| |
|
|
| |
для: Gandzas
(15.11.2006 в 16:46)
| | | у Вас там echo "<form ... совершенно необъятный.
Распишите его, пожалуйста, в несколько строк, и укажите, каких действий Вы ждете от каждой из кнопок. | |
| |
|
|
| |
|
|
| |
для: Trianon
(15.11.2006 в 17:30)
| | | Это вывод навигационной строки:
echo "<form name=nav method='get' action=index.php> //post или get?
<input type=submit name=page value='<<'>// перейти на первую страницу
<input type=submit name=pervpage value='<'> // перейти на предыдущую
".$page." // текущая страница
<input type=submit name=nextpage value='>' > // перейти на следующую
<input type=submit name=total value='>>'></form>"; // перейти на последнюю
|
Это запрос к БД:
$res=mysql_query("SELECT * FROM baza where oper='rent'
AND tip LIKE '".$_POST["tip"]."'
AND region LIKE '".$_POST["region"]."'
AND data LIKE '".$_POST["data"]."'
ORDER BY tip, kk, region, cena
LIMIT $_GET["start"], $_GET["num"]");// сюда нужно передать значения переменных, в зависимости от выбора пользователя
|
| |
| |
|
|
| |
|
|
| |
для: Gandzas
(15.11.2006 в 17:42)
| | | Тогда я бы сделал как-то так:
<?php
if(isset($_POST['from']) && is_array($_POST['from']))
foreach($_POST['from'] as $start => $button)
$start = intval($start);
else $start = 0;
$num = 50; // число строк на странице
$total = 230; // общее число объектов, запрошенное по SELECT COUNT(*) ...
$count = 30; // число строк, которые вернул mysql_num_ruows от SELECT * ... LIMIT $start,$num
$nav_first = 0;
$nav_prev = max(0, $start-$num);
$nav_next = $start+$num >= $total ? $start : $start+$num;
$nav_last = intval($total/$num)*$num;
$nav_last -= ($nav_last == $total) * $num;
$last_row = $start + $count-1;
echo "<form method=post>"; //этой строки не будет - используется общая форма фильтра.
echo "<input type=submit name=from[$nav_first] value='<<'>" // перейти на первую страницу
. "<input type=submit name=from[$nav_prev] value='<'>" // перейти на предыдущую
. "<input type=submit name=from[$nav_next] value='>' >" // перейти на следующую
. "<input type=submit name=from[$nav_last] value='>>'></form>" // перейти на последнюю
. "</form>" // этой строки не будет - используется общая форма фильтра.
. " $start...$last_row";
?>
|
| |
| |
|
|
| |
|
|
| |
для: Trianon
(15.11.2006 в 19:23)
| | | А откуда взялась эта переменная: $_POST['from']? | |
| |
|
|
| |
|
|
| |
для: Gandzas
(15.11.2006 в 19:37)
| | | А Вы запустить попробовали?
Переменная возьмется из той кнопки, которая будет нажата для перемещения к другой странице. | |
| |
|
|
| |
|
|
| |
для: Trianon
(15.11.2006 в 19:41)
| | | Нет, еще не пробовала... У меня, наверное, дурной характер, я хочу понимать, что я делаю, прежде, чем делать... :(
Пошла пробовать. | |
| |
|
|
| |
|
|
| |
для: Gandzas
(15.11.2006 в 19:45)
| | | >У меня, наверное, дурной характер, я хочу понимать, что я делаю, прежде, чем делать... :(
Достойный характер.
В массиве $_POST переменные появляются из элементов формы. Именем переменной является то, что прописано в атрибуте name элемента. Значением, соответственно, будет то, что прописано в атрибуте value.
В нашем случае это элементы вроде
<input type=submit name=from[$nav_prev] value='<'>
|
| |
| |
|
|
| |
|
|
| |
для: Trianon
(15.11.2006 в 19:57)
| | | А имя самой формы?
<form name = ... > - не имеет значения?
P.S. Я просто окончательно во всем этом запуталась и уже НИЧЕГО не понимаю. :(((
//echo "<form method=post>"; //этой строки не будет - используется общая форма фильтра.
|
Какая общая форма? | |
| |
|
|
| |
|
|
| |
для: Gandzas
(15.11.2006 в 20:13)
| | | Ваше сообщение (14.11.2006 в 19:40)
======
Сначала форма для ввода:
<form name="form" method="post" action=index.php>
<input type=hidden name=viborr>
<select name=tip onChange='this.form.submit()'>
<option value='%' selected="selected">Не важно</option>
<?
$res=mysql_query("SELECT DISTINCT tip FROM baza");
|
======
Вот эта самая форма.
На странице с результатами запроса у Вас либо перед, либо после таблицы результатов эта форма будет повторяться. Хотите Вы этого или нет.
Возможно, со скрытыми полями, но эта форма нужна.
Поскольку как иначе передавать параметры фильтра выборки для последующих запросов? | |
| |
|
|
| |
|
|
| |
для: Gandzas
(15.11.2006 в 20:13)
| | | У меня фильтр, который, насколько я поняла Вы имели ввиду был закрыт ДО вывода. Я его открыла и закрыла ПОСЛЕ вывода.
Код, написанный Вами, я вписала после запроса:
$res=mysql_query("SELECT *........LIMIT $start, $num");
и после кода:
$res=mysql_query("SELECT * ........LIMIT $last_row, $num");
Похоже, что заработало, но я не уверена, что все правильно. Поправьте меня, пожалуйста, если что-то неверно. | |
| |
|
|
| |
|
|
| |
для: Gandzas
(15.11.2006 в 20:27)
| | | У меня эта форма не повторяется (прописана один раз), но при выборе идет перезагрузка страницы (выбранные позиции сохраняются) и обработчик формы находится на этой же странице. Я так понимаю, именно таким образом данные и передаются. Или что-то не так? | |
| |
|
|
| |
|
|
| |
для: Gandzas
(15.11.2006 в 20:27)
| | | Давайте сделаем новую тему. Эта длинная слишком.
И в ней неплохо было бы показать файл в том виде, в каком он у Вас сейчас.
>У меня фильтр, который, насколько я поняла Вы имели ввиду был закрыт ДО вывода
Этой фразы я не понял. Что такое закрытый фильтр? | |
| |
|
| |
|