You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用HTML的select标签配合PHP执行指定SQLite3查询

问题原因

你的代码存在三处核心错误,才会始终触发default分支:

  • 参数名不匹配:你的下拉选择框<select>的name属性为chooseCountry,但PHP代码中读取的是$_POST['formCountry'],两者名称不一致,无法正确获取到用户选择的国家值。
  • switch参数错误:你给switch传入的是isset($_POST['formCountry'])的执行结果,isset()函数只会返回布尔值true/false,拿布尔值和国家字符串匹配永远不会命中你写的case分支,所以每次都会走default。
  • SQLite操作逻辑错误:$db->query()方法已经完成了查询SQL的执行,会直接返回结果集,你后续调用$db->exec()传入结果集属于错误用法,exec()仅接收SQL字符串,用于执行无返回结果的增删改操作。
修正后参考代码
<form action="index.php" method="post" id="formSelect">
    <div id="chosen">
        <label for="pkCountry" class="blue">Choose a country:</label>
        <select name="chooseCountry" id="choose">
            <option value="start">select...</option>
            <option value="Australia">Australia</option>
            <option value="India">India</option>
            <option value="Pakistan">Pakistan</option>
            <option value="England">England</option>
            <option value="South Africa">South Africa</option>
            <option value="Sri Lanka">Sri Lanka</option>
            <option value="Bangladesh">Bangladesh</option>
            <option value="West Indies">West Indies</option>
        </select>
        <!-- 补充提交按钮触发表单提交 -->
        <input type="submit" value="查询">
    </div>
</form>

<?php
$db = new SQLite3('cricket.db');
if (!$db) {
    echo $db->lastErrorMsg();
} else {
    // 先判断参数是否存在,再取值传入switch
    $selectedCountry = $_POST['chooseCountry'] ?? '';
    switch ($selectedCountry) {
        case 'India':
            $result = $db->query("SELECT * FROM batsman WHERE country = 'India';");
            // 可自行遍历$result输出查询结果
            break;
        case 'Australia':
            $result = $db->query("SELECT * FROM batsman WHERE country = 'Australia';");
            break;
        case 'England':
            $result = $db->query("SELECT * FROM batsman WHERE country = 'England';");
            break;
        case 'Pakistan':
            $result = $db->query("SELECT * FROM batsman WHERE country = 'Pakistan';");
            break;
        case 'Bangladesh':
            $result = $db->query("SELECT * FROM batsman WHERE country = 'Bangladesh';");
            break;
        case 'Sri Lanka' :
            $result = $db->query("SELECT * FROM batsman WHERE country = 'Sri Lanka';");
            break;
        case 'South Africa':
            $result = $db->query("SELECT * FROM batsman WHERE country = 'South Africa';");
            break;
        case 'West Indies':
            $result = $db->query("SELECT * FROM batsman WHERE country = 'West Indies';");
            break;
        default:
            echo "<br>something went wrong</br>";                                 
            break;
    }  
    $db->close();
}
?>
额外优化建议

你不需要为每个国家写重复的case分支,直接把参数过滤后拼入SQL(或者用预处理语句避免SQL注入)即可,代码可以简化至少80%。

内容的提问来源于stack exchange,提问作者ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 09:24:11