If else 语句生成正确的 sql 语句

If else statement that generate correct sql statement

您好,我正在创建一个多重搜索表单,其中可以检测该字段是否没有任何值,并且如果有 1 个或多个字段有输入,它仍然会进行搜索。但我似乎无法为此生成正确的 sql 语句。

    <html>
          <head>
            <title>Search  Contacts</title>
          </head>
          <body>

            <h3>Search  Contact Details</h3>
            <form  method="post" action="#"  id="searchform">
              First Name:<br>
                  <input  type="text" name="fname">
              <br>Last Name:<br>
                  <input type="text" name="lname">
              <br>Email: <br>
                  <input type="text" name="email">
              <br>
              <input  type="submit" name="submit" value="Search">
            </form>
        <?php
        $sfname = $_POST["fname"];
        $slname = $_POST["lname"];
        $semail = $_POST["email"];
        $servername = "xxx";
        $username = "xxx";
        $password = "xxx";
        $dbname = "xxx";

        // Create connection
        $conn = mysqli_connect($servername, $username, $password, $dbname);

        // Check connection
        if (!$conn) {
            die("Connection failed: " . mysqli_connect_error());

        if(!empty($sfname) || !empty($slname) || !empty($semail)){

                $emailQueryPart = !empty($semail) ? "Email LIKE '%$semail%'" : "";
                $lastnameQueryPart = !empty($slname) ? "LastName LIKE '%$slname%'" : "";
                $firstnameQueryPart = !empty($sfname) ? "FirstName LIKE '%$sfname%'" : "";

                $arr = array($emailQueryPart, $lastnameQueryPart,$firstnameQueryPart);
        $needsAnd = false;
    for ($i = 0; $i < count($arr); $i++) {
        if ($arr[$i] != "") {
            if ($needsAnd) {
                $sql .= " AND ";
            }

            $needsAnd = true;
            $sql .= " " . $arr[$i];
        }

    }           
            }else{
                echo "You must enter at least one value";
            }



    ?>
    </body>
    </html>

已知问题。
1. "Email" 值不显示,即使我输入一个值,它只显示

"select * from Userlist where "

2。如果我只输入名字并提前显示,我可能错误地放置了用于添加 "AND" 的 if 语句 样本结果是

"select * from Userlist where AND FirstName LIKE '%test%' "

使用数组的内置功能:

$queryParts = array();
if (!empty($fname)) { $queryParts[] = "FirstName LIKE '%$fname%'"; }
if (!empty($lname)) { $queryParts[] = "LastName LIKE '%$lname%'"; }
if (!empty($email)) { $queryParts[] = "Email LIKE '%$email%'"; }

if (!empty($queryParts)) {
    $sql = "select * from Userlist where (";
    $sql .= implode(") and (", $queryParts);
    $sql .= ");";
} else {
    // display error
}

array() 方法创建一个空数组,$queryParts[] 语法附加到所述数组的末尾,implode 方法将数组元素放在一起(参见 http://php.net/manual/de/function.implode.php).

试试这个解决方案:

    $emailQueryPart = ($_POST['email'] != "") ? "Email LIKE '%" . $_POST['email'] . "%'" : "";
    $lastnameQueryPart = ($_POST['lname'] != "") ? "LastName LIKE '%" . $_POST['lname'] . "%'" : "";
    $firstnameQueryPart = ($_POST['fname'] != "") ? "FirstName LIKE '%" . $_POST['fname'] . "%'" : "";

    $arr = array($emailQueryPart, $lastnameQueryPart, $firstnameQueryPart);

    $sql = "select * from Userlist where";
    $needsAnd = false;
    for ($i = 0; $i < count($arr); $i++) {
        if ($arr[$i] != "") {
            if ($needsAnd) {
                $sql .= " AND ";
            }

            $needsAnd = true;
            $sql .= " " . $arr[$i];
        }

    }
} else {
    echo "You must enter at least one value";
}

echo $sql;

您可以使用内爆函数加入 $arr 值:

$email = filter_input(INPUT_POST, 'email');
$lname = filter_input(INPUT_POST, 'lname');
$fname = filter_input(INPUT_POST, 'fname');
$emailQueryPart = ($email) ? "Email LIKE '%{$email}%'" : null;
$lastnameQueryPart = ($lname) ? "LastName LIKE '%{$lname}%'" : null;
$firstnameQueryPart = ($fname != "") ? "FirstName LIKE '%{$fname}%'" : null;

$arr = array($emailQueryPart, $lastnameQueryPart, $firstnameQueryPart);

$sql = "select * from Userlist where ";
$sql .= implode(' AND ', array_filter($arr));
echo $sql;