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

Hi Im creating a multiple search form using PHP,HTML,SQL with the use of functions, for example I have 3 search fields Firstname, lastname and email. I would let the user input from any of those, therefore i would be needing the if else statement, but to be able to satisfy all conditions it would take a lot of if else, so i think of using a function to output the table and place it inside the if else after the query on the database. But it seems that it could not be able to search in the database if I do it like this it outputs "0 results", but if i remove the function and place it on the end of my script I am able to search in the db but it could not detect my else condition which is "You have not yet entered any values"

    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) )
{
     $sql = "select * from Userlist where FirstName LIKE '%". $sfname  ."%'" ;

checkres();

}

 else  if (!empty($sfname) && !empty($slname) && empty($semail))

{
  $sql = "select * from Userlist where FirstName LIKE '%". $sfname  ."%' AND LastName LIKE '%". %slname. "%'";

checkres();

}

else
{
   echo "You have not yet entered any values ";
}

mysqli_close($conn);

?>

This is the new one

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

?>

What you do is in my opinion a little bit confusing (and a little bit odd n terms of the program's flow structure). You can simply use an array of variables for your input fields and then loop through the array to generate your SQL statement. So your HTML form would look like this:

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

A more clear structure would be if you define these 2 functions, which of course can be placed anywhere in your PHP code block:

function createSql($queryArray) {
  if (is_array($queryArray)) {
    $sql = null;
    foreach ($queryArray as $key => $value) {
      if ($value != null ) {
      $addQuery = "`".$key."` LIKE '%".$value."%'";
      if ($sql == null)
        $sql = "SELECT * FROM `Userlist` WHERE ".$addQuery;
      else
        $sql = $sql." AND ".$addQuery;
    }
    return $sql;
  }
}

function checkres($sql) {
  // Create connection
  $conn = mysqli_connect($servername, $username, $password, $dbname);

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

  //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";

  // Close connection
  mysqli_close($conn);
}

Finally you will have to call the functions according to user activity:

if ($_POST != null) {
  $sql = createSql($_POST[queryArray]);
  checkres($sql);
}

An example how the SQL generation works is listed here

You have a few errors:

$sql = "select * from Userlist where FirstName LIKE '%". $sfname  ."%' AND LastName LIKE '%". %slname. "%'";

You have %slname instead of $slname.

Another mistake is in the program flow. Your else condition, which is saying :"You have not yet entered any values" will be reached in two cases:

  1. When all fields are left blank
  2. When all fields are filled with values.

You don't want that. You have to improve your logic, and build a query based on that, and that can be done like this:

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

?>