2015-01-14 118 views
1

嗨我创建一个多重搜索表单使用PHP,HTML,SQL与功能的使用,例如我有3个搜索字段名字,姓氏和电子邮件。我会让用户从其中任何一个输入,因此我将需要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); 

?> 

回答

0

你要做的就是在我看来,我的其他条件有点混乱(和程序的流程结构有点奇怪)。 您可以简单地为输入字段使用一个变量数组,然后遍历数组来生成您的SQL语句。所以,你的HTML表单是这样的:

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

最后:如果你定义这两个功能,这当然可以在你的PHP代码块放置在任何地方

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

更清晰的结构将是你将不得不调用功能,根据用户的活动:

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

SQL生成作品是如何列出一个例子here

+0

谢谢你这一点,但它似乎没有工作 –

0

你有几个误区:

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

您有%slname而不是$ slname。

另一个错误是在程序流程中。你的其他条件,这是在说:“你还没有进入任何值”将达到两种情况:

  1. 当所有字段为空
  2. 当所有字段填入值。

你不想那样。你要提高你的逻辑,并建立基于一个查询,可以这样进行:

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

?> 
+0

感谢这一点,我必须更改echo $ sql并放置$ result = mysqli_query($ conn,$ sql); –

+0

不客气......是的,你只需要现在就执行它。替换你的零件代码(if-else if语句)并运行你的跳棋功能。 – Whirlwind

+0

对不起,我有点困惑(即时通讯非常noob在这)我似乎无法在数据库中搜索,你能检查我已经放在你的代码上面的代码?我编辑了我的帖子 –