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