Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.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 如何组合2个不同的过滤器_Php_Mysql_Mysqli_Filter - Fatal编程技术网

Php 如何组合2个不同的过滤器

Php 如何组合2个不同的过滤器,php,mysql,mysqli,filter,Php,Mysql,Mysqli,Filter,我为日期间隔和不同级别0、1、2创建了这个简单的过滤器。到目前为止,我有以下代码: if(isset($_POST['filtersubmit'])){ $datex = str_replace('/', '-', $_POST['firstdate']); $date1 = date("Y-m-d", strtotime($datex)); $datey = str_replace('/', '-', $_POST['lastdate']); $date2 =

我为日期间隔和不同级别0、1、2创建了这个简单的过滤器。到目前为止,我有以下代码:

if(isset($_POST['filtersubmit'])){
    $datex = str_replace('/', '-', $_POST['firstdate']);
    $date1 = date("Y-m-d", strtotime($datex));
    $datey = str_replace('/', '-', $_POST['lastdate']);
    $date2 = date("Y-m-d", strtotime($datey));
    $projects = $_POST['projekt'];



    if(isset($date1) && isset($date2)){
        $query = mysqli_query($conn, "SELECT * FROM zapasy WHERE datum BETWEEN 
        '$date1' AND '$date2' ORDER BY id DESC");
    }  


    if($projects == 0){
        $query = mysqli_query($conn, "SELECT * FROM zapasy WHERE projekt = '0' ORDER BY id DESC") or die(mysqli_errno($conn). '-'. mysqli_error($conn));
    } elseif($projects == 1){
        $query = mysqli_query($conn, "SELECT * FROM zapasy WHERE projekt = '1' ORDER BY id DESC") or die(mysqli_errno($conn). '-'. mysqli_error($conn));
    } elseif($projects == 2){
        $query = mysqli_query($conn, "SELECT * FROM zapasy WHERE projekt = '2' ORDER BY id DESC") or die(mysqli_errno($conn). '-'. mysqli_error($conn));
    } 
}

现在,如果我只选择其中一个过滤器,它工作得很好,但是如果我同时需要间隔和级别过滤器,它就不工作了。我真的不知道怎么做。我真的非常感谢您的帮助。

我会使用类似的方法,使用预先准备好的语句来保护您免受SQL注入的影响。基本上,如果$u POST数组中存在WHERE子句、参数和参数类型,我们将从每个过滤器中形成它们的数组。然后将这些参数内插到查询中,绑定参数并执行查询

if (isset($_POST['filtersubmit'])) {
    $params = array();
    $paramtypes = array();
    $wheres = array();
    if (isset($_POST['firstdate'], $_POST['lastdate'])) {
        $date1 = date_create_from_format('m/d/Y', $_POST['firstdate']);
        $date2 = date_create_from_format('m/d/Y', $_POST['lastdate']);
        if (!empty($date1) && !empty($date2)) {
            array_push($params, $date1->format('Y-m-d'), $date2->format('Y-m-d'));
            array_push($paramtypes, 's', 's');
            array_push($wheres, 'datum BETWEEN ? AND ?');
        }
    }
    if (isset($_POST['projekt'])) {
        $project = $_POST['projekt'];
        if (is_numeric($project) && $project >= 0 && $project <= 2) {
            array_push($params, $project);
            array_push($paramtypes, 'i');
            array_push($wheres, 'projekt = ?');
        }
    }
    $sql = 'SELECT * FROM zapasy';
    if (count($wheres)) {
        $sql .= ' WHERE ' . implode(' AND ', $wheres);
    }
    $sql .= ' ORDER BY id DESC';
    $stmt = $conn->prepare($sql) or die($conn->error);
    if (count($wheres)) {
        $stmt->bind_param(implode('', $paramtypes), ...$params);
    }
    $stmt->execute() or die($stmt->error);
    // bind results
    $stmt->bind_result(/* variables corresponding to each field in SELECT */);
    while ($stmt->fetch()) {
        // do something with the data
    }
}

当sql查询中有WHERE条件时,为什么要使用php if else?您可以在查询中传递php变量too@ZainFarooq您的意思是$query=mysqli\u query$conn,从zapasy中选择*其中projekt1=“$projects”按id DESC;排序??对但是为了防止sql注入,您应该使用pdo或preparedstatements@ZainFarooqMySQLi可以很好地使用准备好的语句。PDO不会自动阻止SQL注入,您需要绑定这些值-正如您在MySQLi中所需要的那样。@Qirel Yes。带绑定值的pdo最终查询是哪个变量?最终查询是在$sqlIn中的。它以什么方式不起作用?您是否收到任何错误消息?是否选择了错误的数据?或者???我没有得到任何数据注意,对于准备好的语句,您也需要绑定结果值。你在这么做吗?请参见我的编辑和