Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 来自$\u POST的SQL SELECT语句_Php_Html_Mysql - Fatal编程技术网

Php 来自$\u POST的SQL SELECT语句

Php 来自$\u POST的SQL SELECT语句,php,html,mysql,Php,Html,Mysql,我正试图根据通过html表单收集的信息构建一个SQLSELECT语句,该表单存储在$\u POST数组中。我的困难在于语句必须根据用户的输入而变化 我有两个下拉菜单,它们的值分别存储在$\u POST['flow']和$\u POST['tables']中。到目前为止还不错 然后我有4个国家复选框,15个年份复选框。第一个存储在数组$\u POST['country']中,第二个存储在$\u POST['year']中 我尝试通过foreach循环构建SQL语句,如下所示: <?php

我正试图根据通过html表单收集的信息构建一个SQL
SELECT
语句,该表单存储在
$\u POST
数组中。我的困难在于语句必须根据用户的输入而变化

我有两个下拉菜单,它们的值分别存储在
$\u POST['flow']
$\u POST['tables']
中。到目前为止还不错

然后我有4个国家复选框,15个年份复选框。第一个存储在数组
$\u POST['country']
中,第二个存储在
$\u POST['year']

我尝试通过foreach循环构建SQL语句,如下所示:

<?php 
//Define SQL SELECT statement
    $sql = "SELECT * FROM ".$_POST['tables']." WHERE FlowType = '".$_POST['flow']."' AND (";

    foreach ($_POST['country'] as $value) {
        $sql .= "Reporter = '$value' OR ";
    }

    $sql = substr($sql, 0, -3);
    $sql .= ") AND (";

    foreach ($_POST['year'] as $value) {
        $sql .= "TradeYear = '$value' OR ";
    }

    $sql = substr($sql, 0, -4);
    $sql .= ")";

    echo $sql;
?>

忽略我上面的评论,这应该是可行的(尽管完全不安全):


Use
WHERE IN()
此代码不会在生产中使用,对吗?这是一些网络开发101课程,对吗?紧张地笑着,满头大汗profusely@MonkeyZeus,这绝对是一个web开发人员101级的问题。但您必须从某个地方开始,在数据库被恶意用户删除后,恢复数据库将更加复杂。这段代码充满了漏洞,如果它移动得太快,就会发出汽笛声。使用事先准备好的陈述。这不难做到。您可以命名您使用的每个占位符,然后将其绑定到使用关联数组的占位符。如果您想了解如何更安全地执行此操作的示例,请查看ORM是如何类似的,或者允许您将代码表示为一系列可选附加到查询的子句。谢谢。正如我所说,我的编程知识非常基础。“我怎样才能让它更安全呢?”方济各文士问道
<?php 
//Define SQL SELECT statement
$sql = "SELECT * FROM ".$_POST['tables']." WHERE FlowType = '".$_POST['flow'];

if(isset($_POST['country']) && is_array($_POST['country']) && count($_POST['country']) > 0)
{
    $sql.= " AND Reporter in ('".implode("','", $_POST['country'])."')";
}

if(isset($_POST['year']) && is_array($_POST['year']) && count($_POST['year']) > 0)
{
    $sql.= " AND TradeYear in ('".implode("','", $_POST['year'])."')";
}

echo $sql;
?>