我已经了解了基本知识,在这里我创建了两个文件,用户输入搜索参数的搜索表单和输出输入项的结果文件。为了简单起见,我们将搜索表单文件指定为search.php,结果页面指定为results.php。
搜索.php
<?php
if (!empty($_POST['id']) && isset($_POST['id'])) {
header("Location: ?m=search.results&id=".$_POST['id']."");
} elseif (!empty($_POST['major']) && isset($_POST['major'])) {
header("Location: ?m=search.results&major=".$_POST['major']."");
} elseif (!empty($_POST['college']) && isset($_POST['major'])) {
header("Location: ?m=search.results&college=".$_POST['college']."");
} elseif (!empty($_POST['name']) && isset($_POST['name'])) {
header("Location: ?m=search.results&name=".$_POST['name']."");
} elseif (!empty($_POST['id']) && !empty($_POST['college']) && !empty($_POST['major'])
&& isset($_POST['submit']) && !empty($_POST['name'])) {
echo "<div class='alert alert-danger'>No students found. Please try different parameters.</div>";
}
?>
<h4>Search</h4>
<form method="POST">
<table width="100%">
<tr><td>ID:</td><td> <input type="text" name="id" class="form-control"></textarea></td></tr>
<tr><td>Name:</td><td> <input type="text" name="name" class="form-control"></textarea></td></tr>
<tr><td>Major:</td><td><select name="major" class="form-control"><option></option><?php echo majorSelect(); ?></select></td></tr>
<tr><td>College:</td><td><select name="college" class="form-control"><option></option><?php echo collegeSelect(); ?></select></td></tr>
<tr><td colspan="2"><input type="submit" name="submit" value="Search" class="btn btn-lrg btn-primary" style="margin-top:10px;"></td></tr>
</table>
</form>
结果.php
<!-- Begin Search Parameters -->
<?php
if (isset($_GET['id'])) {
$students = $db->query("SELECT * FROM `user_details` a, `user` b WHERE a.uid = b.id AND a.uid = '".$_GET['id']."'");
while ($student = $students->fetch()) {
echo '
<tr>
<td>'.$student['uid'].'</td>
<td>'.$student['name'].'</td>
<td>'.$student['major'].'</td>
<td>'.$student['college'].'</td>
<td><a href="?m=profile&id='.$student['id'].'" style="display:block">View</a></td>
</tr>';
}
} elseif (isset($_GET['major'])) {
$students = $db->query("SELECT * FROM `user_details` a, `user` b WHERE a.uid = b.id AND a.major = '".$_GET['major']."'");
while ($student = $students->fetch()) {
echo '
<tr>
<td>'.$student['uid'].'</td>
<td>'.$student['name'].'</td>
<td>'.$student['major'].'</td>
<td>'.$student['college'].'</td>
<td><a href="?m=profile&id='.$student['id'].'" style="display:block">View</a></td>
</tr>';
}
} elseif (isset($_GET['college'])) {
$students = $db->query("SELECT * FROM `user_details` a, `user` b WHERE a.uid = b.id AND a.college = '".$_GET['college']."'");
while ($student = $students->fetch()) {
echo '
<tr>
<td>'.$student['uid'].'</td>
<td>'.$student['name'].'</td>
<td>'.$student['major'].'</td>
<td>'.$student['college'].'</td>
<td><a href="?m=profile&id='.$student['id'].'" style="display:block">View</a></td>
</tr>';
}
} elseif (isset($_GET['name'])) {
$name = $_GET['name'];
$students = $db->query("SELECT * FROM `user_details` a, `user` b WHERE a.uid = b.id AND b.name LIKE '%". $name . "%'");
while ($student = $students->fetch()) {
echo '
<tr>
<td>'.$student['uid'].'</td>
<td>'.$student['name'].'</td>
<td>'.$student['major'].'</td>
<td>'.$student['college'].'</td>
<td><a href="?m=profile&id='.$student['id'].'" style="display:block">View</a></td>
</tr>';
}
}
因此,基本上我想重写上面的内容,而用户可以输入一个或多个参数,然后返回所需的结果(例如,name和college-&name=x&college=y或需要时返回所有项)。
2条答案
按热度按时间lo8azlld1#
构建
WHERE
动态子句。我推荐的方法是将每个条件推送到一个数组中,然后使用implode()
连接所有条件,将它们与AND
或者OR
这是你的喜好。然后以原始代码的形式显示结果。
xoefb8l82#
如果您不打算更改数据库中的任何内容—您只是选择—请继续使用get而不是post。这样做的好处是它允许您将url保存为搜索字符串。您也可以刷新搜索而不获取重新提交后警报。您只需要确保在将值发送到数据库之前对其进行参数化。我通常会通过sanitize函数来发送这些值,比如regex,它确保在需要字母时只有字母,或者在需要数字时只有数字。
在同一页上(全部搜索):(我将为您概述这一点。)
现在你可以显示你的数据了。
编辑:我写了答案的另一半,然后他又写了下一半,所以我就把它合并了。。。
此外,这方面的下一个复杂级别是将php从搜索文件中取出,并将其放入另一个文件中。当您在表单中按下search按钮时,您将使用ajax来调用php元素。然后php文件将通过ajax返回结果。您可以返回预先格式化的html或json,并让jquery之类的东西为您显示它。