Php 使用函数和if-else的多个搜索表单

Php 使用函数和if-else的多个搜索表单,php,mysql,function,if-statement,Php,Mysql,Function,If Statement,嗨,我正在使用PHP、HTML、SQL和函数创建一个多搜索表单,例如,我有3个搜索字段Firstname、lastname和email。我会让用户从其中任何一个输入,因此我需要if-else语句,但要满足所有条件,需要大量if-else,因此我考虑使用函数输出表,并在数据库查询后将其放入if-else中。但是,如果我这样做,它似乎无法在数据库中搜索,它将输出“0个结果”,但如果我删除该函数并将其放在脚本的末尾,我可以在db中搜索,但它无法检测到我的else条件,即“您尚未输入任何值” 函数che

嗨,我正在使用PHP、HTML、SQL和函数创建一个多搜索表单,例如,我有3个搜索字段Firstname、lastname和email。我会让用户从其中任何一个输入,因此我需要if-else语句,但要满足所有条件,需要大量if-else,因此我考虑使用函数输出表,并在数据库查询后将其放入if-else中。但是,如果我这样做,它似乎无法在数据库中搜索,它将输出“0个结果”,但如果我删除该函数并将其放在脚本的末尾,我可以在db中搜索,但它无法检测到我的else条件,即“您尚未输入任何值”

函数checkres()
{
//获取对数据库的查询
$result=mysqli\u查询($conn,$sql);
//检查结果
如果(mysqli_num_行($result)>0)
{
//标题
回声“;
回声“;
回显“图像ID”;
呼应“姓氏”;
呼应“名字”;
回应“电子邮件”;
回显“电话号码”;
回声“;
//每行的输出数据
while($row=mysqli\u fetch\u assoc($result))
{
回声“;
回显“$row['ID']”;
回显“$row['LastName']”;
回显“$row['FirstName']”;
回显“$row['Email']”;
回显“$row['PhoneNumber']”;
回声“;
}
回声“;
}否则{
回显“0结果”;
}
}
如果(!empty($sfname)&&empty($slname)&&empty($semail))
{
$sql=“从用户名类似“%”的用户列表中选择*”$sfname.“%”;
checkres();
}
如果(!empty($sfname)&&!empty($slname)&&empty($semail))则为else
{
$sql=“从用户名类似“%”和姓氏类似“%”的用户列表中选择*”;
checkres();
}
其他的
{
回显“您尚未输入任何值”;
}
mysqli_close($conn);
?>
这是新的

<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());
}


function checkres()
    {
    //Get query on the database
        $result = mysqli_query($conn, $sql);

        //Check results
        if (mysqli_num_rows($result) > 0)
        {
        //Headers
            echo "<table border='1' style='width:100%'>";
        echo "<tr>";
            echo "<th>Image ID</th>"; 
        echo "<th>Lastname</th>";
        echo "<th>Firstname</th>";
        echo "<th>Email</th>";
        echo "<th>PhoneNumber</th>";
        echo "</tr>";

      //output data of each row
          while($row = mysqli_fetch_assoc($result))
            {
            echo "<tr>";
                      echo "<td>".$row['ID']."</td>";
                      echo "<td>".$row['LastName']."</td>";
                      echo "<td>".$row['FirstName']."</td>";
                      echo "<td>".$row['Email']."</td>";
                      echo "<td>".$row['PhoneNumber']."</td>";
                    echo "</tr>";

            }
                  echo "</table>";
        } else {
            echo "0 results";
        }
    }

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);


        $sql = "select * from Userlist";

        for($i = 0; $i < count($arr); $i++){

            if(!empty($arr[$i])){

                if($i > 0){
                    $sql.= " AND ".$arr[$i];
                }else{
                    $sql.= " WHERE ".$arr[$i];
                }
            }
        }

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

checkres();
mysqli_close($conn);

?>

名字:

姓氏:

电子邮件:


在我看来,您所做的有点令人困惑(程序流结构的n个术语有点奇怪)。 您可以简单地为输入字段使用一个变量数组,然后通过该数组循环生成SQL语句。因此,您的HTML表单如下所示:

<form  method="post" action="#"  id="searchform">
  First Name:<br />
  <input  type="text" name="queryArray[FirstName]" />
  <br />Last Name:<br />
  <input type="text" name="queryArray[LastName]" />
  <br />Email:<br />
  <input type="text" name="queryArray[Email]" />
  <br />
  <input  type="submit" name="submit" value="Search" />
</form>
    function checkres()
{
    //Get query on the database
    $result = mysqli_query($conn, $sql);

    //Check results
    if (mysqli_num_rows($result) > 0)
    {
        //Headers
        echo "<table border='1' style='width:100%'>";
        echo "<tr>";
        echo "<th>Image ID</th>";
        echo "<th>Lastname</th>";
        echo "<th>Firstname</th>";
        echo "<th>Email</th>";
        echo "<th>PhoneNumber</th>";
        echo "</tr>";

        //output data of each row
        while($row = mysqli_fetch_assoc($result))
        {
            echo "<tr>";
            echo "<td>".$row['ID']."</td>";
            echo "<td>".$row['LastName']."</td>";
            echo "<td>".$row['FirstName']."</td>";
            echo "<td>".$row['Email']."</td>";
            echo "<td>".$row['PhoneNumber']."</td>";
            echo "</tr>";

        }
        echo "</table>";
    } else {
        echo "0 results";
    }
}

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);


    $sql = "select * from Userlist";

    for($i = 0; $i < count($arr); $i++){

        if(!empty($arr[$i])){

            if($i > 0){
                $sql.= " AND ".$arr[$i];
            }else{
                $sql.= " WHERE ".$arr[$i];
            }
        }
    }

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

checkres();
mysqli_close($conn);

?>
下面列出了SQL生成的工作原理示例。您有一些错误:

$sql = "select * from Userlist where FirstName LIKE '%". $sfname  ."%' AND LastName LIKE '%". %slname. "%'";
您有%slname而不是$slname

另一个错误是在程序流程中。在两种情况下,将达到您的else条件,即“您尚未输入任何值”:

  • 当所有字段都留空时
  • 当所有字段都充满值时
  • 你不会想要的。您必须改进逻辑,并在此基础上构建查询,可以这样做:

    <form  method="post" action="#"  id="searchform">
      First Name:<br />
      <input  type="text" name="queryArray[FirstName]" />
      <br />Last Name:<br />
      <input type="text" name="queryArray[LastName]" />
      <br />Email:<br />
      <input type="text" name="queryArray[Email]" />
      <br />
      <input  type="submit" name="submit" value="Search" />
    </form>
    
        function checkres()
    {
        //Get query on the database
        $result = mysqli_query($conn, $sql);
    
        //Check results
        if (mysqli_num_rows($result) > 0)
        {
            //Headers
            echo "<table border='1' style='width:100%'>";
            echo "<tr>";
            echo "<th>Image ID</th>";
            echo "<th>Lastname</th>";
            echo "<th>Firstname</th>";
            echo "<th>Email</th>";
            echo "<th>PhoneNumber</th>";
            echo "</tr>";
    
            //output data of each row
            while($row = mysqli_fetch_assoc($result))
            {
                echo "<tr>";
                echo "<td>".$row['ID']."</td>";
                echo "<td>".$row['LastName']."</td>";
                echo "<td>".$row['FirstName']."</td>";
                echo "<td>".$row['Email']."</td>";
                echo "<td>".$row['PhoneNumber']."</td>";
                echo "</tr>";
    
            }
            echo "</table>";
        } else {
            echo "0 results";
        }
    }
    
    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);
    
    
        $sql = "select * from Userlist";
    
        for($i = 0; $i < count($arr); $i++){
    
            if(!empty($arr[$i])){
    
                if($i > 0){
                    $sql.= " AND ".$arr[$i];
                }else{
                    $sql.= " WHERE ".$arr[$i];
                }
            }
        }
    
    }else{
        echo "You must enter at least one value";
    }
    
    checkres();
    mysqli_close($conn);
    
    ?>
    
    函数checkres()
    {
    //获取对数据库的查询
    $result=mysqli\u查询($conn,$sql);
    //检查结果
    如果(mysqli_num_行($result)>0)
    {
    //标题
    回声“;
    回声“;
    回显“图像ID”;
    呼应“姓氏”;
    呼应“名字”;
    回应“电子邮件”;
    回显“电话号码”;
    回声“;
    //每行的输出数据
    while($row=mysqli\u fetch\u assoc($result))
    {
    回声“;
    回显“$row['ID']”;
    回显“$row['LastName']”;
    回显“$row['FirstName']”;
    回显“$row['Email']”;
    回显“$row['PhoneNumber']”;
    回声“;
    }
    回声“;
    }否则{
    回显“0结果”;
    }
    }
    如果(!empty($sfname)| |!empty($slname)| |!empty($semail)){
    $emailQueryPart=!empty($semail)?“类似于“$semail”的电子邮件:”;
    $lastnameQueryPart=!empty($slname)?“类似于“%$slname%”的LastName:“”;
    $firstnameQueryPart=!empty($sfname)?“类似于“%$sfname%”的名字:“”;
    $arr=数组($emailQueryPart、$lastnameQueryPart、$firstnameQueryPart);
    $sql=“从用户列表中选择*”;
    对于($i=0;$i0){
    $sql.=“和”$arr[$i];
    }否则{
    $sql.=“其中”$arr[$i];
    }
    }
    }
    }否则{
    echo“您必须输入至少一个值”;
    }
    checkres();
    mysqli_close($conn);
    ?>
    
    谢谢,我必须更改echo$sql并放置$result=mysqli\u查询($conn,$sql);不客气。。。是的,你现在就必须执行它。替换你的部件代码(if-else-if语句)并运行你的checkers函数。对不起,我有点困惑(我对此很不了解)我似乎无法在数据库中搜索,你能检查一下我在上面代码中放置的代码吗?我编辑了我的帖子我编辑了我的答案。现在复制并粘贴。您可能无法搜索db表,因为缺少带有LIKE语句的%符号。似乎我仍然无法在db中搜索,即使我执行了此“%$semail%”,它只返回0个结果
        function checkres()
    {
        //Get query on the database
        $result = mysqli_query($conn, $sql);
    
        //Check results
        if (mysqli_num_rows($result) > 0)
        {
            //Headers
            echo "<table border='1' style='width:100%'>";
            echo "<tr>";
            echo "<th>Image ID</th>";
            echo "<th>Lastname</th>";
            echo "<th>Firstname</th>";
            echo "<th>Email</th>";
            echo "<th>PhoneNumber</th>";
            echo "</tr>";
    
            //output data of each row
            while($row = mysqli_fetch_assoc($result))
            {
                echo "<tr>";
                echo "<td>".$row['ID']."</td>";
                echo "<td>".$row['LastName']."</td>";
                echo "<td>".$row['FirstName']."</td>";
                echo "<td>".$row['Email']."</td>";
                echo "<td>".$row['PhoneNumber']."</td>";
                echo "</tr>";
    
            }
            echo "</table>";
        } else {
            echo "0 results";
        }
    }
    
    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);
    
    
        $sql = "select * from Userlist";
    
        for($i = 0; $i < count($arr); $i++){
    
            if(!empty($arr[$i])){
    
                if($i > 0){
                    $sql.= " AND ".$arr[$i];
                }else{
                    $sql.= " WHERE ".$arr[$i];
                }
            }
        }
    
    }else{
        echo "You must enter at least one value";
    }
    
    checkres();
    mysqli_close($conn);
    
    ?>