PHP选择所有等于1的变量

PHP选择所有等于1的变量,php,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">

我试图使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
//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
?>
//And finally here's the sql query
$sql = mysql_query("select * from mytable");
现在,我需要将用户选择的字段设置为查询

例如,如果用户仅检查id和
名称
,则应如下所示:

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

执行此操作的最佳方法是什么?

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

$fields = [];
if(isset($_POST['id']) && $_POST['id'] == 1) {
    $fields[] = 'id';
}
然后,您应该能够将数组一起内爆,以获得您的select列:

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

另外,@h2oooo是正确的,请避免使用
mysql\uuu
函数。它们已被删除,并将在未来的PHP版本中删除。

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

$fields = [];
if(isset($_POST['id']) && $_POST['id'] == 1) {
    $fields[] = 'id';
}
然后,您应该能够将数组一起内爆,以获得您的select列:

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

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

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

然后可以循环遍历数组并将字段连接到查询,使其成为动态的

这里最大的问题是您使用的函数是。我建议使用,因为我觉得它们使用起来舒适方便,但也是可行的

使用PDO和mysqli,您将能够使用预防注射的最佳方法,因此请使用它们

解决方案

使用操作符,我们可以检查设置了哪些参数,并相应地分配字段名

$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;
    }
}
最后,我们可以将列放在一起,用逗号分隔:

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

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

基本解决方案是检查哪些参数已设置且等于1,如果是这样,则将列名推入数组

然后可以循环遍历数组并将字段连接到查询,使其成为动态的

这里最大的问题是您使用的函数是。我建议使用,因为我觉得它们使用起来舒适方便,但也是可行的

使用PDO和mysqli,您将能够使用预防注射的最佳方法,因此请使用它们

解决方案

使用操作符,我们可以检查设置了哪些参数,并相应地分配字段名

$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;
    }
}
最后,我们可以将列放在一起,用逗号分隔:

$activeColumns = implode(",", $columns);
因此,您可以使用
$activeColumns
作为查询的一部分,然后建议您稍后准备。

只需使用即可!空()函数而不是isset()&&$\u 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");
简单的你可以使用!空()函数而不是isset()&&$\u 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");

. 它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果你选择PDO,我发现你的问题有点不清楚,但编辑后我觉得更容易理解。。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果你选择PDO,。我发现你的问题有点不清楚,但编辑后我认为它更容易理解。这或多或少是@watcher回答的,但我已经开始写答案,所以我让它留下来。这或多或少是@watcher回答的,但我已经开始写答案,所以我让它留下来。