在表单中使用带有SQL的SELECT语句的下拉菜单

时间:2011-02-24 03:51:21

标签: php sql html

感谢您阅读我的问题。

我正在构建一个表单,让用户在数据库中搜索可收集卡片游戏中使用的卡片。我想要包含一个下拉菜单,让用户将搜索范围缩小到特定的卡片扩展。

这是我的下拉菜单:

<select name="Expsn" onchange="this.submit()">
     <option>All Expansions</option>
     <option value="Core">Core</option>
     <option value="SoM">Shadows of Mirkwood</option>

这是select语句:

$sql = "SELECT * FROM carddb 
WHERE Expsn ='" . $_POST['Expsn'] . "' AND Type='Hero' ";

选择Core或MoR时效果很好,但如果保留空白,则“All Expansions”将传递到$ _POST ['Expsn']。 (我使用echo $ sql;输出SELECT语句)。如何设置默认值以从所有扩展中返回卡片。

我花了最近几周在线学习PHP和SQL,所以我的整个方法很可能是非常错误而且不可扩展,所以任何“大图片”帮助都会非常感激。谢谢。

3 个答案:

答案 0 :(得分:3)

首先将“All Expansions”选项更改为空值:

<option value="">All Expansions</option>

这样您可以在以后更改措辞,而无需更新PHP代码。

if (empty($_POST['Expsn'])) {
    $sql = "SELECT * FROM carddb WHERE Type='Hero'";
} else {
    $sql = "SELECT * FROM carddb WHERE Expsn ='" . mysql_real_escape_string($_POST['Expsn']) . "' AND Type='Hero'";
}

mysql_real_escape_string位对于防止SQL注入非常重要 - 我假设你在这里使用了mysql扩展,但其他扩展的功能相同。

答案 1 :(得分:1)

如果设置了Expsn,则将条件添加到SQL,如:

$expsn = (strlen($_POST['Expsn']) > 0) ? "Expsn = '" . $_POST['Expsn'] . "' AND " : '';
$sql = "SELECT * FROM carddb WHERE $expsn Type='Hero'";

答案 2 :(得分:0)

只需使用此

<option value="*">All Expansions</option>