未定义的索引/变量


PHP Undefined index / variables

我得到一个未定义的索引错误与这些变量:id, subj, mid, fin.我已经正确地定义了它们,我不知道我的代码出了什么问题。我认为问题在于我定义这4个变量的代码的位置。请帮忙吗?谢谢。

echo "
    <form action=editgrades.php method=post>
        ID: <input type='text' name='id' maxlength='5' size='3'>
        Subject: <input type='text' name='subj' maxlength='3' size='3'>
        Midterm: <input type='text' name='mid' maxlength='3' size='3'>
        Finals: <input type='text' name='fin' maxlength='3' size='3'>
        <input type='submit' name='submit' value='Update'>
    </form>
";
$mysqli = mysqli_connect("localhost", "root", "", "school");
if (mysqli_connect_errno()) {
    printf("Connect failed: %s'n", mysqli_connect_error());
    exit();
} else {
    $sql = "select * from studentgrades";
}
$id = $_POST['id'];
$subject = $_POST['subj'];
$midterm = $_POST['mid'];
$finals = $_POST['fin'];
$average = ($midterm + $finals) / 2;
if ($average >= 70) {
    $remarks = 'Passed';
} else {
    $remarks = 'Failed';
}
$res = mysqli_query($mysqli, $sql);
if ($res) {
    $sql1 = "
        update studentgrades set Subject = " . $subject . ",
        Midterm = " . $midterm . ",
        Finals = " . $finals . ",
        Average = " . $average . ",
        Remarks = " . $remarks . "
        where ID = " . $id . "
    ";
    $res1 = mysqli_query($mysqli, $sql1);
    if ($res1) {
        echo "
            Grades updated successfully.
            <br><br>
        ";
    }
}

这是你的问题-你不检查是否设置了post。因此,如果你在提交表单之前调用这个页面,你将有未定义的索引为任何$_POST变量你试图调用。

执行如下操作:

if(isset($_POST['id']))
{
    $mysqli = mysqli_connect("localhost", "root", "", "school");
    if (mysqli_connect_errno()) {
    printf("Connect failed: %s'n", mysqli_connect_error());
    exit();
    }
    else{
    $sql = "select * from studentgrades";
    }
    $id = $_POST['id'];
    $subject = $_POST['subj'];
    $midterm = $_POST['mid'];
    $finals = $_POST['fin'];
    $average = ($midterm+$finals)/2;
    if($average >= 70){
    $remarks = 'Passed';
    }
    else {
    $remarks = 'Failed';
    }
    $res = mysqli_query($mysqli, $sql);
    if ($res) {
    $sql1 = "
    update studentgrades set Subject = ".$subject.",
    Midterm = ".$midterm.",
    Finals = ".$finals.",
    Average = ".$average.",
    Remarks = ".$remarks."
    where ID = ".$id."
    ";
    $res1 = mysqli_query($mysqli, $sql1);
    if ($res1){
    echo "
    Grades updated successfully.
    <br><br>
    ";
    }
}

尽管isset($_POST['id']))可以被任意数量的验证表单是否提交的方法所取代。

一个边注-你可能应该运行你所有的后期处理之前的任何html输出,以防你需要修改标题基于后的结果。如果这段代码需要执行如下操作:

if($id == '')
{
    header('location: /');
    exit;
}

它会告诉你头已经发送了,并给你另一个错误。

这是因为您试图在提交表单之前使用POST变量。

不是在抱怨$id。"Undefined index"表示您正在尝试使用一个不存在的数组的键,在本例中是$_POST数组。

在尝试使用索引之前检查索引是否设置:

$id = isset($_POST['id']) ? $_POST['id'] : null;
$subject = isset($_POST['subj']) ? $_POST['subj'] : null;
etc...

或者干脆关闭错误报告(不推荐)

error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);