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

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

我已经完成了基础工作,我创建了两个文件,一个用户输入搜索参数的搜索表单,以及一个运行输入项的结果文件。为了简单起见,我们将搜索表单文件指定为search.php,将结果页面指定为Resul.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>


因此,本质上,我想重写上面的内容,而用户可以输入一个或多个参数,然后返回所需的结果(例如,名称和学院名称=x&College=y或如果需要的话所有项目)。我想我需要重新思考这两个文件中的逻辑,但我愿意接受您的任何想法或建议,这个美妙的社区可能会有!如有任何建议/指导,将不胜感激。


胡说叔叔
浏览 521回答 3
3回答

守候你守候我

构建WHERE从句动态我推荐的方法是将每个条件推到数组上,然后使用implode()连接所有条件,并将它们连接到AND或OR这是你的喜好。$wheres&nbsp;=&nbsp;array();$params&nbsp;=&nbsp;array();if&nbsp;(!empty($_GET['id']))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;$wheres[]&nbsp;=&nbsp;'a.uid&nbsp;=&nbsp;:uid'; &nbsp;&nbsp;&nbsp;&nbsp;$params[':uid']&nbsp;=&nbsp;$_GET['id'];}if&nbsp;(!empty($_GET['major']))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;$wheres[]&nbsp;=&nbsp;'a.major&nbsp;=&nbsp;:major'; &nbsp;&nbsp;&nbsp;&nbsp;$params[':major']&nbsp;=&nbsp;$_GET['major'];}if&nbsp;(!empty($_GET['name']))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;$wheres[]&nbsp;=&nbsp;'b.name&nbsp;LIKE&nbsp;:name'; &nbsp;&nbsp;&nbsp;&nbsp;$params[':name']&nbsp;=&nbsp;'%'.$_GET['name'].'%';}//&nbsp;And&nbsp;so&nbsp;on&nbsp;for&nbsp;all&nbsp;parameters$sql&nbsp;=&nbsp;"SELECT&nbsp;*&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;user_details&nbsp;AS&nbsp;a &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JOIN&nbsp;user&nbsp;AS&nbsp;b&nbsp;ON&nbsp;a.uid&nbsp;=&nbsp;b.id";if&nbsp;(!empty($wheres))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;$sql&nbsp;.=&nbsp;"&nbsp;WHERE&nbsp;"&nbsp;.&nbsp;implode('&nbsp;AND&nbsp;',&nbsp;$wheres);}$stmt&nbsp;=&nbsp;$db->prepare($sql);$stmt->execute($params);然后显示结果,如您的原始代码。while&nbsp;($student&nbsp;=&nbsp;$stmt->fetch())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;...}

慕丝7291255

如果您不打算更改数据库中的任何内容-您只是在选择-请继续使用GET而不是POST。这样做的好处是它将允许您将URL保存为搜索字符串。您还可以刷新搜索,而不需要重新提交后警报。您只需要确保在将值发送到数据库之前将其参数化。我通常会通过清理函数发送这些值,比如一个正则表达式,它确保只有在您期望字母时才有字母,或者如果您希望使用数字,则使用数字。在同一页(全部搜索):(我只想为你概述一下。)<form&nbsp;action="<?=&nbsp;$_SERVER["REQUEST_URI"];&nbsp;?>"&nbsp;method="GET"> &nbsp;&nbsp;&nbsp;&nbsp;<input&nbsp;name="major"&nbsp;value="<?=&nbsp;$_GET["major"];&nbsp;?>"&nbsp;/>&nbsp;&nbsp;&nbsp;&nbsp;<select&nbsp;name="college"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<option&nbsp;value="1"&nbsp;<?PHP&nbsp;if(&nbsp;$_GET["college"]&nbsp;==&nbsp;1&nbsp;)&nbsp;echo&nbsp;'selected="true"';&nbsp;?>>Business</option> &nbsp;&nbsp;&nbsp;&nbsp;</select></form><?PHPif(&nbsp;!&nbsp;empty(&nbsp;$_GET&nbsp;)&nbsp;){ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isset($_GET['major']))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$wheres[]&nbsp;=&nbsp;'a.major&nbsp;=&nbsp;:major'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$params[':major']&nbsp;=&nbsp;$_GET['major']; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isset($_GET['name']))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$wheres[]&nbsp;=&nbsp;'b.name&nbsp;LIKE&nbsp;:name'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$params[':name']&nbsp;=&nbsp;'%'.$_GET['name'].'%'; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;And&nbsp;so&nbsp;on&nbsp;for&nbsp;all&nbsp;parameters &nbsp;&nbsp;&nbsp;&nbsp;$sql&nbsp;=&nbsp;"SELECT&nbsp;*&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;user_details&nbsp;AS&nbsp;a &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JOIN&nbsp;user&nbsp;AS&nbsp;b&nbsp;ON&nbsp;a.uid&nbsp;=&nbsp;b.id"; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!empty($wheres))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql&nbsp;.=&nbsp;"&nbsp;WHERE&nbsp;"&nbsp;.&nbsp;implode('&nbsp;AND&nbsp;',&nbsp;$wheres); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;$stmt&nbsp;=&nbsp;$db->prepare($sql); &nbsp;&nbsp;&nbsp;&nbsp;$stmt->execute($params);}?>现在你可以显示你的数据了。编辑:答案的另一半是我写的,然后他写了下半部分,所以我把它合并了.此外,这方面的下一个复杂程度将是将PHP从搜索文件中取出,并将其放入另一个文件中。当您按下表单中的搜索按钮时,您将使用Ajax调用PHP元素。然后,PHP文件将通过Ajax返回结果。您可以返回预先格式化的HTML或JSON,并让类似于JQuery的内容为您显示。
打开App,查看更多内容
随时随地看视频慕课网APP