|
|
|
| Доброго времени суток Уважаемые
Озадачился проблемой создания простого поиска в базе данных с несколькими параметрами. В результате
создал такой простой пробный скрипт. Форма для поиска:
<form action="search.php" method=POST target="_blank">
Pole1
<input type="text" name="search1" />
Pole2
<input type="text" name="search2" />
<input type="submit" value="search">
</form>
сам скрипт поиска:
<?php
$host="localhost";
$user="root";
$passw="";
$dbase="image";
$table="proba";
/*зєднання з БД*/
$db=mysql_connect($host,$user,$passw) or die ("<font color='red'>Error.</font>");
/*вибір БД*/
mysql_select_db($dbase) or die ("<font color='red'>Error.</font>");
$search1=$_POST['search1'];
$search2=$_POST['search2'];
$query=mysql_query("SELECT * FROM proba WHERE pole1 LIKE '%".$search1."%' AND pole2 LIKE '%".$search2."%'");
$num=mysql_num_rows($query);
echo $num." Record<br>";
echo "<table border=1><tr>";
echo "<td>id</td>";
echo "<td>pole1</td>";
echo "<td>pole2</td>";
echo "</tr>";
while (list ($id,$pole1,$pole2) = mysql_fetch_row($query))
{
echo "<tr>";
echo "<td>".$id."</td>";
echo "<td>".$pole1."</td>";
echo "<td>".$pole2."</td></tr>";
}
echo "</table>";
?>
он очень простой. Проблема в том как прикрутить к этому поиску постраничную навигацию. За основу я взял пример постраничной навигации приведеный на Вашем сайте. Она конечно заробатала и большего мне не надо, но как прикрутить ёё к этому скрипту я не знаю. Вместо что б выводить строки которые нашлись, выводятся все записи с базы. Помогите пожалуйста советом или лучше кодом как изменить скрипт с постраничной навигацией под мой скрипт поиска.
Спасибо за ответы | |
|
|
|
|
|
|
|
для: gghh
(02.10.2010 в 14:40)
| | >>Вместо что б выводить строки которые нашлись, выводятся все записи с базы
Если у Вас выводятся все записи вместо нужных, то причём тут постраничная навигация? | |
|
|
|
|
|
|
|
для: Gubichev
(02.10.2010 в 14:56)
| | Объясняю. Например в результате поиска выводится 100 записей, как мне сделать вывод по 10 на страницу? Поиск работает нормально, но как к нему прикрутить постраничную навигацию я не знаю. | |
|
|
|
|
|
|
|
для: gghh
(02.10.2010 в 16:40)
| | >Например в результате поиска выводится 100 записей, как мне сделать вывод по 10 на страницу?
Вот запрос:
SELECT * FROM ... LIMIT $kolvo
|
Где $kolvo количество записей выводимых на страницу
Или так:
SELECT * FROM ... LIMIT $num, $limit
|
$limit - количество записей на страницу
$num - начиная с | |
|
|
|
|
|
|
|
для: akmal
(02.10.2010 в 16:46)
| | Спасибо за ответ. Я пошел этим путем , следуя статье на этом сайте про постраничную навигацию, изменяя скрипт поиска. В результате ничего не вышло. Народ подскажите где прочитать про поиск с постраничной навигацией. Как сделать постраничную навигацию я знаю. | |
|
|
|
|
|
|
|
для: gghh
(02.10.2010 в 16:53)
| | Поищите в поисковике должно быть Вы найдете что-нить подходящее...) | |
|
|
|
|
|
|
|
для: akmal
(02.10.2010 в 17:01)
| | Спасибо ищу | |
|
|
|
|
|
|
|
для: gghh
(02.10.2010 в 17:03)
| | Погуглил (одна жомля и вордпрес), поискал на этом форуме, не могу разобраться. Подскажите, как прикрутить к моему скрипту поиска постраничный вывод приведенный на этой странице http://softtime.ru/info/articlephp.php?id_article=33
Спасибо | |
|
|
|
|
|
|
|
для: gghh
(02.10.2010 в 20:15)
| | >поискал на этом форуме, не могу разобраться.
Вот же в соседней теме | |
|
|
|
|
|
|
|
для: Николай2357
(02.10.2010 в 22:04)
| | Да точно. Спасибо, попробую разобраться. | |
|
|
|
|
|
|
|
для: gghh
(02.10.2010 в 22:08)
| | Народ, но вопрос остается открытым. Я пока по ходу в этом примере разобраться не могу. | |
|
|
|
|
|
|
|
для: gghh
(02.10.2010 в 14:40)
| | Готовый код:
<?php
$host="localhost";
$user="root";
$passw="";
$dbase="image";
$table="proba";
/*зєднання з БД*/
$db=mysql_connect($host,$user,$passw) or die ("<font color='red'>Error.</font>");
/*вибір БД*/
mysql_select_db($dbase) or die ("<font color='red'>Error.</font>");
$search1=$_REQUEST['search1'];
$search2=$_REQUEST['search2'];
// Переменная хранит число сообщений выводимых на станице
$num = 25;
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result = mysql_query("SELECT COUNT(*) FROM proba WHERE pole1 LIKE '%".$search1."%' AND pole2 LIKE '%".$search2."%'");
$posts = mysql_result($result, 0);
// Находим общее число страниц
$total = intval(($posts - 1) / $num) + 1;
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная к какого номера
// следует выводить сообщения
$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start
$query=mysql_query("SELECT * FROM proba WHERE pole1 LIKE '%".$search1."%' AND pole2 LIKE '%".$search2."%' LIMIT $start, $num");
$num=mysql_num_rows($query);
echo $num." Record<br>";
echo "<table border=1><tr>";
echo "<td>id</td>";
echo "<td>pole1</td>";
echo "<td>pole2</td>";
echo "</tr>";
while (list ($id,$pole1,$pole2) = mysql_fetch_row($query))
{
echo "<tr>";
echo "<td>".$id."</td>";
echo "<td>".$pole1."</td>";
echo "<td>".$pole2."</td></tr>";
}
echo "</table>";
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href= ./page?page=1&search1=$search1&search2=$search2><<</a>
<a href= ./page?page='. ($page - 1) .'&search1=$search1&search2=$search2><</a> ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' <a href= ./page?page='. ($page + 1) .'&search1=$search1&search2=$search2>></a>
<a href= ./page?page=' .$total. '&search1=$search1&search2=$search2>>></a>';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = ' <a href= ./page?page='. ($page - 2) .'&search1=$search1&search2=$search2>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href= ./page?page='. ($page - 1) .'&search1=$search1&search2=$search2>'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = ' | <a href= ./page?page='. ($page + 2) .'&search1=$search1&search2=$search2>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href= ./page?page='. ($page + 1) .'&search1=$search1&search2=$search2>'. ($page + 1) .'</a>';
// Вывод меню
echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;
?>
|
Помоему все правильно.... Должно работать... | |
|
|
|
|
|
|
|
для: akmal
(04.10.2010 в 15:59)
| | >Помоему все правильно.... Должно работать...
Как оно будет работать, если в каждой из этих строк - <a href= ./page?page=1&search1=$search1&search2=$search2><<</a> синтаксические ошибки?
Плюс в скрипте нет защиты от SQL-инъекций.
И вы забыли сказать, что форма должна отправляться методом $_GET. | |
|
|
|
|
|
|
|
для: Лена
(04.10.2010 в 17:07)
| | >Как оно будет работать, если в каждой из этих строк - <a href= ./page?page=1&search1=$search1&search2=$search2><<</a> синтаксические ошибки?
да... тут я пролетел((
>Плюс в скрипте нет защиты от SQL-инъекций.
ну это не моя обязаность....
>И вы забыли сказать, что форма должна отправляться методом $_GET.
вообщето там данные получаются из масива REQUEST(надобно быть внимательней).... | |
|
|
|
|
|
|
|
для: akmal
(04.10.2010 в 17:15)
| | >>Как оно будет работать, если в каждой из этих строк - <a href= ./page?page=1&search1=$search1&search2=$search2><<</a> синтаксические ошибки?
>да... тут я пролетел((
>>Плюс в скрипте нет защиты от SQL-инъекций.
>ну это не моя обязаность....
А чья? Вы же даете человеку "дырявый скрипт"...
>>И вы забыли сказать, что форма должна отправляться методом $_GET.
>вообщето там данные получаются из масива REQUEST(надобно быть внимательней)....
Это я заметила. Не во внимательности дело.
У тредстатера форма отправлялась через $_POST, саму форму вы не привели, человек опять в method пропишет post и не поймет, в чем дело. | |
|
|
|
|
|
|
|
для: Лена
(04.10.2010 в 17:24)
| | >А чья? Вы же даете человеку "дырявый скрипт"...
Я же неговорю что это конечный вид скрипта его есче дорабатывать и дорабатывать.
Главное я показ принцип работы...
К тому же где Вы раньше были когда человек просил помощи...
ПОЧЕМУ ЖЕ ВЫ НЕ ПОДАЛИ ЧЕЛОВЕКУ НЕ "ДЫРЯВЫЙ СКРИПТ"... | |
|
|
|
|
|
|
|
для: akmal
(04.10.2010 в 17:37)
| | >>А чья? Вы же даете человеку "дырявый скрипт"...
>Я же неговорю что это конечный вид скрипта его есче дорабатывать и дорабатывать.
>Главное я показ принцип работы...
>К тому же где Вы раньше были когда человек просил помощи...
Человек не просил помощи. Называйте вещи своими именами. Человек просил готовый скрипт. Вы взяли скрипт понятно откуда, добавили пару моментов, не удосужившись исправить чужие ошибки и выложили сюда.
Я не нахожусь на форуме круглосуточно и очень редко помогаю тем, кто просит готовое.
>ПОЧЕМУ ЖЕ ВЫ НЕ ПОДАЛИ ЧЕЛОВЕКУ НЕ "ДЫРЯВЫЙ СКРИПТ"...
еще раз повторяю: я очень редко даю кому-то готовые скрипты, написанные от и до.
И никогда не прошу их сама. | |
|
|
|
|
|
|
|
для: akmal
(04.10.2010 в 17:37)
| | >>А чья? Вы же даете человеку "дырявый скрипт"...
>Я же неговорю что это конечный вид скрипта его есче дорабатывать и дорабатывать.
>Главное я показ принцип работы...
>К тому же где Вы раньше были когда человек просил помощи...
Человек не просил помощи. Называйте вещи своими именами. Человек просил готовый скрипт.
Вы взяли скрипт понятно откуда, добавили пару моментов, не удосужившись исправить чужие ошибки и выложили сюда.
Я не нахожусь на форуме круглосуточно и очень редко помогаю тем, кто просит готовое.
>ПОЧЕМУ ЖЕ ВЫ НЕ ПОДАЛИ ЧЕЛОВЕКУ НЕ "ДЫРЯВЫЙ СКРИПТ"...
Еще раз повторяю: я очень редко даю кому-то готовые скрипты, написанные от и до.
И никогда не прошу их сама. | |
|
|
|
|
|
|
|
для: Лена
(04.10.2010 в 17:52)
| | >Вы взяли скрипт понятно откуда, добавили пару моментов, не удосужившись исправить чужие ошибки и выложили сюда.
Я не говорю что этот скрипт постраничной навиции написал я...
>Человек просил готовый скрипт.
Человек попросил показать как привязать постраничную навицию с его скриптом...
Давайте закончим этот бессмысленый разговор | |
|
|
|
|
|
|
|
для: akmal
(04.10.2010 в 18:03)
| | Народ давайте не будем ссорится. Я неделю не заходил на сайт, не было возможности. Всем авторам ответов сердечное спасибо. Скрипт я конечно доработаю. Главное чтоб он работал.
Еще раз спасибо за проделанную работу.
P.S. я тут поразмыслил, а сколько может стоить доработать или сделать новый скрипт поиска с постраничным выводом. Может мне проще заплатить денежку знающим людям?
Спасибо за ответы | |
|
|
|
|
|
|
|
для: gghh
(07.10.2010 в 20:08)
| | Ну это смотря какой поиск с постраничным выводом, т.е с каким функционалом наворотами и т.п. | |
|
|
|
|
|
|
|
для: akmal
(08.10.2010 в 17:00)
| | Уважаемый akmal
просто доработать скрипт который я привел в первом сообщение. Сделать его максимально защищенным от иньекций. А навороты и красивости мне не нужны, главное чтоб искал и выводил результаты с постраничной навигацией. | |
|
|
|
|
|
|
|
для: gghh
(08.10.2010 в 20:48)
| | Всем привет
Еще раз хочу поблагодарить всех кто мне помог с решением задачи. Особення благодарность akmalu за подсказку в каком направлении двигаться. После некоторых доработок вот что получилось:
здесь форма для поиска:
<form action="s.php" method=POST target="_blank">
Pole1
<input type="text" name="search1" />
Pole2
<input type="text" name="search2" />
<input type="submit" value="search">
</form>
|
здесь дапм базы:
use image;
CREATE TABLE `tables` (
`id` tinyint(4) NOT NULL auto_increment,
`pole1` char(60) collate cp1251_bin NOT NULL default '',
`pole2` char(60) collate cp1251_bin NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin;
INSERT INTO `tables` (`id`, `pole1`, `pole2`) VALUES
(7, 'pole', 'pole3'),
(6, 'pole', 'pole2'),
(3, 'pole', 'pole'),
(4, 'pole', 'pole'),
(5, 'pole1', 'pole'),
(8, 'pole', 'pole'),
(9, 'pole1', 'pole2'),
(10, 'pole1', 'pole1'),
(11, 'pole', 'pole'),
(12, 'pole', 'pole'),
(13, 'pole', 'pole'),
(14, 'pole', 'pole'),
(15, 'pole', 'pole'),
(16, 'pole', 'pole'),
(17, 'pole', 'pole'),
(18, 'pole', 'pole'),
(19, 'pole', 'pole'),
(20, 'pole', 'pole');
|
и сам скрипт, немного переработаный, возможно кому-то пригодится. Конечно его нужно доработать, добавить фильтрацию
полей и защиту от иньекций и фильтрацию. Но это не трудно реализировать. Вот сам переработанный скрипт
html><head><style>
a.paginator {text-decoration:none;font-size:12pt;color:blue;border:solid 1px lightgray;padding:3px;}
a.paginators {text-decoration:none;font-size:13pt;color:blue;border:solid 1px lightgray;padding:3px;}
</style></head>
<?php
$host="localhost";
$user="root";
$passw="";
$dbase="image";
$table="tables";
/*зєднання з БД*/
$db=mysql_connect($host,$user,$passw) or die ("<font color='red'>Error.</font>");
/*вибір БД*/
mysql_select_db($dbase) or die ("<font color='red'>Error.</font>");
$pages=1;
$search1=$_REQUEST['search1'];
$search2=$_REQUEST['search2'];
//Число строк которые отвечают параметрам
$str=mysql_query("SELECT * FROM $table WHERE pole1 LIKE '%".$search1."%' AND pole2 LIKE '%".$search2."%'");
$num_p=mysql_num_rows($str);
echo "<p style='font-size:14pt;'>Всього знайдено ".$num_p." запис(ів), що відповідають даному критерію.</p>";
echo "<br />";
// Переменная хранит число сообщений выводимых на станице
$num = 2;
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result = mysql_query("SELECT COUNT(*) FROM tables WHERE pole1 LIKE '%".$search1."%' AND pole2 LIKE '%".$search2."%'");
$posts = mysql_result($result, 0);
// Находим общее число страниц
$total = intval(($posts - 1) / $num) + 1;
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная к какого номера
// следует выводить сообщения
$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start
$query=mysql_query("SELECT * FROM tables WHERE pole1 LIKE '%".$search1."%' AND pole2 LIKE '%".$search2."%' LIMIT $start, $num" );
$num=mysql_num_rows($query);
echo "<table border=1><tr>";
echo "<td>ID</td>";
echo "<td>POLE 1</td>";
echo "<td>POLE 2</td>";
echo "</tr>";
while (list ($id,$pole1,$pole2) = mysql_fetch_row($query))
{
echo "<tr>";
echo "<td>".$id."</td>";
echo "<td>".$pole1."</td>";
echo "<td>".$pole2."</td></tr>";
}
echo "</table><br /><br />";
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '
<a class="paginator" href= ./s.php?page='.($pages).'search1=$search1||search2=$search2> << </a>
<a class="paginator" href= ./s.php?page='.($page - 1).'search1=$search1||search2=$search2> < </a> ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage =
'<a class="paginator" href= ./s.php?page='.($page + 1).'search1=$search1||search2=$search2> ></a>
<a class="paginator" href= ./s.php?page=' .$total. 'search1=$search1||search2=$search2> >></a> ';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = '
<a class="paginators" href= ./s.php?page='. ($page - 2) .'search1=$search1||search2=$search2>'. ($page - 2) .'</a> ';
if($page - 1 > 0) $page1left = '
<a class="paginators" href= ./s.php?page='. ($page - 1) .'search1=$search1||search2=$search2>'. ($page - 1) .'</a> ';
if($page + 2 <= $total) $page2right = '
<a class="paginators" href= ./s.php?page='. ($page + 2) .'search1=$search1||search2=$search2>'. ($page + 2) .'</a> ';
if($page + 1 <= $total) $page1right = '
<a class="paginators" href= ./s.php?page='. ($page + 1) .'search1=$search1||search2=$search2>'. ($page + 1) .'</a> ';
// Вывод меню
echo $pervpage.$page2left.$page1left.'<span style="font-size:16pt;color:blue;border:solid 1px lightgray;padding:3px;font-weight:bold;">'.$page.'</span>'.$page1right.$page2right.$nextpage;
?>
|
Еще раз всем спасибо за помощь | |
|
|
|
|
|
|
|
для: gghh
(13.10.2010 в 19:27)
| | Вот о чем и говорила Лена в (04.10.2010 в 17:24)
Скрипт как был дырявым, так и остался... | |
|
|
|
|
|
|
|
для: Николай2357
(13.10.2010 в 19:36)
| | Я и написал в тексте что скрипт дырявый, его нужно будет доработать, но это не трудно. Главное что сама постраничная навигация работает и не нужно разбираться в нагромождение кода. На днях протестирую его на большой базе. | |
|
|
|
|
|
|
|
для: gghh
(13.10.2010 в 20:24)
| | Извиняюсь я зря похвалился. Скрипт не работает. Так как я его переделал, он при нажатие на следующую страницу выводит все записи с базы, вместо того что б выводить только те, что отвечают параметрам. Народ помогите доделать скрипт, в этой части где-то ошибка, помогите найти
<?php
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href= ./page?page=1&search1=$search1&search2=$search2><<</a>
<a href= ./page?page='. ($page - 1) .'&search1=$search1&search2=$search2><</a> ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' <a href= ./page?page='. ($page + 1) .'&search1=$search1&search2=$search2>></a>
<a href= ./page?page=' .$total. '&search1=$search1&search2=$search2>>></a>';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = ' <a href= ./page?page='. ($page - 2) .'&search1=$search1&search2=$search2>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href= ./page?page='. ($page - 1) .'&search1=$search1&search2=$search2>'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = ' | <a href= ./page?page='. ($page + 2) .'&search1=$search1&search2=$search2>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href= ./page?page='. ($page + 1) .'&search1=$search1&search2=$search2>'. ($page + 1) .'</a>';
?>
|
| |
|
|
|
|
|
|
|
для: gghh
(17.10.2010 в 15:14)
| | Поменяйте все на следующее
<?php
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '
<a class="paginator" href= ./s.php?page='.($pages).'&search1='.$search1.'&search2='.$search2.'> << </a>
<a class="paginator" href= ./s.php?page='.($page - 1).'&search1='.$search1.'&search2='.$search2.'> < </a> ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage =
'<a class="paginator" href= ./s.php?page='.($page + 1).'&search1='.$search1.'&search2='.$search2.'> ></a>
<a class="paginator" href= ./s.php?page=' .$total. '&search1='.$search1.'&search2='.$search2.'> >></a> ';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = '
<a class="paginators" href= ./s.php?page='. ($page - 2) .'&search1='.$search1.'&search2='.$search2.'>'. ($page - 2) .'</a> ';
if($page - 1 > 0) $page1left = '
<a class="paginators" href= ./s.php?page='. ($page - 1) .'&search1='.$search1.'&search2='.$search2.'>'. ($page - 1) .'</a> ';
if($page + 2 <= $total) $page2right = '
<a class="paginators" href= ./s.php?page='. ($page + 2) .'&search1='.$search1.'&search2='.$search2.'>'. ($page + 2) .'</a> ';
if($page + 1 <= $total) $page1right = '
<a class="paginators" href= ./s.php?page='. ($page + 1) .'&search1='.$search1.'&search2='.$search2.'>'. ($page + 1) .'</a> ';
?>
|
| |
|
|
|
|
|
|
|
для: akmal
(17.10.2010 в 15:50)
| | Спасибо уважаемый akmal. Вы меня очень выручили. Будете проездом в г. Львове (Украина) с меня большая пицца и много львовского пива, оно у нас вкусное.
Еще раз спасибо | |
|
|
|
|
|
|
|
для: gghh
(17.10.2010 в 16:47)
| | Незачто....)))))
ЗЫ: Спасибо, но мне пива-то есче нельзя мне ток 14 стукнуло... | |
|
|
|
|
|
|
|
для: akmal
(17.10.2010 в 16:56)
| | Не вопрос соки "Садочок" или "Одеського заводу" то что надо. Да если не трудно киньте мне на gg_hh@inbox.ru свою аську или мыло. Нужно с Вами переговорить с глазу на глаз об одном проекте, если Вы конечно заинтересованы и владеете свободным временем. Деньги там небольшие. | |
|
|
|
|
|
|
|
для: gghh
(17.10.2010 в 17:07)
| | Моё мыло linux_09@mail.ru | |
|
|
|