Я немного новичок в 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; }