Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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 如果输入值为空,则mysql显示全部_Php_Mysql - Fatal编程技术网

Php 如果输入值为空,则mysql显示全部

Php 如果输入值为空,则mysql显示全部,php,mysql,Php,Mysql,我有一个带有3个输入字段的查询,如果填写了一个或多个、两个或全部3个输入,我希望查询显示结果。所以,我尝试了使用is null,但它不起作用,或者我可以使用and/or查询来实现这一点 $sql = "SELECT * FROM profiles"; $sql .= " WHERE (profilename = '". $_POST["profilename"] ."' OR profilename IS NULL) "; $sql .= " AND (ort = '". $_P

我有一个带有3个输入字段的查询,如果填写了一个或多个、两个或全部3个输入,我希望查询显示结果。所以,我尝试了使用is null,但它不起作用,或者我可以使用and/or查询来实现这一点

$sql = "SELECT * FROM profiles";
    $sql .= " WHERE (profilename = '". $_POST["profilename"] ."' OR profilename IS NULL) ";
    $sql .= " AND (ort = '". $_POST["ort"] ."' OR ort IS NULL) ";
    $sql .= "AND (jahren = '" . $_POST["alter"] . "' OR jahren IS NULL) ";

非常感谢你的帮助

试试这个:

$sql = "
    SELECT * FROM profiles
    WHERE (profilename = '$_POST[profilename]' OR profilname = NULL)
    OR (ort = '$_POST[ort]' OR ort = NULL)
    OR (jahren = '$_POST[alter]' OR jahren = NULL)
";
建议:

$sql = "
    SELECT * FROM profiles
    WHERE (profilename = '$_POST[profilename]' OR profilname = NULL)
    OR (ort = '$_POST[ort]' OR ort = NULL)
    OR (jahren = '$_POST[alter]' OR jahren = NULL)
";
$string=“Test$Test也”
优于
$string=“Test”$测试。“还”。
仅当您添加
”时,对于
“否”


已编辑。

在发送查询之前,检查是否填写了任何输入字段:

if ( isset($_POST['profilename']) || isset($_POST['ort']) || isset($_POST['alter']) ){
    $clause = "where ";
    $conds = [];
    if (!empty($_POST['profilename'])) $conds[] = "profilename = '{$_POST['profilename']}'";
    if (!empty($_POST['ort'])) $conds[] = "ort = '{$_POST['ort']}'";
    if (!empty($_POST['alter'])) $conds[] = "alter = '{$_POST['alter']}'"; 
    if(count($conds) > 0){
       $clause .= (count($conds) == 1)? $conds[0] : implode(' AND ',$conds);
        $sql = "SELECT * FROM profiles " . $clause;
        ...
        // sending query
    }

}

我会将您的代码更新为以下内容:

$sql = "SELECT * FROM profiles WHERE 1=1";
/* We use 'WHERE 1=1' so that we can chain all of our filters after this
using 'AND' (or 'OR' in other situations) regardless of whether we are using the first of these filters or not */

if(isset($_POST["profilename"]) && $_POST["profilename"] != "") 
     $sql .= " AND profilename = '". $_POST["profilename"] ."'";

if(isset($_POST["ort"]) && $_POST["ort"] != "") 
     $sql .= " AND ort = '". $_POST["ort"] ."'";

if(isset($_POST["alter"]) && $_POST["alter"] != "") 
     $sql .= " AND jahren = '" . $_POST["alter"] . "'";
这将检查每个变量,然后再将其包括在查询中。 对于其他POST变量,只需复制并以相同格式粘贴它们

另一方面,我建议使用预先准备好的语句,而不是内联转储POST变量,以避免SQL注入攻击等


阅读此处的更多信息:

不要使用“AND”和“use”或“OR”,因为即使填写了一个字段,您也希望显示结果。感谢您的输入。此sql部分有效。仅当我在ort和alter中输入内容时,它才起作用。但如果仅使用profilename等,则不起作用。