通过HTML选择实时MySQL过滤

时间:2011-06-13 13:49:56

标签: php mysql html

我正在尝试使用选择列表来主动过滤从SQL数据库中获得的结果。例如,如果我从我的选择列表中选择“Yankees”,我希望我的SQL查询只显示Yankee玩家。

编辑:通过“实时过滤”我的意思是当用户选择洋基队,费城人队或播音员时,选择列表将只显示该类别下的名字。

这是我的选择代码。

<select name="ident" id="ident">
    <option value="yankees">Yankees</option>
    <option value="phillies">Phillies</option>
    <option value="announcer">Announcer</option>
</select>

这是后面的代码(在数据库连接之后):

<?php
    $ident = $_POST['ident'];
    $query = @mysql_query('SELECT name, id FROM grade ORDER BY name asc WHERE ident="' . $ident . '"');
    echo "<select name='name'>";
    while ($temp = mysql_fetch_assoc($query)) {
        echo "<option>".htmlspecialchars($temp['name'])."</option>";
    }
        echo "</select>";
?>

我知道如果手动输入名称,while语句可用于填充我的第二个选择列表(名称),但我不确定是否可以/正在对该列表进行正确过滤。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我不确定“实时过滤”是什么意思。 Google在搜索中实施了哪些内容(称为“Google Suggest”)?

在这种情况下,您可以使用JavaScript和jQuery Library来更新列表。

此外,在测试某些内容时,不应使用@,因为它会抑制错误消息(如果有)并且您不知道什么是错误的。如果您不希望生产服务器为用户提供错误消息,php.ini - 文件中有一些选项会禁用此功能。

最后但并非最不重要的是,我建议您使用PreparedStatement来防止您的代码形成SQL注入(这使您使用的是MySQLi类):

  1. 使用。创建PrearedStatement prepare() - 。方法
  2. Bind您的参数
  3. Execute声明
  4. Bind结果
  5. Fetch他们。
  6. 关于此的示例代码可以在链接的PHPDoc-Samples中找到。

答案 1 :(得分:1)

不,你没有正确地做到这一点。首先,有一个安全漏洞。您的代码容易受到SQL注入攻击。其次,您的SQL查询错误。 ORDER BY应该在WHERE条款之后。

以下是安全且正确的方法:

<?php
$ident = mysql_real_escape_string($_POST['ident']);
$query = @mysql_query("SELECT name, id FROM grade WHERE ident = '$ident' ORDER BY name ASC");
echo "<select name='name'>";

while ($temp = mysql_fetch_assoc($query)) {
    echo "<option>".htmlspecialchars($temp['name'])."</option>";
}

echo "</select>";
?>