【问题标题】:Using a dropdown menu in a form for a SELECT statement with SQL在带有 SQL 的 SELECT 语句的表单中使用下拉菜单
【发布时间】:2011-02-24 03:51:20
【问题描述】:

感谢您阅读我的问题。

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

这是我的下拉菜单:

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

这里是选择语句:

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

这在选择 Core 或 MoR 时效果很好,但如果下拉框留空,“所有扩展”将被传递到 $_POST['Expsn']。 (我使用 echo $sql; 来输出 SELECT 语句)。如何设置默认从所有扩展中返回卡。

过去几周我一直在网上学习 PHP 和 SQL,所以我的整个方法很可能非常错误且不可扩展,因此非常感谢任何“全局”帮助。谢谢你。

【问题讨论】:

    标签: php sql html


    【解决方案1】:

    首先将“所有扩展”选项更改为空值:

    <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 扩展,但其他扩展具有等效功能。

    【讨论】:

    • 这看起来不错,但我知道 $_POST['Expsn'] 不是空的。 if 语句应该检查它是否等于“所有扩展”,在这种情况下它应该忽略它。
    • 很好@Will,更新了答案以纠正这个问题。我通常使用 value="" 来避免将处理与演示文稿联系起来。
    • 在这种情况下,您确实应该让表单具有正确的空字符串值属性。 。这样可以避免任何歧义。
    • 将会添加更多其他搜索选项,所以我需要一些更具可扩展性的东西。
    • 非常感谢大家,这是我在这个项目中需要的最后一块拼图!
    【解决方案2】:

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

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

    【讨论】:

    • if ($_POST['Expsn'] != "1") {$expsn = "Expsn='" . $_POST['Expsn'] . "' AND ";} else {$expsn = " ";} $sql = "SELECT * FROM carddb WHERE $expsn Type='Hero' ";
    • 我没有想到将变量放在 SELECT 语句中,然后对变量执行一个简单的 if 语句。我将默认选项标签更改为:。我还有几件事要添加,所以我认为这会更好地扩展。
    • 太棒了。对于像这样的小ifs,三元运算符看起来更好:php.net/manual/en/…
    • 非常感谢大家,这是我在这个项目中需要的最后一块拼图!
    【解决方案3】:

    就用这个

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-19
      • 2020-01-14
      • 2018-06-19
      • 1970-01-01
      • 2013-07-27
      • 2012-11-21
      • 1970-01-01
      • 2018-08-13
      相关资源
      最近更新 更多