Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Упрощение поиска по критериям
 
 автор: Uncle   (25.12.2005 в 21:17)   письмо автору
 
 

Здравствуйте. У меня возникла следующая проблема: при разработке алгоритма поиска в БД MySQL необходимо учесть все возможные сочетания из 18 критериев поиска. Писать для каждого сочетания, к примеру 0-ый, 5-ый и 9-ый, отдельный IF достаточно муторно, и я решил все строки для IF генерить в зависимости от заданного в форме поиска сочетания критериев.

                                                        for ($i=0;$i<=17;$i++)
                                                            {
                                                                if (($a[$i]!="Не важно")&($a[$i]!="no"))
                                                                    {
                                                                        $c[$i]="(\$b[".$i."]==\$a[".$i."])";
                                                                    }
                                                                elseif (($a[$i]=="Не важно")or($a[$i]=="no"))
                                                                    {
                                                                        $c[$i]="(\$b[".$i."]!=\$a[".$i."])";
                                                                    }
                                                            }
                                                        
                                                        $s="( ";
                                                        
                                                        for ($i=0;$i<=17;$i++)
                                                            {
                                                                if ($c[$i]!="")
                                                                    {
                                                                        if ($i==17) $s.=$c[$i];
                                                                        elseif ($i<17) $s.=$c[$i]." & ";
                                                                    }
                                                            }
                                                        
                                                        $s.=" )";

                                                        if (($s)==true) include("search3.php");



Вся строчка условий собирается в переменной $s и имеет вид:


( ($b[0]==$metro1) & ($b[1]!=$type1) & ($b[2]!=$street) & ($b[3]!=$name) & ($b[4]!=$phone) & ($b[5]!=$house) & ($b[6]!=$korp) & ($b[7]!=$beer) & ($b[8]!=$kofe) & ($b[9]!=$second) & ($b[10]!=$vine) & ($b[11]!=$icecream) & ($b[12]!=$vhod) & ($b[13]!=$page) & ($b[14]!=$kitchen) & ($b[15]!=$show1) & ($b[16]!=$dop) & ($b[17]!=$smoke) )


Видно, что из формы передается в скрипт один критерий - 0-ой. По нему и происходит сравнение значений для записи из БД, заранее записанных в массив $b[], и значений переменных, полученных из формы.

Но вот не задача...
 if ($s===true) include("search3.php"); 
не срабатывает. Подскажите как мне строку такого вида передать в виде аргумента в IF.

   
 
 автор: cheops   (26.12.2005 в 02:00)   письмо автору
 
   для: Uncle   (25.12.2005 в 21:17)
 

Так не пройдёт - вам необходимо выполнить код, а для этого лучше воспользоваться функцией eval()
<?php
  
eval("<?php
     if (
$s) include("search3.php");
  ?>"
);
?>

   
 
 автор: Uncle   (26.12.2005 в 02:39)   письмо автору
 
   для: cheops   (26.12.2005 в 02:00)
 

Спасибо за подсказку, только не заработало.

eval("if ($s) require(\"search3.php\");");

   
 
 автор: cheops   (26.12.2005 в 13:33)   письмо автору
 
   для: Uncle   (26.12.2005 в 02:39)
 

А... у нас же символы $ не экранированы в $s - прогоните содержимое перемнной через функцию str_replace()
<?php
  $s 
str_replace("$","\\$",$s);
  eval(
"if ($s) require(\"search3.php\");");
?>

   
 
 автор: Uncle   (29.12.2005 в 00:32)   письмо автору
 
   для: cheops   (26.12.2005 в 13:33)
 

Огромное спасибо. Очень помог. Все теперь работает. Не досмотрел я за экранированием.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования