Перейти к содержимому


Партнерская программа Kredov

Поиск данных в БД

#1 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0
0

Отправлено 16 Февраль 2009 - 22:51

Каким образом можно было бы организовать самый простейший поиск данных по запросу из БД в PHP?

 

 

  • 0

#2 Arukard1

Arukard1
  • Пользователь
  • 193 сообщений
  • Репутация: 0

Отправлено 16 Февраль 2009 - 23:12

Смысли, ты хочешь сделать поиск по сайту?
  • 0

#3 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 16 Февраль 2009 - 23:58

gaaarfild, создавалась уже тема. Смотри...
1) Идёт запрос с формы
<form method="POST" action="">
   <input type="text" name="search">
   <input type="submit" name="go_search" value="Найти">
</form>
2) Страница перезагружается, и если существует $_POST['go_search'] значит надо обработать запрос и вывести данные.
<?php

if(isset($_POST['go_search']) && strlen($_POST['search']) > 3)
{
   $search = mysql_escape_stirng($_POST['search']);
   $query = "SELECT * FROM table WHERE pole LIKE '%{$search}%'";
   $res = mysql_query($query) or die("Ошибка!");
   if(mysql_num_rows($res) > 0)
   {
	  while($array = mysql_fetch_array($res))
	  {
		  echo "pole: {$array['pole']}";
	  }
   }
}

?>

Тупо нахождение запрашиваемого слова в одном из столбцов таблицы.
Чтобы отобрать уникальные, не забываем использовать DISTINCT по определённому полю
  • 0

#4 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 17 Февраль 2009 - 00:47

Как понять уникальные? Тоесть только один? Или те, которые только в единственном экземпляре присутствуют?
  • 0

#5 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 17 Февраль 2009 - 11:01

Нет. Это к примеру у тебя в таблице имеется поле с повторяющимися данными в записях. Если ты сделаешь по данному полю DISTINCT возьмутся записи только с уникальным значением этого поля. Если таковых записей с подобным значением больше одной, то возьмётся либо первая, либо последняя(просто не помню).

А вообще лучше использовать GROUP BY(поле)

SELECT * FROM pdata GROUP BY(поле);
Выведет по одной записи с уникальным поле, так же можно применить сортировку ORDER BY()
  • 0

#6 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 17 Февраль 2009 - 22:56

Здорово! =) Огромное спасибо.
Еще уж вопрос тогда.
Вот этот код генерит поля, в которых находятся кнопки с ID самого поля. Когда нажимаю удалить, он удаляет почему-то всегда последнее поле, а не то, в котором нажата кнопка.

if (!isset($_GET['visdel_id'])) {
echo "<BR>
<table width=''><TR><TH width=150>Код посещения</TH><TH width=150>Дата посещения</TH><TH width=400>Процедуры</TH><TH width=150>Стоимость</TH><TH></TH></TR>";
	 while($query_data = mysql_fetch_array($pq)) {
	 echo "<TR><TD align='center'>{$query_data[id]}</td><TD align='center'>{$query_data[date]}</td><TD>{$query_data[procedure]}</td><TD align='right'>{$query_data[cash]} руб.</td><TD align='center'>
	 <FORM action='{$_SERVER['PHP_SELF']}' method='GET'>
	 <INPUT type='hidden' name='id' value='{$query_data[id]}'>
	 <INPUT type='hidden' name='pac_id' value='{$pac_id}'>
	 <INPUT type='submit' name='visdel_id' value='Удалить'>
	 </td></tr>";
	 }
	 echo "</table>";
	 } else {
	 $id = $_GET['id'];
	 $del = mysql_query("DELETE FROM visit WHERE id={$id}", $link_id);

  • 0

#7 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 17 Февраль 2009 - 23:49

gaaarfild,
1) Всегда ключи массива ставь в кавычки, иначе ты тратишь дополнительное время.
$query_data[id]
В данном случае id проверяется на макроопределение, константу, а только затем уже как ключ массива, поэтому тратится больше времени.
$query_data['id']
В данном случае интерпретатор сразу понимает что перед ним ключ массива, а не предопределённая константа.
Поэтому советую писать так:
{$query_data['id']}...............{$query_data['procedure']}

2) Всегда приходящие данные хоть GET, хоть POST методом нужно проверять.
Приведение к целому числу всегда просто сделать, к примеру с тем же самым id
$id = intval($_GET['id']);

3) Твоя же ошибка связанна с простой оплошностью. Стоит посмотреть в код, подумать как передаются данные, внимательно проверить что передаётся. Вывод: Кто за тебя форму будет закрывать?
</form>
Вот вроде и всё, но в следующий раз создавай новую тему, если даже будет похожий запрос, всё же одна тема в ответ на все вопросы не катит ;)
  • 0

#8 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 18 Февраль 2009 - 00:23

Вот вечно я так из-за тупой невнимательности. А тебе Огромное спасибо!!!
  • 0

#9 FordogeN

FordogeN
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0

Отправлено 18 Февраль 2009 - 10:46

Гааапфилд, ну дык нажми "Спасибо")))
зы. Могу предложить модернизировать поиск - сделать чтоб искало не фразу целиком, а чтоб на пример пробел и тире это разделяющие знаки и чтоб по запросу "купить слона в москве" находило и те страницы где написано "купить в москве слона"
  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата



#10 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 26 Апрель 2009 - 23:56

Спасибо и предложи. =) Всегда не против поучиться. =)
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru