尝试使用复选框创建SQL查询

时间:2011-02-14 19:37:17

标签: php 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 feature LIKE ...然后是features数组中的第一个值,后跟其他值。

任何帮助,为什么这不起作用将是太棒了!正如我所说的那样,如果这是一个愚蠢的错误,我很陌生。

提前致谢!

3 个答案:

答案 0 :(得分:3)

您的查询字符串将生成错误:

if ($x=1)

这不是比较,它将x设置为1,因此您的查询中没有“OR”条件。生成查询的更好方法是:

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

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

你有几个语法错误。值得注意的是,带有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;
}