Помогите с организацией поиска.

motobyba

Новичок
Помогите с организацией поиска.

Здраствуйте!

Подскажите неопытному как правельно оганизовать поиск. Имеется база данных телефонов. в этой базе есть таблица с полями: номер, фамилия, Илициалы, улица, город. ну и id. База подключена к сайту, на сайте есть форма ввода номера телефона, фамилии, выбора улици и города для поиска. так вот, как можно организовать поиск, к примеру вот если пользователь захочет найти абонента по улице, потом, когда из базы выведется список всех жителей улицы, пользователь захочет найти абонента еще и по фамилии.
пробовал вот так но бесполезно,
PHP:
 if (empty($_GET['v_surname']))
{
/*Сдесь код отвечающий за постраничный вывод всех записей БД и постраничную навигацию.*/
}
else
{
$link = mysql_connect("localhost", "lut", "12345") or die("NO connect");

mysql_select_db("tel") or die("not find BD");


$query = "SELECT * FROM telbook WHERE surname LIKE '".strtoupper($_GET['v_surname'])."%'";

$result = mysql_query($query) or die("3apros error");

$table = "<table border=0 width=100% align=center>\n";
while($row=mysql_fetch_assoc($result)) 
{
  $table .= "<tr>\n";
     
     $table .= "<td>".$row['id']."</td>\n";
     $table .= "<td>".$row['number']."</td>\n";
     $table .= "<td>".$row['surname']."</td>\n";
	 $table .= "<td>".$row['io']."</td>\n";
	 $table .= "<td>".$row['town']."</td>\n";
	 $table .= "<td>".$row['street']."</td>\n";
	 $table .= "<td>".$row['house']."</td>\n";
     
     $table .= "</tr>\n";
}

$table .= "</table>\n";

// Выводим заполненую таблицу на экран
echo $table;


mysql_free_result($result);

mysql_close($link);
}
?>
это неверный подход
Посоветуйте пожалуйста как делать.
 

motobyba

Новичок
дело в том что когда я захожу на сайт, то ячейки формы ввода естественно пустые и стандартно выводится все записи с постраничной навигацией. Это работает!
Мне нужно что бы была возможность искать абонента по улице и с учетом его фамилии.
вот намример я зашел на сайт, выбрал улицу, естественно увидел список всех абонентов, но из этих абонентов(этой же улици), я хочу найти абонента по фамилии.
Либо наоборот, лопустим я нипушу фимилию "Кравченко" их мне выдаст 100 шт, но из этих 100 чел мне нужны только те которые живуь на некоторой улице. вот этого я добится не могу.
 

dimagolov

Новичок
видимо надо добавить в запрос условие по улице, чтобы она включалась в запрос, разве не логично?
 

ArkDoom

Новичок
Возми через гет что тебе нада для поиска, очисти с помощью
$Street = htmlspecialchars($_GET['Street']);
Потом эти перменные правильно пропиши для запроса например
if ($FC != '') { $whereSql .= 'street > '. $Street. ' AND '; }
Потом сделай переменную WHERE

ну и сам запрос
$query = mysql_query("SELECT * FROM Таблица ". $whereSql. " ORDER BY ID LIMIT ".$startRec.");


Это все примерное, хотя я на самом деле почти все тебе и описал )))) только поменять значения и правильно дописать код.

P.S. Я в програмированние пару месяцев, могу что-то не то начирикать)

-~{}~ 18.04.10 19:37:

$startRec ..... ну это сколько записей выводить страничку) можешь взять эту переменную из своей постраничной навигации
 

Фанат

oncle terrible
Команда форума
PHP:
$w=array();
if (!empty($_GET['rooms'])) $w[]="rooms='".mysql_real_escape_string($_GET['rooms'])."'";
if (!empty($_GET['space'])) $w[]="space='".mysql_real_escape_string($_GET['space'])."'";
if (!empty($_GET['max_price'])) $w[]="price < '".mysql_real_escape_string($_GET['max_price'])."'";


if (count($w)) $where="WHERE ".implode(' AND ',$w); else $where='';
$query="select * from table $where";
 

antonim

Новичок
подключение к БД просто убивает. Если уж вы не пользуетесь фреймворками, то хотя бы вынесите в отдельный класс подключение к БД и используйте паттерн синглтон чтоб объекты не плодить! Да обрати внимание фанат подсказывает "mysql_real_escape_string" стоки без этого пхать низя, если не хошь получить sql инжекцию. И зачем тебе "strtoupper" ты можешь пояснить? :)) Или у тя база постгрешная? Если б я увидел де-нить запись типа "3apros error", я бы очень расстроился... :(
 

motobyba

Новичок
Автор оригинала: *****
PHP:
$w=array();
if (!empty($_GET['rooms'])) $w[]="rooms='".mysql_real_escape_string($_GET['rooms'])."'";
if (!empty($_GET['space'])) $w[]="space='".mysql_real_escape_string($_GET['space'])."'";
if (!empty($_GET['max_price'])) $w[]="price < '".mysql_real_escape_string($_GET['max_price'])."'";


if (count($w)) $where="WHERE ".implode(' AND ',$w); else $where='';
$query="select * from table $where";
то есть, в этом куске кода, если я не ошибаюсь (а я могу((( ), создается массив, в который загоняются данные, введенные в $_GET, далее происходит формирование запроса в соответствии тем данными, которые есть в массиве $w?
 

motobyba

Новичок
Передалал код *****а, но не могу разобратся какой вид будет запроса если введу фамилию и улицу.

PHP:
<?
include ("connect_db.php"); /*Соединяемся с БД*/
if (empty ($_GET['v_surname']))
{
	include ("find.php");
}
else 
{
	
	$w=array(); 
	if (!empty($_GET['v_surname'])) $w[]="surname '".mysql_real_escape_string($_GET['v_surname'])."'"; 
	if (!empty($_GET['v_street'])) $w[]="street '".mysql_real_escape_string($_GET['v_street'])."'"; 


	if (count($w)) $where="WHERE ".implode(' AND ', $w); else $where=''; 
	$query="SELECT * FROM 'telbook' $where";
	print_r ($w);
	$result = mysql_query($query) or die("3apros error");
}
?>

в таком варианте при вводе улици и фамилии получаю: Array ( [0] => surname 'Кравченко' [1] => street 'Одесская' ) 3apros error

print_r ($w); эт я для наглядности, чтобы видеть что творится в массивее.
 

Фанат

oncle terrible
Команда форума
разумеется у тебя будет запрос еррор.
в начале ты писал запрос без ошибок, а теперь зачем-то стал с ошибками.
 

motobyba

Новичок
сделал print_r($query); и в итоге имею вот такой запрос:

SELECT * FROM 'telbook' WHERE surname 'Кравченко' AND street 'Одесская'

не могу переделать код так, чтоб между surname и 'Кравченко' вставилось LIKE. да и запутался уже с этим запросом(((((((

вот такой запрос мне нужно получить: $query="SELECT * FROM `telbook` WHERE `street` LIKE 'Одесская' AND `surname` LIKE '%Кравченко%'";
 

Фанат

oncle terrible
Команда форума
поставь не LIKE, а =
в коде, который формирует эти строки

зачем ты написал имя таблицы в кавычках тоже осталось для меня загадкой.
 

Фанат

oncle terrible
Команда форума
в таком запросе для улицы надо ставить равно, а для фамилии - лайк.

Но я все равно не понимаю, какие здесь могут быть трудности, если код не сложнее первого упражнения по пхп:

$name="Вася";
echo "Привет, ".$name;
 

motobyba

Новичок
во всем разобрался, поиск работает отлично. Спасибо за помощь!
 
Сверху