PHP选择所有等于1的变量

时间:2014-07-23 13:31:57

标签: php

我试图让SQL查询变得动态。

以下是我采取的步骤:

第1步:

//Here the user sets which table fields will be used:
<input type="checkbox" name="id" value="1"> ID
<input type="checkbox" name="name" value="1"> name
<input type="checkbox" name="email" value="1"> email

第2步:

//Here I see what fields the user wants to use and set a variable to 1
<?php 
if (isset($_POST['id']) && $_POST['id'] == "1")
{
    $form_id='1';
}
//etc etc
?>

第3步:

//And finally here's the sql query
$sql = mysql_query("select * from mytable");

现在我需要将用户选择的字段设置为查询。

例如,如果用户仅选中 <{strong> idname,那么它应如下所示:

$sql = mysql_query("select id, name from $table");

最好的方法是什么?

3 个答案:

答案 0 :(得分:3)

为什么不将所有字段名称推送到数组中而不是设置不同的变量?

$fields = [];
if(isset($_POST['id']) && $_POST['id'] == 1) {
    $fields[] = 'id';
}

然后你应该能够将数组一起内爆以获得你的选择列:

$fields = implode(', ', $fields);

另外,@ h2ooooo是正确的,请避免使用mysql_函数。它们被删除,将在PHP的未来版本中删除。

答案 1 :(得分:1)

基本解决方案是检查设置了哪些参数并等于1,如果是这样的话,将列名称推送到数组中。

然后,您可以遍历数组并将字段连接到查询,使其动态

此处最大的问题是您使用mysql_* deprecated函数。我建议使用PDO,因为我发现它们使用起来既舒适又方便,但mysqli也可行。

使用PDO和mysqli,您可以使用prepared-statements 防止注射的最佳方法,所以请使用它们。

<强>解决方案

使用ternary运算符,我们可以检查设置了哪些参数,并相应地指定字段名称。

$id = isset($_POST['id']) && $_POST['id'] == 1 ? 'id' : null;
$name = isset($_POST['name']) && $_POST['name'] == 1 ? 'name' : null;
$email = isset($_POST['email']) && $_POST['email'] == 1 ? 'email' : null;

我这样做是因为我发现三元运算符更漂亮而不是多个if语句。

让我们构建一个包含我们刚创建的变量的数组:

$parameters = array($id, $name, $email);

只需检查哪些字段不是null,我们就可以轻松构建列数组。

$columns = array();
foreach($parameters as $column)
{
    if($column != null)
    {
        $columns[] = $column;
    }
}

最后,我们可以将implode列放在一起,用逗号分隔:

$activeColumns = implode(",", $columns);

因此,您可以使用$activeColumns作为查询的一部分,然后建议您在之后做好准备。

答案 2 :(得分:1)

只需你可以使用! empty()函数而不是isset()&amp;&amp; $ _POST [ 'ID'] == 1

$select_fields = array();
if(!empty($_POST['id']))
    $select_fields[] = 'id';
if(!empty($_POST['name']))
    $select_fields[] = 'name';
if(!empty($_POST['email']))
    $select_fields[] = 'email';

$query_fields = implode(', ', $select_fields);

$sql = mysql_query("select $query_fields from $table");