协助PHP和MySQL中的搜索功能

罗恩·萨哈

我正在开发旅行社网站,并且可以选择允许我的用户根据地区,国家和时长搜索旅行社。

目前,我开发的搜索选项允许搜索游历并在所有搜索参数都匹配的情况下显示结果。例如,如果“地区-非洲”,“国家/地区”,“埃塞俄比亚”和“持续时间-5天”下列出了“旅行”,则必须选择所有参数以显示该旅行。但我想修改搜索选项,以便:

  • 对于区域,国家和持续时间,将有一个全选选项。如果有人使用“全选”选项搜索所有三个参数,则它将显示数据库中所有可用的游览。

  • 如果某人仅选择一个区域,而另两个作为“全选”,则将仅显示该区域下列出的游览。与国家和持续时间相同。

  • 如果某人仅选择两个参数(如“国家/地区”和“持续时间”),而第三个选项为“全选”,则只会显示在所选“国家/地区和持续时间”下列出的那些旅行。与地区和持续时间相同。

这是我的数据库结构

我现在使用的PHP代码是:

<?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("byp");

    if(isset($_POST['submit'])){
        $region=$_POST['region'];
        $country=$_POST['country'];
        $duration=$_POST['duration'];

        $tour = mysql_query("select * from byp_tour where region='$region' and country='$country' and duration='$duration'");
        $tourNum = mysql_num_rows($tour);

        if($tourNum >0){

            while($result=mysql_fetch_array($tour)){

                $tour_name = $result['tour_name'];
                $tour_detail = $result['tour_detail'];

                echo "Tour Name: $tour_name";
                echo "<br />";
                echo "Tour Detail: $tour_detail";
                echo "<br />";
                echo "<br />";
                echo "<br />";
            }
        }
        else{
            echo "No Tour Found";
            echo "<br />";
            echo "<br />";
        }
    }
?>
<!DOCTYPE html>
<html>
    <head>
        <title>BYP Test</title>
    </head>
    <body>
        <form action="byptest.php" method="post">
            <div>
                <label>Region</label>
                <select id="region" name="region">
                <option value="0">Select</option>
                    <option value="1">South East Asia</option>
                    <option value="2">Africa</option>
                    <option value="3">Europe</option>
                    <option value="4">America</option>
                    <option value="5">Australia</option>                               
                </select>
            </div>
            <div>
                <label>Country</label>
                <select id="country" name="country">
                <option value="0">Select</option>
                    <option value="1">Cambodia</option>
                    <option value="2">Thailand</option>
                    <option value="3">Vietnam</option>
                    <option value="4">Myanmar</option>
                    <option value="5">Laos</option>
                    <option value="6">Ethiopia</option>
                    <option value="7">France</option>
                    <option value="8">New York City</option>
                    <option value="9">Melbourne</option>
                </select>
            </div>
            <div>
                <label>Duration</label>
                <select id="duration" name="duration">
                <option value="0">Select</option>
                    <option value="1">5 Days</option>

                </select>
            </div>
            <input type="submit" name="submit" value="submit" />
        </form>
    </body>
</html>
贝尔加德

在您的代码上可以遵循一些可能。

您可以将选择的0索引选项设置为“全部”,而不是“选择”。

例如

地区选择

<select id="region" name="region">
    <option value="0">Select</option>
    <option value="1">South East Asia</option>
    <option value="2">Africa</option>
    <option value="3">Europe</option>
    <option value="4">America</option>
    <option value="5">Australia</option>                               
</select>

将转化为

<select id="region" name="region">
    <option value="0">All</option>
    <option value="1">South East Asia</option>
    <option value="2">Africa</option>
    <option value="3">Europe</option>
    <option value="4">America</option>
    <option value="5">Australia</option>                               
</select>

另一种可能性是创建具有特定索引(例如9999)的新选项。

这样,您可以修改查询以根据您的选择选择所有元素。

该代码应修改为:

<?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("byp");

    if(isset($_POST['submit'])){
        $region=$_POST['region'];
        $country=$_POST['country'];
        $duration=$_POST['duration'];

        //define the index for the All option
        $optionAllValue = 0; //add here the option index value used for the 'All' option
        //define the where clause for the query
        //in order to avoid many conditions verifications, we start it as 1=1
        $whereClause = "1=1";

        //now we check if the option selected for each field is not the value defined for the option 'All'
        //this is just an example, and the best would be to create a function to avoid the replication of code 
        if($region != $optionAllValue)
        {
            $whereClause = $whereClause." and region='$region'";
        }
        if($country != $optionAllValue)
        {
            $whereClause = $whereClause." and country='$country'";
        }
        if($duration != $optionAllValue)
        {
            $whereClause = $whereClause." and duration='$duration'";
        }

        $query = "select * from byp_tour where ".$whereClause;

        //original query select * from byp_tour where region='$region' and country='$country' and duration='$duration'"
        $tour = mysql_query($query);
        $tourNum = mysql_num_rows($tour);

        if($tourNum >0){

            while($result=mysql_fetch_array($tour)){

                $tour_name = $result['tour_name'];
                $tour_detail = $result['tour_detail'];

                echo "Tour Name: $tour_name";
                echo "<br />";
                echo "Tour Detail: $tour_detail";
                echo "<br />";
                echo "<br />";
                echo "<br />";
            }
        }
        else{
            echo "No Tour Found";
            echo "<br />";
            echo "<br />";
        }
    }
?>

完整的修改示例可以在下面找到:

<?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("byp");

    if(isset($_POST['submit'])){
        $region=$_POST['region'];
        $country=$_POST['country'];
        $duration=$_POST['duration'];

        //define the index for the All option
        $optionAllValue = 0; //add here the option index value used for the 'All' option
        //define the where clause for the query
        //in order to avoid many conditions verifications, we start it as 1=1
        $whereClause = "1=1";

        //now we check if the option selected for each field is not the value defined for the option 'All'
        //this is just an example, and the best would be to create a function to avoid the replication of code 
        if($region != $optionAllValue)
        {
            $whereClause = $whereClause." and region='$region'";
        }
        if($country != $optionAllValue)
        {
            $whereClause = $whereClause." and country='$country'";
        }
        if($duration != $optionAllValue)
        {
            $whereClause = $whereClause." and duration='$duration'";
        }

        $query = "select * from byp_tour where ".$whereClause;

        //original query select * from byp_tour where region='$region' and country='$country' and duration='$duration'"
        $tour = mysql_query($query);
        $tourNum = mysql_num_rows($tour);

        if($tourNum >0){

            while($result=mysql_fetch_array($tour)){

                $tour_name = $result['tour_name'];
                $tour_detail = $result['tour_detail'];

                echo "Tour Name: $tour_name";
                echo "<br />";
                echo "Tour Detail: $tour_detail";
                echo "<br />";
                echo "<br />";
                echo "<br />";
            }
        }
        else{
            echo "No Tour Found";
            echo "<br />";
            echo "<br />";
        }
    }
?>
<!DOCTYPE html>
<html>
    <head>
        <title>BYP Test</title>
    </head>
    <body>
        <form action="byptest.php" method="post">
            <div>
                <label>Region</label>
                <select id="region" name="region">
                    <option value="0">All</option>
                    <option value="1">South East Asia</option>
                    <option value="2">Africa</option>
                    <option value="3">Europe</option>
                    <option value="4">America</option>
                    <option value="5">Australia</option>                               
                </select>
            </div>
            <div>
                <label>Country</label>
                <select id="country" name="country">
                <option value="0">All</option>
                <option value="1">Cambodia</option>
                <option value="2">Thailand</option>
                <option value="3">Vietnam</option>
                <option value="4">Myanmar</option>
                <option value="5">Laos</option>
                <option value="6">Ethiopia</option>
                <option value="7">France</option>
                <option value="8">New York City</option>
                <option value="9">Melbourne</option>
            </select>
        </div>
        <div>
            <label>Duration</label>
            <select id="duration" name="duration">
                <option value="0">All</option>
                <option value="1">5 Days</option>
            </select>
        </div>
        <input type="submit" name="submit" value="submit" />
        </form>
    </body>
</html>

我注意到您的选择是相互依赖的。这意味着您需要修改部分“选择”后,以级联方式更新当前选项。为了能够执行级联,您可以在StackOverflow上引用其他问题:使用JavaScript和php从mysql进行级联下拉

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP / MySQL搜索功能

来自分类Dev

PHP 和 MySQL 中的基本搜索

来自分类Dev

PHP 中的搜索和过滤功能不起作用

来自分类Dev

php cms中的搜索功能

来自分类Dev

PHP和MySQL实时搜索

来自分类Dev

混合了json和php的搜索功能(sql)

来自分类Dev

优化搜索功能MySQL或PHP明智

来自分类Dev

如何改进我的搜索功能?PHP + MySQL

来自分类Dev

请使用LIKE运算子协助MySQL和PHP之间的搜寻结果

来自分类Dev

在 spring 和 HQL 中实现搜索功能

来自分类Dev

在PHP中搜索MySQL查询

来自分类Dev

在PHP中搜索MySQL表

来自分类Dev

MySQL和PHP搜索相似的单词

来自分类Dev

PHP和MySQL搜索栏的价值

来自分类Dev

使用php和mysql搜索查询

来自分类Dev

按钮搜索和功能

来自分类Dev

在PHP中使用GET和POST搜索功能

来自分类Dev

在PHP中使用GET和POST搜索功能

来自分类Dev

使用爆破功能调整php mysql搜索查询

来自分类Dev

协助numpy savetext功能

来自分类Dev

PHP搜索功能[MySqli]

来自分类Dev

在mySQL中搜索数据和交叉引用

来自分类Dev

在mySQL中搜索数据和交叉引用

来自分类Dev

如何在使用PHP和MySQL的搜索中显示“无结果”?

来自分类Dev

如何使用php和mysql在一个表中搜索记录是否存在

来自分类Dev

在PHP和MYSQL中对搜索完整标题及其单词进行单个查询?

来自分类Dev

如何使用 PHP 和 MySQL 根据表中的搜索值更新数据

来自分类Dev

PHP 和 MySQL 搜索从数据库中获取完整数据

来自分类Dev

PHP 和 MySQL 中的多输入字段搜索不起作用