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

时间:2015-01-14 23:09:14

标签: php mysql function if-statement

您好我使用PHP,HTML,SQL和函数创建多个搜索表单,例如我有3个搜索字段名字,姓氏和电子邮件。我会让用户输入其中的任何一个,因此我需要if else语句,但是为了能够满足所有条件,它会花费很多if else,所以我想使用一个函数输出表和在数据库上查询之后将其放在if else中。但它似乎无法在数据库中搜索,如果我这样做它输出“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) )
{
     $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);

?>

这是新的

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

?>

2 个答案:

答案 0 :(得分:0)

在我看来,你做的事情有点令人困惑(而且程序的流程结构有点奇怪)。 您可以简单地为输入字段使用变量数组,然后遍历数组以生成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>

如果你定义了这两个函数,那么一个更清晰的结构就是当然可以放在PHP代码块的任何地方:

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

最后,您必须根据用户活动调用函数:

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

列出了here

列出SQL生成工作原理的示例

答案 1 :(得分:0)

您有一些错误:

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

你有%slname而不是$ slname。

另一个错误在于程序流程。你的其他条件,就是说:&#34;你还没有输入任何值&#34;将在两种情况下达成:

  1. 当所有字段都留空时
  2. 当所有字段都填充值时。
  3. 你不想要那个。您必须改进逻辑,并基于此构建查询,并且可以这样做:

        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);
    
    ?>
    
相关问题