我得到一个未定义的索引错误与这些变量: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);