我已经掌握了基础知识,在其中创建了两个文件,一个是用户输入搜索参数的搜索表单,另一个是输出输入项目的结果文件。为了简单起见,我们将搜索表单文件指定为search.php,将结果页面指定为results.php。
编辑:清理选项卡的礼节,使阅读更顺畅。
search.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>
results.php
<?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或所有需要的项)。我想我需要重新考虑两个文件中的逻辑,但是我愿意接受您(这个很棒的社区)可能有的任何想法或建议!任何建议/指导将不胜感激。
最佳答案
动态生成WHERE
子句。我推荐的方法是将每个条件推送到一个数组上,然后使用implode()
连接所有条件,并根据需要将它们与AND
或OR
连接。
$wheres = array();
$params = array();
if (!empty($_GET['id'])) {
$wheres[] = 'a.uid = :uid';
$params[':uid'] = $_GET['id'];
}
if (!empty($_GET['major'])) {
$wheres[] = 'a.major = :major';
$params[':major'] = $_GET['major'];
}
if (!empty($_GET['name'])) {
$wheres[] = 'b.name LIKE :name';
$params[':name'] = '%'.$_GET['name'].'%';
}
// And so on for all parameters
$sql = "SELECT *
FROM user_details AS a
JOIN user AS b ON a.uid = b.id";
if (!empty($wheres)) {
$sql .= " WHERE " . implode(' AND ', $wheres);
}
$stmt = $db->prepare($sql);
$stmt->execute($params);
然后按照原始代码显示结果。
while ($student = $stmt->fetch()) {
...
}
关于php - 具有一个或多个(多个)参数的搜索表单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39540022/