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

如何根据表单提交字符串更新MySQL表为对应数值以显示图片?

问题描述

需将表单提交的特定字符串转换为数字存入MySQL的survey表transport字段:

  • 提交「I ride a bike」时存入1
  • 提交「I fly an airplane」时存入2
    后续将根据该字段值显示对应图片(1.png为自行车、2.png为飞机)。

原代码直接将提交的字符串存入字段,导致无法正常显示图片;尝试使用strlen的SQL语句报错,现寻求正确实现方案。

原可运行代码:

// 获取表单提交的变量
$id=$_POST['id'];     
$pid = $_POST['pid'];
$transport=$_POST['transport'];

// 更新MySQL数据
$sql = "UPDATE survey SET pid=?, transport=? WHERE id=?";
$stmt= $con->prepare($sql);
$stmt->bind_param("ssi", $pid, $transport, $id);
$stmt->execute();

尝试的错误SQL语句:

UPDATE survey SET pid=?,if (strlen(['transport']) == 18){set '2';}else{set '1';} ,WHERE id=?

方案一:PHP端处理(推荐)

在PHP层将提交的字符串映射为对应数字,再传入SQL执行,逻辑更清晰且易维护:

// 获取表单提交的变量
$id = $_POST['id'];     
$pid = $_POST['pid'];
$transport_str = $_POST['transport'];

// 映射字符串到数字
$transport = match($transport_str) {
    'I ride a bike' => 1,
    'I fly an airplane' => 2,
    // 可选:设置默认值,处理非法输入
    default => 0
};

// 更新MySQL数据
$sql = "UPDATE survey SET pid=?, transport=? WHERE id=?";
$stmt = $con->prepare($sql);
// 参数类型改为"iii",因为transport现在是整数
$stmt->bind_param("iii", $pid, $transport, $id);
$stmt->execute();

若PHP版本低于8.0,不支持match语法,可改用switch:

$transport = 0;
switch($transport_str) {
    case 'I ride a bike':
        $transport = 1;
        break;
    case 'I fly an airplane':
        $transport = 2;
        break;
    default:
        $transport = 0;
}

方案二:SQL端处理

直接在UPDATE语句中使用CASE表达式完成映射,注意SQL语法规范:

// 获取表单提交的变量
$id = $_POST['id'];     
$pid = $_POST['pid'];
$transport_str = $_POST['transport'];

// 正确的SQL语句,使用CASE表达式
$sql = "UPDATE survey 
        SET pid=?, 
            transport = CASE ? 
                WHEN 'I ride a bike' THEN 1 
                WHEN 'I fly an airplane' THEN 2 
                ELSE 0 
            END 
        WHERE id=?";
$stmt = $con->prepare($sql);
$stmt->bind_param("ssi", $pid, $transport_str, $id);
$stmt->execute();

图片显示实现

从数据库查询出transport字段值后,拼接图片路径即可显示对应图片:

// 假设已从数据库查询得到$transport_value
$image_path = $transport_value . '.png';
// 输出图片标签
echo "<img src='$image_path' alt='交通工具图片'>";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:05:43