FireMaster
Guest
Поиск по БД с использованием большого количества полей
Здравствуйте, обитатели PHP Club`a, вот сравнительно недавно стал читать Ваш портал, за помощью никогда не обращался, так как всегда либо находил ответ на свой вопрос здесь, либо в комментариях на php.net, либо просто все получалось методом тыка Вот так методом проб и ошибок учу PHP... Но сейчас реально появилась нобходимость попросить помощи, возможно это уже где-то обсуждалось, я такой вариант не исключаю, но, как мне кажется, я просмотрел все темы форумов и перебрал всевозможные варианты ключевых слов и словосочетаний в функции поиска, поэтому если что-то похожее где-то было, ткните меня носом в эту тему, буду рад почитать. Надеюсь после такого длинного вступления кто-то еще читает этот пост , итак собственно вопрос: необходимо написать скрипт на PHP, который осуществляет поиск по базе данных MySQL. Но не все так просто, в качестве формы будет выступать форма в которой будет от 10 до 15 полей, в которые, соответственно, может быть введен или не введен параметр, надеюсь, что все кто это читают, поняли что я имею ввиду. Итак, имеются 2 файла: search.php и functions.php (поиск по БД это последняя часть небольшого интерфейса администратора над которым я работаю, все остальное я уже сделал). Теперь собственно сам код, все содержимое я приводить не буду, т.к. это бессмысленно, опишу лишь общие моменты. Итак, файл search.php: он разделен на 2 режима, первый это
здесь я думаю все понятно, далее идут форма и собственно само условие поиска и переменные:
здесь также все элементарно, берем введенные пользователем переменные и передаем их в functions.php функции search_candidates_in_profile. Вот содержимое этой функции:
здесь я думаю также все понятно, поэтому комментировать ничего не буду, знающие люди все поймут сами. И наконец привожу код второго режима файла search.php:
Здесь по моей задумке вызывается функция и обсчитываются результаты при помощи цикла:
Но, ничего не работает, иначе я бы не стал постить это сообщение, реакция скрипта такова, что после введения значений в форму поиска, скрипт начинает выполняться, но никогда не останавливается, т.е. такое впечатление что создается бесконечный цикл, который никогда не закончится. Данные в функцию передаются, естественно, без проблем, проблема в том, как их вытащить (я думаю здест моя проблема), мои предположения таковы, что у меня кривые руки и я что-то где-то не там разместил) да и еще вопрос, при редиректе на search.php?mode=result переменные теряются или нет ? Если теряются, то как сделать, чтобы не терялись ? Через сессию или есть еще варианты ? Мучаюсь уже третий день, перепробовал уйму вариантов... Если кто-то дочитал до конца это сообщение, то наверное Вам можно дать медаль за терпение Надеюсь на скорый ответ, с уважением FireMaster.
Здравствуйте, обитатели PHP Club`a, вот сравнительно недавно стал читать Ваш портал, за помощью никогда не обращался, так как всегда либо находил ответ на свой вопрос здесь, либо в комментариях на php.net, либо просто все получалось методом тыка Вот так методом проб и ошибок учу PHP... Но сейчас реально появилась нобходимость попросить помощи, возможно это уже где-то обсуждалось, я такой вариант не исключаю, но, как мне кажется, я просмотрел все темы форумов и перебрал всевозможные варианты ключевых слов и словосочетаний в функции поиска, поэтому если что-то похожее где-то было, ткните меня носом в эту тему, буду рад почитать. Надеюсь после такого длинного вступления кто-то еще читает этот пост , итак собственно вопрос: необходимо написать скрипт на PHP, который осуществляет поиск по базе данных MySQL. Но не все так просто, в качестве формы будет выступать форма в которой будет от 10 до 15 полей, в которые, соответственно, может быть введен или не введен параметр, надеюсь, что все кто это читают, поняли что я имею ввиду. Итак, имеются 2 файла: search.php и functions.php (поиск по БД это последняя часть небольшого интерфейса администратора над которым я работаю, все остальное я уже сделал). Теперь собственно сам код, все содержимое я приводить не буду, т.к. это бессмысленно, опишу лишь общие моменты. Итак, файл search.php: он разделен на 2 режима, первый это
PHP:
if($_GET['mode'] == "search" || !isset($_GET['mode']))
PHP:
if($_POST['search_candidat']) {
$surname = $_POST['surname'];
$name = $_POST['name'];
$otchestvo = $_POST['otchestvo'];
$otdel = $_POST['otdel'];
$vacancy = $_POST['vacancy'];
$resultat = $_POST['resultat'];
$result = $admin->search_candidates_in_profile($surname, $name, $otchestvo, $otdel, $vacancy, $resultat);
}
PHP:
function search_candidates_in_profile($surname, $name, $otchestvo, $otdel, $vacancy, $resultat) {
global $db_profile,$object;
$query = "SELECT * FROM $db_profile WHERE uid !=0";
if ($surname !="") {
$query .= " AND surname = '$surname'";
}
else
$query .= "";
if ($name !="") {
$query .= " AND name = '$name'";
}
else
$query .= "";
if ($otchestvo !="") {
$query .= " AND otchestvo = '$otchestvo'";
}
else
$query .= "";
if ($otdel !="") {
$query .= " AND otdel = '$otdel'";
}
else
$query .= "";
if ($vacancy !="") {
$query .= " AND vacancy = '$vacancy'";
}
else
$query .= "";
if ($resultat !="") {
$query .= " AND resultat = '$resultat'";
}
else
$query .= "";
$query .= " ORDER BY uid";
$result = $this->db->db_query($query);
if (mysql_num_rows($result) == 0) {
header ('Location: handlings.php?mode=noMatches');
}
else
$num_fields = mysql_num_fields($result);
$j=0;
$x=1;
while ($row = $this->db->db_fetch_array($result)) {
for($j=0;$j<$num_fields;$j++) {
$name = mysql_field_name($result, $j);
$object[$x][$name] = $row[$name];
} $x++;
}
mysql_free_result($result);
header ('Location: search.php?mode=result');
}
PHP:
elseif ($_GET['mode'] == "result") {
$admin->search_candidates_in_profile($surname, $name, $otchestvo, $otdel, $vacancy, $resultat);
}
$i=1;
$ii=count($object);
PHP:
for($i=1;$i<=$ii;$i++) {
здесь html тэги через которые выводится результат
}