我正在尝试使用选择列表来主动过滤从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语句可用于填充我的第二个选择列表(名称),但我不确定是否可以/正在对该列表进行正确过滤。
提前致谢。
答案 0 :(得分:1)
我不确定“实时过滤”是什么意思。 Google在搜索中实施了哪些内容(称为“Google Suggest”)?
在这种情况下,您可以使用JavaScript和jQuery Library来更新列表。
此外,在测试某些内容时,不应使用@
,因为它会抑制错误消息(如果有)并且您不知道什么是错误的。如果您不希望生产服务器为用户提供错误消息,php.ini
- 文件中有一些选项会禁用此功能。
最后但并非最不重要的是,我建议您使用PreparedStatement来防止您的代码形成SQL注入(这使您使用的是MySQLi类):
答案 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>";
?>