如何根据表单提交字符串更新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
相关产品推荐
相关产品推荐

