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

如何获取option标签选择值用PHP构造SQL查询并输出手机维修价格

实现步骤

1. 调整HTML代码,支持参数提交

原有select标签无name属性,无法将用户选择传递给后端,需要包裹form表单、补充name属性和提交按钮,option的value值直接对应数据库字段/取值,减少后续转换成本:

<!-- 可和PHP代码放在同一个.php文件中 -->
<form method="post" action="">
  <select name="device" required>
    <option value="">Select device</option>
    <option value="iphone_8">iPhone 8</option>
    <option value="iphone_xs">iPhone XS</option>
  </select>
  <select name="issue" required>
    <option value="">Select issue</option>
    <option value="battery">Battery</option>
    <option value="waterdamage">Water Damage</option>
  </select>
  <button type="submit" name="query_price">查询维修价格</button>
</form>

2. PHP接收参数并做安全校验

因为要将用户选择的机型作为查询字段使用,不能直接拼接进SQL语句,必须加白名单校验,避免SQL注入风险:

  • 允许的机型列表:['iphone_8', 'iphone_xs']
  • 允许的故障列表:['battery', 'waterdamage']
    只有用户选择的内容在白名单内,才继续执行查询逻辑。

3. 构造SQL查询并返回价格

使用预处理查询绑定故障参数,进一步提升安全性,完整PHP逻辑如下:

<?php
// 替换为你自己的数据库配置
$db_host = 'localhost';
$db_user = '你的数据库用户名';
$db_pwd = '你的数据库密码';
$db_name = '你的数据库名';
$repair_table = '你的维修价格表名';

// 触发查询逻辑
if (isset($_POST['query_price'])) {
    // 接收用户提交的参数
    $selected_device = trim($_POST['device']);
    $selected_issue = trim($_POST['issue']);

    // 白名单校验
    $allow_devices = ['iphone_8', 'iphone_xs'];
    $allow_issues = ['battery', 'waterdamage'];
    if (!in_array($selected_device, $allow_devices) || !in_array($selected_issue, $allow_issues)) {
        echo '<p style="color:red;">请选择有效的设备和故障类型</p>';
        exit;
    }

    // 连接数据库
    $conn = new mysqli($db_host, $db_user, $db_pwd, $db_name);
    if ($conn->connect_error) {
        die('数据库连接失败:' . $conn->connect_error);
    }

    // 构造预处理SQL,机型已过白名单可安全拼接,故障参数用绑定方式传入
    $sql = "SELECT `$selected_device` AS repair_price FROM $repair_table WHERE issue = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param('s', $selected_issue);
    $stmt->execute();
    $res = $stmt->get_result();

    if ($res->num_rows > 0) {
        $price = $res->fetch_assoc()['repair_price'];
        echo "<p>对应维修价格为:\${$price}</p>";
    } else {
        echo "<p>未查询到对应维修价格</p>";
    }

    // 释放资源
    $stmt->close();
    $conn->close();
}
?>

补充说明

如果需要实现无刷新查询效果,只需额外加一段JS代码,监听选择框变化或者表单提交事件,通过AJAX将参数传给后端接口,拿到返回的价格后直接渲染到页面指定位置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 05:45:03