Php 使用“选择”下拉列表筛选搜索

Php 使用“选择”下拉列表筛选搜索,php,html,Php,Html,我写了这段代码,它使用选择下拉菜单过滤搜索。我有一个搜索框,但我的问题是:如果我在搜索框中放了一些东西,即使我搜索了数据库中存在的数据,它也不会显示任何东西 下拉列表正在运行,但如果我尝试选择这三个选项中的3个选项,选择12年级以外的,ICT,A,它将显示该部分中有12年级和ICT但B的记录。我没有任何数据上有A,所以我希望它什么也不显示,因为A不存在,但它显示的数据有一个不同的部分A是部分btw <div class = "records"> <table width

我写了这段代码,它使用选择下拉菜单过滤搜索。我有一个搜索框,但我的问题是:如果我在搜索框中放了一些东西,即使我搜索了数据库中存在的数据,它也不会显示任何东西

下拉列表正在运行,但如果我尝试选择这三个选项中的3个选项,选择12年级以外的,ICT,A,它将显示该部分中有12年级和ICT但B的记录。我没有任何数据上有A,所以我希望它什么也不显示,因为A不存在,但它显示的数据有一个不同的部分A是部分btw

<div class = "records">
    <table width ="600" border = "1" cellpadding ="1" cellspacing ="1">
        <tr>
            <th>Last Name</th>
            <th>First Name</th>
            <th>Middle Name</th>
            <th>Grade</th>
            <th>Strand</th>
            <th>Section</th>
        </tr>

<?php
if (isset($_POST['search'])) {

    $box = $_POST['box'];
    $box = preg_replace("#[^0-9a-z]#i","",$box);
    $grade =$_POST['grade'];
    $strand = $_POST['strand'];
    $section = $_POST['section'];

    $sql = "SELECT * FROM student WHERE grade ='$grade' or track ='$strand' or section = '$section' or fname ='%$box%'";
    $result = mysqli_query($conn, $sql);

    while($row = mysqli_fetch_assoc($result))
    {
        echo "<tr>";
        echo "<td>".$row['lname']."</td>";
        echo "<td>".$row['fname']."</td>";
        echo "<td>".$row['mname']."</td>";
        echo "<td>".$row['grade']."</td>";
        echo "<td>".$row['track']."</td>";
        echo "<td>".$row['section']."</td>";
        echo "</tr>";
    }      
  }              
else {          
}

?>
然后是前端

link rel = "stylesheet" href ="style.css">
<body>
  <form action ="../pages/section.php" method="POST" >
    <div class = "view">
      <input type = "text" name="box" placeholder = "search here">
      <label class = grade2></label>
      <select class = "grade" name = "grade">
        <option value ="" >=====Grade=====</option>
        <option value ="Grade11">Grade 11</option>
        <option value ="Grade12">Grade 12</option>
      </select>
      <select class = "strand" name = "strand">
         <option >=====Strand=====</option>
         <option value ="GAS">GAS</option>
         <option value ="ICT">ICT</option>
         <option value ="STEM">STEM</option>
         <option value ="HUMSS">HUMMSS</option>
         <option value ="ABM">ABM</option>
       </select>
       <select class = "section" name = "section">
         <option value ="1">=====Section=====</option>
         <option value ="A">A</option>
         <option value ="B">B</option>
         <option value ="C">C</option>
         <option value ="D">D</option>
         <option value ="E">E</option>
       </select> 
       <input type="submit" name="search" value= "Submit">
顺便说一句,它们在同一个文件中,请提前感谢

or section = '$section' 
将显示与$section不匹配的记录。 如果不需要,则必须使用和,让我们假设$box=foo

当在fname=“%$box%”的查询中执行此操作时,它将逐字搜索字符串%foo%

如果要使用通配符,必须使用LIKE运算符而不是=。其中,类似“%$box%”的fname将搜索包含foo的字符串

除此之外,你的问题对我来说是非常开放的。考虑使用

您正在删除$\u POST['box']中不是字母数字的字符,但这还不够。这是非常糟糕的,你不能搜索欧比万或欧比万,这将是搜索欧比万


没有任何东西可以阻止用户按F12键并更改下拉列表中的值以插入SQL代码。

我对php不熟悉,是的,我仍然在学习准备语句,我没有在代码中放入准备语句,因为在我处理完整个网站后,我仍然无法处理php中的每个语句,我想我会把它作为我的收尾工作,不过我愿意学习,如果你有任何建议,我很乐意接受,先生:@CidI从学生那里尝试了这个代码“$sql=SELECT*,其中fname像“$box%”或mname像“%$box%”或lname像“%$box%”,grade像“$strand”或section像“$section”;但它不起作用我不知道你为什么找到了解决方案,或者你想让我们看看吗?还是一样,我还没有找到解决方案,长官@dassounCan你可以给我们你为请求设置的参数,以及你认为不应该发送的记录吗?什么参数,长官?我想让这个函数像这样工作,如果我点击12年级,它会在A部分显示所有12年级,但它也会显示12年级的B和C部分