【问题标题】:PHP /MYSQL Search Form Displaying Empty Results显示空结果的 PHP /MYSQL 搜索表单
【发布时间】:2019-07-19 00:35:12
【问题描述】:

请问各位,我的代码有什么问题,我尝试从我的数据库中获取搜索数据,如下所示

学生资料如下

注册号:全名:教师:程序:级别:组。

在 HTML 搜索页面上

<html> 
<h2> Enter your matric number to connect to others studying your course </h2>
<form action="demo.php" method="post">
<b> ReG </b><input type="text" Name="find">
<input type="submit"  value="Submit" />

</form>
</html>

PHP 端

<table border="1">
<tr>
<th>Student Full Name</th>
<th> Faculty</th>
<th> Program</th>
<th> Entry Year</th>
<th> Study Group</th>
<th> Group Members Contact</th>
<th> Group Leader Contacts</th>
</tr>



<?php 

$conn=mysqli_connect("localhost", "root", "", "student");
// Check connection
if($conn=== false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

 $q = $_POST['find'];


if ($q == "")
{
echo "<p>You forgot to enter a search term!!!";
exit;
}
$sql = "SELECT * FROM study_circle WHERE matric LIKE $q ";
$result = mysqli_query($conn, $sql);

if ($result)
 {
  while($row = mysql_fetch_array($result))
 {





        echo "<tr>";
        echo  "<td>";

    echo  $row['full_name'];
    echo  "</td>";
    echo  "<td>";
    echo  $row['faculty'];
    echo "</td>";
    echo  "<td>";
    echo  $row['program'];
    echo  "</td>";
    echo  "<td>";
    echo  $row['entry_year'];
    echo "</td>";
    echo  "<td>";
    echo  $row['study_group'];
    echo  "</td>";
    echo  "<td>";
    echo  $row['group_members'];
    echo  "</td>";
    echo "<td>";
    echo  $row['group_leader'];
    echo  "</td>";
    echo  "</tr>";
    echo  "<br/>";




    }
} else {
    echo "0 results";
}

mysqli_close($conn);
?>

每次我尝试它都会带来 Empty 结果,即使我已经填充了数据库

现在它在我的本地主机系统上,请任何好心人帮忙,我只是编程新手。我很乐意解决这个问题

【问题讨论】:

  • 也许,$q 是一个字符串。
  • var_dump($row) 看看它显示了什么。如果它显示null[](空数组),则您的SQL 查询有问题。

标签: php mysql database forms search


【解决方案1】:

您的代码误解了 false 值的含义:

if ($result)
{
    //...
} else {
    echo "0 results";
}

$result 中的false 值并不意味着搜索未找到任何内容,这意味着查询因错误而失败。要获取错误,请使用mysqli_error:

if ($result)
{
    //...
} else {
    echo "There was an error: " . mysqli_error($conn);
}

在这种情况下,错误可能是您的 SQL 代码中的语法错误,因为您直接将用户输入连接到 SQL 代码。这也称为SQL injection vulnerability。有一些很好的信息可以帮助您开始使用correcting that here,包括具体如何使用query parameters with the LIKE operator here。在最简单的情况下,您将希望使用带有查询参数的准备好的语句,而不是像现在这样使用字符串插值。

【讨论】:

    【解决方案2】:

    尝试在搜索字符串的开头和结尾添加通配符:

    $sql = "SELECT * FROM study_circle WHERE matric LIKE '%$q%'";
    

    【讨论】:

      【解决方案3】:

      您将需要获取搜索数据的行数。这将保证记录是否存在 例如。

      $rowcount = mysqli_num_rows($result);
      

      然后用它执行if语句。

      见下面的代码。

      <?php 
      
      $conn=mysqli_connect("localhost", "root", "", "student");
      // Check connection
      if($conn=== false){
          die("ERROR: Could not connect. " . mysqli_connect_error());
      }
      
       $q = $_POST['find'];
      
      
      if ($q == "")
      {
      echo "<p>You forgot to enter a search term!!!";
      exit;
      }
      $sql = "SELECT * FROM study_circle WHERE matric LIKE $q ";
      $result = mysqli_query($conn, $sql);
      $rowcount = mysqli_num_rows($result);
      
      if( $rowcount ){
      
      $row = mysql_fetch_array($result);
      
      
      
      
      
              echo "<tr>";
              echo  "<td>";
      
          echo  $row['full_name'];
          echo  "</td>";
          echo  "<td>";
          echo  $row['faculty'];
          echo "</td>";
          echo  "<td>";
          echo  $row['program'];
          echo  "</td>";
          echo  "<td>";
          echo  $row['entry_year'];
          echo "</td>";
          echo  "<td>";
          echo  $row['study_group'];
          echo  "</td>";
          echo  "<td>";
          echo  $row['group_members'];
          echo  "</td>";
          echo "<td>";
          echo  $row['group_leader'];
          echo  "</td>";
          echo  "</tr>";
          echo  "<br/>";
      
      
          exit;
      }else{
       echo "0 results";
      
      }
      }
      
      
      mysqli_close($conn);
      ?>
      

      【讨论】: