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

PHP mysqli代码出现Undefined index: do错误,如何消除该报错?

解决PHP mysqli代码中「Undefined index: do」的错误

这个错误其实很常见,原因也很直白:当你直接加载这个页面(没有通过带?do=sparatid或?do=nytid的链接触发操作)时,$_GET['do']这个变量根本不存在,PHP就会抛出「Undefined index: do」的警告——虽然不影响表单功能,但确实看着闹心,咱们来搞定它。

核心解决思路:先判断变量是否存在,再判断值

你需要先检查$_GET['do']这个键是否存在,再去判断它的值是什么,有两种常用写法:

写法1:用isset()做前置判断

直接在条件里先确认do参数存在,再做值的比较:

if(isset($_GET['do']) && $_GET['do'] == 'sparatid'){ 
    $datum=$_POST['datum']; 
    $info=$_POST['info']; 
    $color=$_POST['color']; 
    $uppdatera = "UPDATE narvaro SET info = '{$info}', color = '{$color}' WHERE datum = '{$datum}'"; 
    $res = mysqli_query($con, $uppdatera) or die("SQL: Gick ej att uppdatera informationen $uppdatera <br>".mysqli_error($con)); 
} elseif(isset($_GET['do']) && $_GET['do'] == 'nytid'){ 
    $datum=$_POST['datum']; 
    $info=$_POST['info']; 
    $color=$_POST['color']; 
    $sql = "insert into narvaro (fornamn, efternamn, datum, info, narvaro_id, pos, color) SELECT (fornamn), (efternamn), '$datum', (info), (narvaro_id), (pos), '$color' FROM narvaro WHERE datum ='2018-02-28'"; 
    $results = mysqli_query($con, $sql); 
}

(顺便提一句:你原来的错误提示用了mysql_error(),应该改成mysqli_error($con)才对,因为你用的是mysqli扩展)

写法2:PHP7+可用null合并运算符简化

如果你的PHP版本是7.0及以上,可以先给$do赋一个默认值,再判断:

// 如果$_GET['do']不存在,就设为空字符串
$do = $_GET['do'] ?? '';

if($do == 'sparatid'){ 
    // 你的更新代码
} elseif($do == 'nytid'){ 
    // 你的插入代码
}

重要提醒:你的代码有SQL注入风险!

虽然你现在的问题是消除错误,但必须提一句:直接把$_POST里的变量拼到SQL语句里是非常危险的,攻击者可以轻易篡改你的数据库数据。建议改用mysqli预处理语句来避免这个问题,比如更新部分可以改成这样:

if(isset($_GET['do']) && $_GET['do'] == 'sparatid'){ 
    $datum=$_POST['datum']; 
    $info=$_POST['info']; 
    $color=$_POST['color']; 

    // 预处理语句,用?作为占位符
    $uppdatera = "UPDATE narvaro SET info = ?, color = ? WHERE datum = ?";
    $stmt = mysqli_prepare($con, $uppdatera);
    // 绑定参数,"sss"表示三个字符串类型的参数
    mysqli_stmt_bind_param($stmt, "sss", $info, $color, $datum);
    mysqli_stmt_execute($stmt);

    // 可以添加执行结果判断
    if(mysqli_stmt_affected_rows($stmt) > 0){
        echo "信息更新成功";
    } else {
        echo "更新失败或无数据需要修改";
    }
    mysqli_stmt_close($stmt);
}

插入部分也可以用同样的方式改写,彻底杜绝SQL注入风险。

内容的提问来源于stack exchange,提问作者calle.fr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:31:22