感谢您阅读我的问题。
我正在构建一个表单,让用户在数据库中搜索可收集卡片游戏中使用的卡片。我想要包含一个下拉菜单,让用户将搜索范围缩小到特定的卡片扩展。
这是我的下拉菜单:
<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,所以我的整个方法很可能是非常错误而且不可扩展,所以任何“大图片”帮助都会非常感激。谢谢。
答案 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>