MySQL SELECT и опция за търсачка.

MooN_BoY

Registered
В процеса на изучаване на PHP & MySQL срещнах един проблем и то не точно проблем, а по-скоро въпрос.
Пример :
Код:
"SELECT * FROM jivotni WHERE vid  LIKE '%$dumata%'"
* - Думите jivotni и vid са примерни :)
Това нещо трябва да бъде част от нещо като търсачка.
Може ли да се направи така, че примерно да се избира от потребителя по някакъв начин какво да търси. Да речем, че в ДБ имам jivotni, planeti, razsteniq и за да не правя за всяка таблица нов файл за търсене, да може да се променя от потребителя този критерии. Също така дали е възможно да търси да речем както в случая е вид, потребителя да има избор м/у vid, cvqt, masa и т.н.?
Дано някой да успее да помогне :)
 
Да видим дали съм те разбрал :)
Код:
<?php if(!isset($_POST['search'])) { ?>
<form action="" method="post">
Нещото <input type="text" name="value" value="" /> <br />
<select name="category">
	 <option value=""> Всичките </option>
	 <option value="jivotni"> Животни </option>
	 <option value="planeti"> Планети </option>
	 <option value="razsteniq"> Растения </option>
</select> <br /> 
Вид <input type="text" name="vid" value="" /> <br />
Цвят <input type="text" name="color" value="" /> <br />
Маса <input type="text" name="masa" value="" /> <br />
<input type="submit" name="search" value="Търси" /> </form>
<?php } else {
$mysql = "mysql_query(\"SELECT * FROM таблицата"; // тук започваме заявката 
$value = htmlspecialchars(addslashes($_POST['value'])); // вземаме търсенета стойност
$mysql .= " WHERE value='%$value%'"; // и започваме да прибавяме стойности към заявката , ако са зададени
$mysql .= ($_POST['category'] != NULL) ? " AND category = '".$_POST[category]."'" : ""; // ако е различно от празно поле - вземаме , ако е празно - оставяме го празно
$mysql .= ($_POST['vid'] != NULL) ? " AND vid LIKE '%".$_POST[vid]."%'" : ""; // ако е различно от празно поле - вземаме , ако е празно - оставяме го празно
$mysql .= ($_POST['color'] != NULL) ? " AND cvqt LIKE '%".$_POST[color]."%'" : ""; // ако е различно от празно поле - вземаме , ако е празно - оставяме го празно
$mysql .= ($_POST['masa'] != NULL) ? " AND masa LIKE '%".$_POST[masa]."%'" : ""; // ако е различно от празно поле - вземаме , ако е празно - оставяме го празно
$mysql .= "\");"; // тук е края на заявката , каквото било - било
echo $mysql; // и накрая тук може да я видиш заявката ти , какво представлява и да си я нагодиш
}
?>

Ако не ти е ясно , попитай да дообясняваме :>
 
http://code.activestate.com/recipes/125901/

$mysearch = new MysqlSearch;
$mysearch->setidentifier($pole); //Полето взимаш с GET/POST от потребителя
$mysearch->settable($table); //Таблицата също взимаш с GET/POST от потребителя
$results_array = $mysearch->find($search); //Думата за търсене
//Обработваш масива($results_array)
 
Може ли да се направи така, че примерно да се избира от потребителя по някакъв начин какво да търси.
Може. Така както слагаш променлива за стоиността на 'вид' така може и имената на таблиците и полетата да се подават като променливи. Тоест можеш да имаш следното:
Код:
$table = "jivotni";
$field = "vid";
$value = "zemnovodni"

$sql = "SELECT * FROM `{$table}` WHERE `{$field}` LIKE '%{$value}%'";

$query = mysql_query($sql);
Имай предвид че в заявката името на таблицата и името на полето са оградени с обратни кавички, а стойността която търсиш с нормални единични кавички. Така можеш да си сигурен че базата данни правилно ще разбере кое какво е.
 

Back
Горе