创建自定义MySQL搜索(下拉菜单)

时间:2015-03-15 20:38:03

标签: php mysql

我有一个包含视频游戏项目的数据库。剑,盾牌等我标记了所有物品的等级,效果,找到的位置和类似的东西。

我可以硬编码从数据库中提取的页面。比如诅咒查询的硬编码匕首:

$results = $mysqli->query("SELECT name, type, level, effect 
           FROM Items 
           WHERE type = 'Dagger' 
           AND effect = "Stun" 
           ORDER BY name ASC"); 

while ($item= $results->fetch_assoc()) { $result_array[] = $item; }

但是,我希望用户通过下拉菜单,以便他们可以自己过滤数据库中的结果。我不知道该怎么做。我试过谷歌搜索,但很多似乎过时或当我尝试它只是不起作用。

这个网站的类似内容 - http://www.wowhead.com/items

因此,例如,用户可以选择“效果”下拉菜单,然后创建另一个下拉菜单,供您选择;冻结,治愈,晕眩或其他什么。然后从下拉菜单中选择级别并输入50.然后数据库将从数据库中提取眩晕的结果,这些眩晕可以在50级使用。

谢谢!

1 个答案:

答案 0 :(得分:1)

这很简单。首先你有表单元素。

<form type="post" action="controller.php">
    <select name="weapon">
        <option value="Dagger"> Dagger </option>
        <option value="Sword"> Sword </option>
    </select>

    <select name="effect">
        <option value="Stun"> Stun </option>
        <option value="Knock Back"> Knock Back </option>
    </select>
</form>

当用户从这些下拉列表中选择一个值时,它们将被发送到$ _POST数组中的服务器,其键与select元素的“name”匹配。 controller.php文件是将处理表单提交的文件。您可以更改此文件的位置等。

然后在表单提交处理程序中,您希望处理$ _POST数组,然后在我们处理用户输入时为安全性创建prepared语句。

/**
| ---------------------------------------------------
| controller.php
| ---------------------------------------------------
*/
if(isset($_POST)){
    $weapon = isset($_POST['weapon']) ? $_POST['weapon'] : false;
    $effect = isset($_POST['effect']) ? $_POST['effect'] : false;

    if($weapon && $effect){
        $mysqli = new mysqli('host', 'user', 'pass', 'database');
        $result = $mysqli->prepare("SELECT name, type, level, effect 
            FROM Items 
            WHERE type = ?
            AND effect = ? 
            ORDER BY name ASC"); 

        $result->bind_param('ss', $weapon, $effect);

        if($result->execute()){
            while($row = $result->fetch_assoc()){
                //access column names here by $row['index'];                     
            }
        }
    }   
}

上面的脚本正在检查是否填充了post数组,然后检查我们的特定变量。从那里,我们建立数据库连接,创建安全预准备语句,将我们的参数绑定到我们的预准备语句,执行查询,然后我们用fetch_assoc迭代返回的结果集。

我希望这会对你有所帮助。