|
|
|
| Подскажите пожалуйста, как организовать вывод информации постранично для:
Глава 8. Универсальный каталог продукции
// Осуществляем соединение с базой данных
// Извлекаем из строки запроса параметр start
if(isset($_GET['start'])) $start = $_GET['start'];
else $start = "";
// Стартовая точка
if (empty($start)) $start = 0;
// Стартовая точка не может быть меньше нуля
if ($start < 0) $start = 0;
// Запрашиваем общее число отображаемых сообщений
$query = "SELECT count(*) FROM product
WHERE hide = 'show'";
$tot = mysql_query($query);
// Запрашиваем сами сообщения
$query = "SELECT * FROM product
WHERE hide = 'show'
".$tmp11.$tmp1.$tmp2.$tmp3.$tmp4.$tmp5.$tmp6.$tmp7.$tmp8.
$tmp9.$tmp10.$tmp12.$tmp13.$tmp14.$tmp15.$tmp16.$tmp17."
ORDER BY puttime DESC
LIMIT $start, $pnumber";
$thm = mysql_query($query);
if(!$tot || !$thm) puterror("Ошибка при выборке сообщений...");
// Выполняем SQL-запрос
$prt = mysql_query($query);
if(!$prt) puterror("Ошибка при обращении к Доске Объявлений");
// количество рядов в наборе должно быть больше нуля
if (mysql_num_rows($prt)>0)
{
// Общее число отображаемых сообщений
$count= mysql_result($tot,0);
while($themes = mysql_fetch_array($thm))
{
$thm = mysql_query($query);
if(!$tot || !$thm) puterror("Ошибка при выборке сообщений...");
// Общее число отображаемых сообщений
$count= mysql_result($tot,0);
// Выводим ссылки на предыдущие и следующие сообщения
// if ($start > 0) print "<a href=index.php?start=".($start-$pnumber).">Предыдущие</A>";
// if ($count > $start + $pnumber) print " <a href=index.php?start=".($start + $pnumber).">Следующие</A><br>";
echo "<br>";
while($themes = mysql_fetch_array($thm))
// Выполняем SQL-запрос
$prt = mysql_query($query);
if(!$prt) puterror("Ошибка при обращении к Доске Объявлений");
// количество рядов в наборе должно быть больше нуля
if (mysql_num_rows($prt)>0)
{
дальше вывод таблицы с данными ...
}
Дело в том что при таком выводе, при нажатии на "следующие" страница Поиска просто обнуляется. И получается что приходится просто выводить все данные, что очень не удобно. | |
|
|
|
|
|
|
|
для: kviki
(02.04.2007 в 08:51)
| | Следует передавать информацию из поисковой формы не методом POST, а методом GET и при формировании постраничной навигации передавать данные из HTML-формы в параметрах. | |
|
|
|
|
|
|
|
для: cheops
(02.04.2007 в 12:45)
| | Никак не получается прикруть этот скриптик к поиску, помогите пожалуйста.
define('max', $pnumber);
// номер страницы получаем из GET переменной page
// нам подойдёт только целое число
$page = intval($_GET['page']);
if(empty($page) or $page < 0) $page = 1;
if($page > max) $page = max;
// Подключаемся к базе
require_once("config.php");
// выполняем запрос, который узнает число записей в таблице
$res = mysql_query('SELECT COUNT(*) FROM product');
// сохраняем результат в переменную
$kv = mysql_result($res, 0);
// узнаём общее число страниц
// round не подходит, т.к. иногда количество страниц будет определяться не правильно
$num = ceil($kv / max);
// выбираем записи, принадлежащие текущей странице
// не забываем отсортировать новости по дате добавления
$res = mysql_query('SELECT * FROM product ORDER BY puttime DESC LIMIT '.(($page - 1) * max).', '.max);
echo "<center>";
// смотрим за тем, чтобы номер страницы не вылетел за диапазоны
if ($page < 1 || $page > $num) {
$page = 1;
}
print '<<';
// в цикле выводим ссылки на страницы
for ($i = 1; $i <= $num; $i++)
{
if ($page != $i)
{
print '<a href="?page='.$i.'">'.$i.'</a> ';
}
else
{ // ссылку на текущею страницу не выводим
// print '<b>'.$i.'</b> |';
print '<font color="red">['.$i.']</font> ';
}
}
print '>>';
print '>>';
echo "</center>"; | |
|
|
|
|
|
|
|
для: kviki
(08.04.2007 в 13:42)
| | Ребят, может кто-то уже реализовал постраничную навигацию на таком примере, или на том что в книжке показан. Подскажите, а то уже замучился. | |
|
|
|
|
|
|
|
для: kviki
(08.04.2007 в 13:42)
| | Посмотрите вариант поиска во вложении (там немного другая постраничная навигация) - он подходит? | |
|
|
|
|
|
|
|
для: cheops
(09.04.2007 в 13:42)
| | спасибо, щас посмотрю и отпишусь. | |
|
|
|
|
|
|
|
для: kviki
(09.04.2007 в 13:45)
| | Спасибо большое все работает.
И скажите есть ли возможность сделать поиск по дате???
Выпадающий список с выбором за сегодня, за вчера и за неделю?
Дело в том что у меня эти запросы не работают.
<select name="data" class="input">
<option value='none' >не имеет значения
<option value=1>Сегодня</option>
<option value=2>Вчера</option>
<option value=3>За неделю</option>
</select>
Думал так
if(!empty($_POST['data']) && $_POST['data'] != 'none')
$tmp4 = " and data='".$_POST['data']."'";
Но этот вариант не работает, тогда хотел реализовать через :
puttime >= Now() - INTERVAL 1 DAY
Вот с этим никак не разберусь..
и скажите если делать постраничную навигацию через циферки
// устанавливаем число записей на странице
define('max', $pnumber);
// номер страницы получаем из GET переменной page
// нам подойдёт только целое число
$page = intval($_GET['page']);
if(empty($page) or $page < 0) $page = 1;
if($page > max) $page = max;
// выполняем запрос, который узнает число записей в таблице
$res = mysql_query('SELECT COUNT(*) FROM product');
// сохраняем результат в переменную
$kv = mysql_result($res, 0);
// узнаём общее число страниц
// round не подходит, т.к. иногда количество страниц будет определяться не правильно
$num = ceil($kv / max);
// выбираем записи, принадлежащие текущей странице
// не забываем отсортировать новости по дате добавления
$res = mysql_query('SELECT * FROM product ORDER BY puttime DESC LIMIT '.(($page - 1) * max).', '.max);
echo "<center>";
// смотрим за тем, чтобы номер страницы не вылетел за диапазоны
if ($page < 1 || $page > $num) {
$page = 1;
}
print '<<';
// в цикле выводим ссылки на страницы
for ($i = 1; $i <= $num; $i++)
{
if ($page != $i)
{
print '<a href="index.php?page='.$i.'">'.$i.'</a> ';
}
else
{ // ссылку на текущею страницу не выводим
// print '<b>'.$i.'</b> |';
print '<font color="red">['.$i.']</font> ';
}
}
print '>>';
// print '>>';
echo "</center>";
Где и что редактировать???
Заранее спасибо. | |
|
|
|
|
|
|
|
для: kviki
(09.04.2007 в 14:05)
| | Поднимите пожалуйста тему вечером (посмотрим, что можно сделать), чтобы она не отметилась у меня как прочитанная? | |
|
|
|
|
|
|
|
для: cheops
(09.04.2007 в 14:08)
| | Хорошо, а в этом же сообщении или новое создать? | |
|
|
|
|
|
|
|
для: kviki
(09.04.2007 в 14:11)
| | Да, эту же тему поднимите. | |
|
|
|
|
|
|
|
для: kviki
(09.04.2007 в 14:05)
| | Посмотрите скрипт во вложении. | |
|
|
|
|
|
|
|
для: cheops
(10.04.2007 в 13:26)
| | спасибо, щас посмотрю. | |
|
|
|
|
|
|
|
для: kviki
(10.04.2007 в 13:27)
| | Все отлично, данные выводит только есть две неточности:
1. Когда данных больше чем на одну страницу при нажатии на следующие допустим 10, страницы обнуляются и словно выводит все данные которые есть, потому что страниц вместо [str1]_[str2]_[str3] cтановится [str1]_[str2]_[str3] ...[str_n] вот такая мелочь (:
2. При выборе данных за неделю выдает
Error: 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 'week ORDER BY puttime DESC LIMIT 0,
Если можно, помогите, заранее спасибо. | |
|
|
|
|
|
|
|
для: kviki
(10.04.2007 в 14:51)
| | прилагаю строчку из броузера при первом запросе за неделю
http://localhost/data/data/searchform1.php?id_parent=&district=none&rooms=0&price_min=&price_max=&pricemeter_min=&pricemeter_max=&floor=&su=none&balcony=none&material=none&data=3&search=search
и строчка которая выдается при нажатии дальше
http://localhost/data/data/searchform1.php?page=2&id_parent=&district=none&rooms=0&price_min=&price_max=&pricemeter_min=&pricemeter_max=&floor=&su=none&balcony=none&material=none&search=search&date=
как я понимаю дело в дате. может она не фиксируется?
в файле поменял
конечные строчки:
"search=$_GET[search]&".
"date=$_GET[date]";
на
"date=$_GET[date]&".
"search=$_GET[search]"; | |
|
|
|
|
|
|
|
для: kviki
(10.04.2007 в 15:02)
| | должно быть так
http://localhost/data/data/searchform1.php?page=3&id_parent=&district=none&rooms=0&price_min=&price_max=&pricemeter_min=&pricemeter_max=&floor=&su=none&balcony=none&material=none&data=3&search=search
и тогда все нормально работает
тока как это сделать??? | |
|
|
|
|
|
|
|
для: kviki
(10.04.2007 в 15:08)
| | С первым пунктом разобрался,
остался второй, это с вот этим:
2. При выборе данных за неделю выдает
Error: 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 'week ORDER BY puttime DESC LIMIT 0,
Если можно, помогите, заранее спасибо.
впринципе думаю можно использовать такой вариант puttime > now() - interval 7 day
вместо puttime > now() - interval 1 week
но все же хотелось узнать в чем причина?
Заранее спасибо! | |
|
|
|
|
|
|
|
для: kviki
(10.04.2007 в 15:20)
| | Хм... да, ключевое слово week появилось, начиная с MySQL 5.0.0 замените строку
puttime > now() - interval 1 week
|
на
puttime > now() - interval 7 day
|
| |
|
|
|
|
|
|
|
для: kviki
(02.04.2007 в 08:51)
| | Подскажите пожалуйста, как организовать вывод информации постранично для:
Глава 8. Универсальный каталог продукции
// Осуществляем соединение с базой данных
// Извлекаем из строки запроса параметр start
if(isset($_GET['start'])) $start = $_GET['start'];
else $start = "";
// Стартовая точка
if (empty($start)) $start = 0;
// Стартовая точка не может быть меньше нуля
if ($start < 0) $start = 0;
// Запрашиваем общее число отображаемых сообщений
$query = "SELECT count(*) FROM product
WHERE hide = 'show'";
$tot = mysql_query($query);
// Запрашиваем сами сообщения
$query = "SELECT * FROM product
WHERE hide = 'show'
".$tmp11.$tmp1.$tmp2.$tmp3.$tmp4.$tmp5.$tmp6.$tmp7.$tmp8.
$tmp9.$tmp10.$tmp12.$tmp13.$tmp14.$tmp15.$tmp16.$tmp17."
ORDER BY puttime DESC
LIMIT $start, $pnumber";
$thm = mysql_query($query);
if(!$tot || !$thm) puterror("Ошибка при выборке сообщений...");
// Выполняем SQL-запрос
$prt = mysql_query($query);
if(!$prt) puterror("Ошибка при обращении к Доске Объявлений");
// количество рядов в наборе должно быть больше нуля
if (mysql_num_rows($prt)>0)
{
// Общее число отображаемых сообщений
$count= mysql_result($tot,0);
while($themes = mysql_fetch_array($thm))
{
$thm = mysql_query($query);
if(!$tot || !$thm) puterror("Ошибка при выборке сообщений...");
// Общее число отображаемых сообщений
$count= mysql_result($tot,0);
// Выводим ссылки на предыдущие и следующие сообщения
// if ($start > 0) print "<a href=index.php?start=".($start-$pnumber).">Предыдущие</A>";
// if ($count > $start + $pnumber) print " <a href=index.php?start=".($start + $pnumber).">Следующие</A><br>";
echo "<br>";
while($themes = mysql_fetch_array($thm))
// Выполняем SQL-запрос
$prt = mysql_query($query);
if(!$prt) puterror("Ошибка при обращении к Доске Объявлений");
// количество рядов в наборе должно быть больше нуля
if (mysql_num_rows($prt)>0)
{
дальше вывод таблицы с данными ...
}
Дело в том что при таком выводе, при нажатии на "следующие" страница Поиска просто обнуляется. И получается что приходится просто выводить все данные, что очень не удобно. | |
|
|
|
|
|
|
|
для: kviki
(09.04.2007 в 21:21)
| | Ребята подскажите может кто-то делал поиск по дате к книжному примеру, выглядеть должно так:
Выпадающий список с выбором за сегодня, за вчера и за неделю?
Дело в том что у меня эти запросы не работают.
<select name="data" class="input">
<option value='none' >не имеет значения
<option value=1>Сегодня</option>
<option value=2>Вчера</option>
<option value=3>За неделю</option>
</select>
Думал так
if(!empty($_POST['data']) && $_POST['data'] != 'none')
$tmp4 = " and data='".$_POST['data']."'";
Но этот вариант не работает, тогда хотел реализовать через :
puttime >= Now() - INTERVAL 1 DAY
Вот с этим никак не разберусь..
и скажите если делать постраничную навигацию через циферки
Заранее спасибо! | |
|
|
|
|
|
|
|
для: kviki
(10.04.2007 в 11:54)
| | Может кто-нибудь подскажет как всетаки сделать поиск по дате для примера из книжки? | |
|
|
|
|
|
|
|
для: kviki
(10.04.2007 в 11:54)
| | Посмотрите скрипт, представленный во вложении поста от 10.04.2007 в 13:26 - давайте от него отталкиваться. | |
|
|
|