PHP Неопределенный индекс / переменные - PullRequest
0 голосов
/ 13 декабря 2011

Я получаю неопределенную ошибку индекса с этими переменными: 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>
        ";
    }
}

Ответы [ 2 ]

0 голосов
/ 13 декабря 2011

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

, он сообщит вам, что заголовки уже отправлены, и выдаст вам еще одну ошибку.

0 голосов
/ 13 декабря 2011

Это потому, что вы пытаетесь использовать переменные 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);
...