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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Вопрос по книге: "PHP 5. Практика создания web-сайтов' - постраничная навигация при поиске
 
 автор: 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)
{
дальше вывод таблицы с данными ...
}
Дело в том что при таком выводе, при нажатии на "следующие" страница Поиска просто обнуляется. И получается что приходится просто выводить все данные, что очень не удобно.

   
 
 автор: cheops   (02.04.2007 в 12:45)   письмо автору
 
   для: kviki   (02.04.2007 в 08:51)
 

Следует передавать информацию из поисковой формы не методом POST, а методом GET и при формировании постраничной навигации передавать данные из HTML-формы в параметрах.

   
 
 автор: kviki   (08.04.2007 в 13:42)   письмо автору
 
   для: 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   (09.04.2007 в 13:08)   письмо автору
 
   для: kviki   (08.04.2007 в 13:42)
 

Ребят, может кто-то уже реализовал постраничную навигацию на таком примере, или на том что в книжке показан. Подскажите, а то уже замучился.

   
 
 автор: cheops   (09.04.2007 в 13:42)   письмо автору
 
   для: kviki   (08.04.2007 в 13:42)
 

Посмотрите вариант поиска во вложении (там немного другая постраничная навигация) - он подходит?

   
 
 автор: kviki   (09.04.2007 в 13:45)   письмо автору
 
   для: cheops   (09.04.2007 в 13:42)
 

спасибо, щас посмотрю и отпишусь.

   
 
 автор: kviki   (09.04.2007 в 14:05)   письмо автору
 
   для: 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>";

Где и что редактировать???
Заранее спасибо.

   
 
 автор: cheops   (09.04.2007 в 14:08)   письмо автору
 
   для: kviki   (09.04.2007 в 14:05)
 

Поднимите пожалуйста тему вечером (посмотрим, что можно сделать), чтобы она не отметилась у меня как прочитанная?

   
 
 автор: kviki   (09.04.2007 в 14:11)   письмо автору
 
   для: cheops   (09.04.2007 в 14:08)
 

Хорошо, а в этом же сообщении или новое создать?

   
 
 автор: cheops   (09.04.2007 в 15:11)   письмо автору
 
   для: kviki   (09.04.2007 в 14:11)
 

Да, эту же тему поднимите.

   
 
 автор: cheops   (10.04.2007 в 13:26)   письмо автору
 
   для: kviki   (09.04.2007 в 14:05)
 

Посмотрите скрипт во вложении.

   
 
 автор: kviki   (10.04.2007 в 13:27)   письмо автору
 
   для: cheops   (10.04.2007 в 13:26)
 

спасибо, щас посмотрю.

   
 
 автор: kviki   (10.04.2007 в 14:51)   письмо автору
 
   для: 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 в 15:02)   письмо автору
 
   для: 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:08)   письмо автору
 
   для: 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:20)   письмо автору
 
   для: 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
но все же хотелось узнать в чем причина?
Заранее спасибо!

   
 
 автор: cheops   (11.04.2007 в 12:22)   письмо автору
 
   для: kviki   (10.04.2007 в 15:20)
 

Хм... да, ключевое слово week появилось, начиная с MySQL 5.0.0 замените строку
puttime > now() - interval 1 week

на
puttime > now() - interval 7 day

   
 
 автор: kviki   (09.04.2007 в 21:21)   письмо автору
 
   для: 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   (10.04.2007 в 11:54)   письмо автору
 
   для: 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 в 13:10)   письмо автору
 
   для: kviki   (10.04.2007 в 11:54)
 

Может кто-нибудь подскажет как всетаки сделать поиск по дате для примера из книжки?

   
 
 автор: cheops   (10.04.2007 в 13:27)   письмо автору
 
   для: kviki   (10.04.2007 в 11:54)
 

Посмотрите скрипт, представленный во вложении поста от 10.04.2007 в 13:26 - давайте от него отталкиваться.

   
Rambler's Top100
вверх

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