Вот ваша проблема - вы не проверяете, установлена ли запись.Поэтому, если вы вызовете эту страницу перед отправкой формы, у вас будут неопределенные индексы для любой переменной $ _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;
}
, он сообщит вам, что заголовки уже отправлены, и выдаст вам еще одну ошибку.