具有一个或多个(多个)参数的搜索表单

编程入门 行业动态 更新时间:2024-10-08 00:28:32
本文介绍了具有一个或多个(多个)参数的搜索表单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我已经掌握了基础知识,在其中创建了两个文件,一个是用户输入搜索参数的搜索表单,另一个是输入文件的搜索结果文件.为了简单起见,我们将搜索表单文件指定为search.php,将结果页面指定为results.php.

I've gotten the basics down, where I've created two files, the search form where a user inputs search parameters, and the results file that cranks out inputted items. For the sake of simplicity we'll designate the search form file as search.php and the results page as results.php.

清理了标签礼节,以使阅读更顺畅.

Cleaned up tab etiquette for smoother reading.

<?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或所有需要的项是).我认为我需要重新考虑两个文件中的逻辑,但是我愿意接受您(这个很棒的社区)可能提出的任何想法或建议!任何建议/指导将不胜感激.

So, essentially I would like to rewrite the above whereas a user can input one or more parameters, and the desired result is returned (e.g. both name and college - &name=x&college=y OR all items if need be). I'm thinking i'll need to rethink the logic in both files, but I'm open to any ideas or suggestions you, this wonderful community, might have! Any advice/guidance would be greatly appreciated.

推荐答案

动态构建WHERE子句.我推荐的方法是将每个条件放入数组,然后使用implode()串联所有条件,并根据需要将它们与AND或OR连接.

Build the WHERE clause dynamically. My recommended approach is to push each condition onto an array, and then use implode() to concatenate all the conditions, connecting them with AND or OR as is your preference.

$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);

然后按照原始代码显示结果.

Then display the results as in your original code.

while ($student = $stmt->fetch()) { ... }

更多推荐

具有一个或多个(多个)参数的搜索表单

本文发布于:2023-11-26 23:03:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1635569.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   表单   参数

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!