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

Php 生成正确sql语句的If-else语句,php,if-statement,Php,If Statement,嗨,我正在创建一个多搜索表单,其中可以检测字段是否没有任何值,并且如果有一个或多个字段有输入,仍将进行搜索。但我似乎无法为此生成正确的sql语句 <html> <head> <title>Search Contacts</title> </head> <body> <h3>Search Con

嗨,我正在创建一个多搜索表单,其中可以检测字段是否没有任何值,并且如果有一个或多个字段有输入,仍将进行搜索。但我似乎无法为此生成正确的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>
二,。如果我只输入firstname并提前显示,我可能会错误地放置If语句以添加“AND” 样本结果为

"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[]
语法附加到所述数组的末尾,而
内爆方法将数组元素放在一起(请参见)。

使用数组的内置功能:

$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[]
语法附加到所述数组的末尾,而
内爆
方法将数组元素放在一起(请参见)。

尝试以下解决方案:

$emailQueryPart=($\u POST['email']!=“”)吗?“类似“%”的电子邮件$_发布['email']。"%'" : "";
$lastnameQueryPart=($\u POST['lname']!=”)?姓氏,如“%”$_POST['lname']。"%'" : "";
$firstnameQueryPart=($_POST['fname']!=”)?“名字像“%”$_POST['fname']。"%'" : "";
$arr=数组($emailQueryPart、$lastnameQueryPart、$firstnameQueryPart);
$sql=“从用户列表中选择*”;
$needsAnd=false;
对于($i=0;$i
尝试以下解决方案:

$emailQueryPart=($\u POST['email']!=“”)吗?“类似“%”的电子邮件$_发布['email']。"%'" : "";
$lastnameQueryPart=($\u POST['lname']!=”)?类似“%”的LastName$_POST['lname']。"%'" : "";
$firstnameQueryPart=($_POST['fname']!=”)?“名字像“%”$_POST['fname']。"%'" : "";
$arr=数组($emailQueryPart、$lastnameQueryPart、$firstnameQueryPart);
$sql=“从用户列表中选择*”;
$needsAnd=false;
对于($i=0;$i
您可以使用内爆函数加入
$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;

您可以使用内爆函数连接
$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;

我假设变量已经从$u POST中提取出来并经过消毒。修正了空白。我现在已经发布了我所有的代码,以避免混淆实际上是一个$POST,@ PJW,我应该从IF(空的($SFNEX)”!空的($SLNEX),空($SIMAIL)开始删除所有的东西。{@Prix OP一些如何将POST值分配到$fname,$lname,$email中。是的,我的代码片段应该替换最初显示的代码块,即整个
f(!empty($sfname)| | | |{…}
block。我刚刚看到你的变量被称为
sfname,
,而我使用了
fname,
@ShaifulIslam,当一个人没有发布这样的信息并声称他们从表单中没有得到任何结果时,人们首先假设的是他们没有正确地阅读
$\u post
,因此我引用了这句话,但是我看到了现在我已经更新了他的问题了。我假设变量已经从$xPOST和SAILICATION中提取出来。修正了空白。我现在已经发布了我所有的代码,以避免混淆实际上是一个$POST,@ PJW,我应该从IF(空的($SFNEX)”!空的($SLIN),空($SIMAIL)开始删除所有的东西。{@Prix OP一些如何将POST值分配到$fname,$lname,$email中。是的,我的代码片段应该替换最初显示的代码块,即整个
f(!empty($sfname)| | | |{…}
block。我刚刚看到你的变量被称为
sfname,
,而我使用了
fname,
@ShaifulIslam,当一个人没有发布这样的信息并声称他们从表单中没有得到任何结果时,人们首先假设的是他们没有正确地阅读
$\u post
,因此我引用了这句话,但是我看到了pjw建议的内爆函数似乎更优雅:)我现在从db中添加了实际的查询代码块,并将值显示为一个表,但它似乎不起作用……pjw建议的内爆函数似乎更优雅:)我现在添加了实际的查询代码块如果有用,你可以给答案打分,我也很高兴;)如果有用,你可以给答案打分,我也很高兴;)