Создание запроса MySQL с использованием раскрывающихся списков форм PHP - если пользователь игнорирует раскрывающийся список, не выполнять фильтрацию по этому параметру - PullRequest
1 голос
/ 27 марта 2010

Я создаю простой запрос MySQL, который будет построен на основе выбора пользователем параметров из 2 раскрывающихся списков.

Проблема, с которой я столкнулся, заключается в том, что я бы хотел, чтобы каждый раскрывающийся список имел значение по умолчанию, что, если они фактически не выбирают параметр, не выполняйте фильтрацию по этому параметру.

Так что, если они входят и просто нажимают «Отправить», не выбирая из выпадающего списка, они должны видеть все. Если они входят и выбирают только одно из раскрывающихся списков, запрос в основном игнорирует фильтрацию по другому раскрывающемуся списку.

Я пытался сделать <OPTION VALUE='any'>Choose, но мой запрос не знал, что делать с 'any', и просто не дал результатов.

Вот мой код. Большое спасибо за любую помощь, которую вы можете оказать.

ФОРМА

<form method="POST"  action="<?php echo $_SERVER['REQUEST_URI']; ?>">


<select name="GameType"> 
<OPTION VALUE='any'>Choose Game Type
<option value="Game1">Option 1</option>
<option value="Game2">Option 2</option>
<option value="Game3">Option 3</option>
</select>


<select name="Instructor"> 
<OPTION VALUE='any'>Choose Instructor
<option VALUE="InstructorA">Instructor A</option>
<option value="InstructorB">Instructor B</option>
<option value="InstructorC">Instructor C</option>
</select>

<input type='submit' value='Search Videos'>  
        </form>

MYSQL

<?PHP

 connection stuff

$db_handle = mysql_connect($server, $user_name, $password);
$db_found = mysql_select_db($database, $db_handle);

if ($db_found) {
$SQL = "SELECT * FROM Videos WHERE GameType=\"{$_POST['GameType']}\" AND Instructor=\"{$_POST['Instructor']}\"";
$result = mysql_query($SQL);

while ($db_field = mysql_fetch_assoc($result)) {

echo $db_field['ShortDescription'] . ", ";
echo $db_field['LongDescription'] . ", ";
echo $db_field['GameType'] . ", ";
echo $db_field['NumberOfPlayers'] . ", ";
echo $db_field['Instructor'] . ", ";
echo $db_field['Stakes'] . ", ";
echo $db_field['UserPermissionLevel'] . ", ";
echo $db_field['DateCreated'] . "<BR>";

}

mysql_close($db_handle);

}
else {
print "Database NOT Found ";
mysql_close($db_handle);
}




?>

Ответы [ 3 ]

3 голосов
/ 27 марта 2010

На прошлой неделе я реализовал решение проблемы, аналогичной этой, используя технику, описанную в mikesdotnetting .В нем он описывает тестирование на наличие нулевой записи от пользователя в предложении WHERE, затем переходит к соответствию критериям.

Итак, чтобы сравнить его с вашим примером:

"SELECT * FROM Videos 
  WHERE (GameType IS NULL OR GameType = $_POST['GameType']) 
    AND (Intructor IS NULL OR Instructor = $_POST['Instructor'])"

Также обратите вниманиечто эта техника потребует от вас аннулировать выбранную вами опцию в:

<OPTION VALUE=''>Choose Game Type</option>
1 голос
/ 27 марта 2010

вы можете сделать что-то вроде этого:

$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";

Обратите внимание, что этот код записан для пустого значения (<OPTION VALUE=''>)

Также обратите внимание, что ваш код ужасно страдает от внедрения SQL

0 голосов
/ 27 марта 2010

Построение SQL-запроса в PHP без учета части в предложении where, если выбрано «any».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...