Попытка создать запрос sql с использованием флажков

Я немного новичок в sql, но я считаю, что это должно сработать. Я делаю это шаг за шагом, так что это еще не полный код, но я столкнулся с проблемой. В основном то, что я пытаюсь сделать, это использовать массив, созданный в форме:

<form action="search.php" method="post"> <input type="checkbox" name="features[]" value="Texture" >Textures<br /> <input type="checkbox" name="features[]" value="Items" >Items<br /> <input type="checkbox" name="features[]" value="GUI" >Gui<br /> </form 

И создайте то, что будет в конечном итоге быть запросом для моей базы данных. Вот код PHP:

 <?php $button = $_POST['submit']; $features = $_POST['features']; if ($button){ //connect mysql_connect("server","username","password"); mysql_select_db("rdm"); foreach ($features){ $x++; if ($x=1) $construct .= "feature LIKE '$features[$x]'"; else $construct .= " OR feature LIKE '$features[$x]'"; } $construct = "SELECT * FROM Textures WHERE '$construct'; echo $construct; ?> 

Мое понимание заключается в том, что это должно вызывать переменную $ construct, в которой будет содержаться текст «SELECT * FROM Textures WHERE function LIKE …», а затем первое значение в массиве функций, за которым следуют другие значения.

Любая помощь в том, почему это не работает, будет фантастической! Как я уже сказал, я довольно новичок в этом, так жаль, если это глупая ошибка.

Заранее спасибо!

Строка запроса будет сгенерирована неправильно:

 if ($x=1) 

Это не сравнение, оно устанавливает x в 1, поэтому ваш запрос не будет иметь никаких условий «ИЛИ». Лучший способ генерации запросов – это:

 $query_conditions = array() foreach($_POST['features'] as $feature) { $query_conditions[] = "'" . mysql_real_escape_string($feature) . "'" } $where_in_clause = implode(',', $query_conditions); $query = "SELECT * FROM Textures WHERE feature IN ($where_in_clause)"; 

Попробуй это:

 // implode the features array into a string, adding quotes $featuresString = "'".implode("','", $features)."'"; // build the query $construct = "SELECT * FROM Textures WHERE feature IN (".$featuresString.")"; 

У вас есть пара синтаксических ошибок. Примечательно, что строка с SQL не закрывает двойную кавычку или использует точку с запятой в конце строки. Также есть недостающая скобка в конце вашего блока if .

Этот код выполнит задание, как указано:

 $button = isset($_POST['submit']) ? true : false; $features = isset($_POST['features']) ? $_POST['features'] : false; if ($button && is_array($features)) { $construct = 'SELECT * FROM Textures WHERE feature IN ("'.implode('","', $features ).'")'; echo $construct; }