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

Форум PHP

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

 

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

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

тема: Постраничная навигация в поиске
 
 автор: Sprinter_One   (11.01.2013 в 11:41)   письмо автору
 
 

Всем доброго времени суток. Подскажите пожалуйста, как сделать постраничную навигацию для поиска, чтобы после запроса на одной странице не выдавалась целая лента ответов. Есть такая навигация:

<?php 
echo $myrow ['text'];    
$result77 mysql_query("SELECT str FROM options"$db);
$myrow77 mysql_fetch_array($result77);
$num $myrow77["str"];
// Извлекаем из URL текущую страницу
@$page $_GET['page'];
// Определяем общее число сообщений в базе данных
$result00 mysql_query("SELECT COUNT(*) FROM products");
$temp mysql_fetch_array($result00);
$posts $temp[0];
// Находим общее число страниц
$total = (($posts 1) / $num) + 1;
$total =  intval($total);
// Определяем начало сообщений для текущей страницы
$page intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page 0$page 1;
  if(
$page $total$page $total;
// Вычисляем начиная с какого номера
// следует выводить сообщения
$start $page $num $num;
// Выбираем $num сообщений начиная с номера $start
$result mysql_query("SELECT id,title,description FROM products ORDER BY id LIMIT $start$num"$db);        
$myrow mysql_fetch_array ($result);
do {    
printf ("<table align = 'center' class='products'>
        <tr>
        <td><p class='products_name'><a href  = 'view_products.php?id=%s'>%s</a></p></td>
        </tr>    
        <tr>
        <td>%s</td>
        </tr>
        </table><br><br>"
$myrow["id"], $myrow["title"], $myrow["description"]);
}
while (
$myrow mysql_fetch_array ($result));
// Проверяем нужны ли стрелки назад  
if ($page != 1$pervpage '<a href= products.php?page=1>Первая</a>  
                               <a href= products.php?page='
. ($page 1) .'>Предыдущая</a> ';  
// Проверяем нужны ли стрелки вперед  
if ($page != $total$nextpage ' <a href= products.php?page='. ($page 1) .'>Следующая</a>  
                                   <a href= products.php?page=' 
.$total'>Последняя</a>';  
// Находим две ближайшие станицы с обоих краев, если они есть  
if($page 0$page2left ' <a href= products.php?page='. ($page 2) .'>'. ($page 2) .'</a> | ';  
if(
$page 0$page1left '<a href= products.php?page='. ($page 1) .'>'. ($page 1) .'</a> | ';  
if(
$page <= $total$page2right ' | <a href= products.php?page='. ($page 2) .'>'. ($page 2) .'</a>';  
if(
$page <= $total$page1right ' | <a href= products.php?page='. ($page 1) .'>'. ($page 1) .'</a>';
// Вывод меню 
if ($total 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo 
"<div class=\"pstrnav\">";
echo 
$pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;
echo 
"</div>";
}
?>


Она отлично работает по разделам....а вот в поиске у меня возникли проблемы..
вот собственно код поиска:

<?php 
include ("blocks/bd.php"); /* СОЕДИНЯЕМСЯ С БД */
if (isset($_POST['submit_s']))    {$submit_s $_POST['submit_s'];}
if (isset(
$_POST['search']))    {$search $_POST['search'];}
if (isset (
$submit_s))
{    
if (empty(
$search) or strlen($search) < 4)
{
exit (
"<p>Поисковый запрос не введён, либо он меньше 4-х символов</p>");    
}
$search trim ($search);
$search stripslashes ($search);
$search htmlspecialchars ($search);
}
else
{
exit (
"<p>Вы обратились к файлу без необходимых параметров</p>");    
}
?>

    <p><h3><span style="color: #C03">Найденая информация по запросу: <?php echo "'$search'"?></p></span></h3>
    
<?php
/*ВЫВОДИМ ИНФОРМАЦИЮ ИЗ ТАБЛИЦЫ "АКУСТОМАГНИТНЫЕ ПРОТИВОКРАЖНЫЕ РАМКИ"*/
$result mysql_query ("SELECT id, title, description FROM akustomagnit_antikrazh_ramki WHERE text LIKE '%$search%'" $db);
if (!
result)
{
echo 
"<p>Запрос не введён, либо он менее 4-х символов</p>";
exit (
mysql_error());
}
if (
mysql_num_rows($result) > 0)
{
$myrow mysql_fetch_array($result);
do
{
printf ("<table align = 'center' class='akustomagnit_antikrazh_ramki'>
        <tr>
        <td><p class='akustomagnit_antikrazh_ramki_name'><a href = 'view_akustomagnit_antikrazh_ramki.php?id=%s'>%s</a></p></td>
        </tr>                
        <tr>
        <td>%s</td>
        </tr>
        </table><br><br>"
$myrow["id"], $myrow["title"], $myrow["description"]);            
}
while (
$myrow mysql_fetch_array ($result));
}
else
{
echo 
"<p>Информация по вашему запросу на сайте не найдена!</p>";
exit ();
}
/*КОНЕЦ ВЫВОДА ИНФОРМАЦИИ ИЗ ТАБЛИЦЫ "АКУСТОМАГНИТНЫЕ ПРОТИВОКРАЖНЫЕ РАМКИ"*/
?>    
    
<?php
/*ВЫВОДИМ ИНФОРМАЦИЮ ИЗ ТАБЛИЦЫ "АВТОМАТИЧЕСКИЕ ВОРОТА"*/
$result mysql_query ("SELECT id, title, description FROM avt_vorota WHERE text LIKE '%$search%'" $db);
if (!
result)
{
echo 
"<p>Запрос не введён, либо он менее 4-х символов</p>";
exit (
mysql_error());
}
if (
mysql_num_rows($result) > 0)
{
$myrow mysql_fetch_array($result);
do
{
printf ("<table align = 'center' class='avt_vorota'>
        <tr>
        <td><p class='avt_vorota_name'><a href = 'view_avt_vorota.php?id=%s'>%s</a></p></td>
        </tr>    
        <tr>
        <td>%s</td>
        </tr>
        </table><br><br>"
$myrow["id"], $myrow["title"], $myrow["description"]);            
}
while (
$myrow mysql_fetch_array ($result));
}
else
{
echo 
"<p>Информация по вашему запросу на сайте не найдена!</p>";
exit ();
}
/*КОНЕЦ ВЫВОДА ИНФОРМАЦИИ ИЗ ТАБЛИЦЫ "АВТОМАТИЧЕСКИЕ ВОРОТА"*/
?>


разумеется это не весь код, ведь смысла нет копировать такие поля как автоматические ворота по 100500 раз, там только названия меняются...

Вообщем я очень запарился уже, помогите пожалуйста сделать постраничную навигацию для этого поиска. Заранее спасибо!!!

  Ответить  
 
 автор: Sfinks   (11.01.2013 в 13:00)   письмо автору
 
   для: Sprinter_One   (11.01.2013 в 11:41)
 

> у меня возникли проблемы.
А проблема в чем? Просто ко второму листингу нужно приделать проверки навигации из первого и к запросу
SELECT id, title, description FROM avt_vorota WHERE text LIKE '%$search%'" 
добавить LIMIT как в первом.

  Ответить  
 
 автор: Sprinter_One   (11.01.2013 в 13:04)   письмо автору
 
   для: Sfinks   (11.01.2013 в 13:00)
 

я тоже так думал, но проблема в том что в БД есть куча таких таблиц как avt_vorota (Например, domofony). По отдельности всё работает. А когда пытаюсь объеденить, ничего не выходит.

  Ответить  
 
 автор: Sfinks   (11.01.2013 в 13:19)   письмо автору
 
   для: Sprinter_One   (11.01.2013 в 13:04)
 

Вы же ничего об этом не говорите сразу....

Нужно значит искать сразу по всем таблицам. Запрос такого вида примерно:
SELECT * FROM(
  SELECT id, title, description FROM table_1 WHERE text LIKE '%$search%'
    union all
  SELECT id, title, description FROM table_2 WHERE text LIKE '%$search%'
    union all
  SELECT id, title, description FROM table_3 WHERE text LIKE '%$search%'
    union all
  SELECT id, title, description FROM table_4 WHERE text LIKE '%$search%'
)t
LIMIT {x},{y}


P.S. Но это говорит о не правильной организации структуры БД.

  Ответить  
 
 автор: Sprinter_One   (11.01.2013 в 13:24)   письмо автору
 
   для: Sfinks   (11.01.2013 в 13:19)
 

спасибо, попробую так....я думал из кода будет понятно что несколько таблиц в БД....в коде 2 приведены (автоматические ворота и акустомагнитные противокражные рамки)...

  Ответить  
 
 автор: Sprinter_One   (11.01.2013 в 14:15)   письмо автору
3.3 Кб
 
   для: Sprinter_One   (11.01.2013 в 13:24)
 

опять не выходит....я уже совсем запарился и голова не работает....
куда тогда убрать этот код?

$myrow = mysql_fetch_array ($result);
do {    
printf ("<table align = 'center' class='products'>
        <tr>
        <td><p class='products_name'><a href  = 'view_products.php?id=%s'>%s</a></p></td>
        </tr>        
        <tr>
        <td>%s</td>
        </tr>
        </table><br><br>", $myrow["id"], $myrow["title"], $myrow["description"]);
}
while ($myrow = mysql_fetch_array ($result));

именно на эту часть ругается. а отдельно к каждой таблице она нужна.

к сообщению прикрепляю целый файл, посмотрите пожалуйста, может найдёте ошибку.

  Ответить  
 
 автор: Sfinks   (11.01.2013 в 14:53)   письмо автору
 
   для: Sprinter_One   (11.01.2013 в 14:15)
 

Переделывайте структуру БД. Это будет самым верным решением.
Не должно быть каждый тип товара в отдельной таблице. Должна быть одна таблица "товары" и в ней, кроме прочего, еще поле "тип товара". Соответственно, и один php-обработчик для всех типов товара. Тогда и проблем не будет. Иначе хуже будет. Сейчас путем усложнения запроса и разбора егорезультата можно выкрутиться. Но чем дальше, тем хуже будет.

  Ответить  
 
 автор: Sprinter_One   (11.01.2013 в 16:48)   письмо автору
 
   для: Sfinks   (11.01.2013 в 14:53)
 

переделал бы, но это не самый лучший вариант....структура идёт типа такого: монитор - модель телефона (тут же описание)...более 20 таблиц переделывать и в каждой из них уже более 15 записей, не вариант....может какой-нибудь альтернативный поиск подойдет? где не нужно будет так сильно затрагивать бд.

  Ответить  
 
 автор: Valick   (11.01.2013 в 17:43)   письмо автору
 
   для: Sprinter_One   (11.01.2013 в 16:48)
 

более 20 таблиц переделывать и в каждой из них уже более 15 записей
это мизер, переделывайте пока не поздно

  Ответить  
 
 автор: Sprinter_One   (11.01.2013 в 23:37)   письмо автору
 
   для: Valick   (11.01.2013 в 17:43)
 

не, такой вариант не подходит...

  Ответить  
 
 автор: Sfinks   (12.01.2013 в 09:11)   письмо автору
 
   для: Sprinter_One   (11.01.2013 в 23:37)
 

Тогда сохраните эту тему в закладки и через пол годика вспомните мои слова =)

Решение такое: добавляете в запрос четвертым полем информацию о том, из какой таблицы товар и дальше в php разбирайте эту кашу.

Запрос такого вида:
SELECT * FROM( 
  SELECT id, title, description, 'table_1' as table_name FROM table_1 WHERE text LIKE '%$search%' 
    union all 
  SELECT id, title, description, 'table_2' FROM table_2 WHERE text LIKE '%$search%' 
    union all 
  SELECT id, title, description, 'table_3' FROM table_3 WHERE text LIKE '%$search%' 
    union all 
  SELECT id, title, description, 'table_4' FROM table_4 WHERE text LIKE '%$search%' 
)t 
LIMIT {x},{y}

  Ответить  
 
 автор: wsnet   (12.01.2013 в 21:32)   письмо автору
 
   для: Sfinks   (12.01.2013 в 09:11)
 

ORDER BY не забыть, использовать mysql_fetch_assoc, предотвращать SQL-инъекции

  Ответить  
Rambler's Top100
вверх

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