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

如何将表单中的$row['id']传递至toggle.php并用于设备状态更新?

解决你的智能家居设备开关控制问题

我来帮你搞定这个问题!你的核心问题出在toggle.php里的取值逻辑上——你在那里用了$row['id'],但这个变量只存在于渲染设备表单的页面(比如你展示设备列表的页面),到了toggle.php,你得从POST请求里直接拿表单提交的id值,也就是$_POST['id']。

另外,你的代码现在有严重的SQL注入风险,直接把用户提交的参数拼进SQL语句太不安全了,必须用预处理语句来修复这个问题。

修正后的toggle.php代码

<?php
include('devices.php');

// 先验证提交的ID是否合法(设备ID一般是整数)
if(isset($_POST['id']) && is_numeric($_POST['id'])){
    $deviceId = (int)$_POST['id'];
    
    if(isset($_POST["on"])){
        // 使用预处理语句,彻底避免SQL注入
        $stmt = $mysqli->prepare("UPDATE devices SET status = 'On' WHERE id = ?");
        $stmt->bind_param("i", $deviceId);
        $stmt->execute();
        $stmt->close();
    } elseif(isset($_POST["off"])){
        $stmt = $mysqli->prepare("UPDATE devices SET status = 'Off' WHERE id = ?");
        $stmt->bind_param("i", $deviceId);
        $stmt->execute();
        $stmt->close();
    }
}

// 处理完后可以跳回设备列表页面,比如:
// header("Location: your_device_list.php");
// exit;
?>

关键说明

  • 表单本身没问题:你写的隐藏字段<input type="hidden" name="id" value="<?php echo $row['id'];?>">已经正确把设备ID传递给toggle.php了,不用改表单代码。
  • 为什么用(int)$_POST['id']:强制把参数转为整数,确保传入的是合法的设备ID,避免非数字值导致数据库出错。
  • 预处理语句的重要性:把SQL逻辑和用户输入的数据分开,彻底杜绝SQL注入攻击,这是操作数据库的标准安全做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:21:44