[英]PHP Undefined index / variables
我收到這些變量的未定義索引錯誤:id,subj,mid,fin。 我已經正確定義了它們,但我不知道我的代碼有什么問題。 我認為問題出在我定義這四個變量的代碼位置。 請幫忙? 謝謝。
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變量。
它沒有抱怨$id
。 “未定義的索引”表示您正在嘗試使用不存在的數組的鍵,在本例中為$_POST
數組。
嘗試使用索引之前,請檢查其設置:
$id = isset($_POST['id']) ? $_POST['id'] : null;
$subject = isset($_POST['subj']) ? $_POST['subj'] : null;
etc...
或者,也可以將錯誤報告調低(不推薦)
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
這是您的問題-您無需檢查是否已設置帖子。 因此,如果您在提交表單之前調用此頁面,則您嘗試調用的任何$ _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;
}
它會告訴您標題已經發送,並給您另一個錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.