PHP: Uyarı: oturum değişkeni tanımlanır Undefined index

0 Cevap php

Ben bir e-posta doğrulayıcı bir kayıt sistemi yapıyorum. Şey, tipik "doğrulamak için bu kodu kullanabilirsiniz" türü.

Insanlar kayıt sayfasında hesap kayıt işlemlerini tamamlamaları ve bir şekilde kaza geri sayfaya gittiklerinde, onlar kullanılmadan önce kendi hesabını etkinleştirmek gerektiğini hatırlatır ki ben, bir oturum değişkeni saklanabilir istiyorum.

Ne teşhis için bu sorun çok zor kılan ben benzer şekillerde diğer birçok oturum değişkenleri kullanmış, ama bu hiç çalışmıyor olmasıdır. İşte benim yaklaşım:

/* This is placed after the mail script and account creation within the same if 
statement. Things get executed after it, so I know it's placed correctly. */

$_SESSION['registrationComplete'] = TRUE; 

// I've tried integer 1 and 'Yes' as alternatives.

Şimdi değişkeni kontrol etmek için, ben sayfanın en üstünde bu yer.

echo $_SESSION['registrationComplete']; // To see if it's setting. This gives the
                                        // undefined index notice.

if (isset($_SESSION['registrationComplete'])) {

// Alternatively, I have nested another if that simply tests if it's TRUE.

    echo $_SESSION['registrationComplete']; // When echo'd here, it displays nothing.

    echo '<p>Congratulations, Foo! Go to *link to Bar*.</p>';

}

Şimdi, sayfa, yeni bir sayfaya yönlendirmek için kullanılan, ama bunu test etmek için çıkardı. Gelen sayfayı yeniden gönderirseniz, benim mesaj Yukarıdaki açıklamalarımızın görünür ve sonra oturumu var ve yansıtmada bir Notice: Undefined index: registrationComplete blah blah olsun!

Ben hiç geri sayfasına giderseniz, sonra hep birlikte eğer deyimi sayar.

Ben test eski olanlar müdahale edildi durumda oturum değişkenleri takas, yazım hataları ve her şey için test ettik, ama hayır şans yaşıyorum. Google'da bir sürü sadece bu hataları bastırmak insanları gösteriyor, ama bu deli geliyor! O, ama başka bir yerde benim sitede oturum değişkenleri aynı sebat almıyorum değil sadece. Ben pervasızca yanlış bir şey yapıyorum eğer birisi işaret edebilir? Yardım! Teşekkürler!

Bilginize, ben birkaç ilgili soruları okudum ve ben de bir acemi am, bu yüzden açıklama yapmadan bazı tavsiyelerde kullanmak için nasıl bilmiyor olabilir.

As requested, more code, heavily annotated to keep it brief

var_dump($_SESSION);

// It's here to analyze that index message. I guess it's not important.
echo $_SESSION['registrationComplete']; 

if (isset($_SESSION['registrationComplete'])) { 

    // The golden ticket! This is what I want to appear so badly.
    echo 'Congratulations, Foo! Go to *link to Bar*.';

}


// Explanation: I don't want logged in users registering. 
// The else statement basically executes the main chunk of code.

if (isset($_SESSION['user_id'])) {

    echo 'You are logged in as someone already.';

}

else {

    if (isset($_POST['submitRegister'])) {

        // Code: Database connection and parsing variables from the form.

        if (!empty($email) && !empty($email2) && $email == $email2 && !empty($displayName) && !empty($password) && !empty($password2) && $password == $password2) {

            // Code: Query to retrieve data for comparison.

            if (mysqli_num_rows($registrationData) == 0) {

                // Code: Generates the salt and verification code.

                // Code: Password hashing and sending data to verify database.

                // E-mail the verification code.

                $_SESSION['registrationComplete'] = 'yes';

            }

            else {

                // Some error handling is here.
                $registerError = 'The e-mail address you entered is already in use.';

            }

        }

        // the elseif, elseif, and else are more error handling.

        elseif ($email != $email2) { $registerError = 'Your e-mails did not match'; }

        elseif ($password != $password2) { $registerError = 'Passwords didn\'t match.'; }

        else { $registerError = 'Filled out completely?'; }

        // If the registration was submitted, but had errors, this will print the form again.

        if (!isset($_SESSION['registrationComplete'])) { require_once REF_DIR . REF_REGISTERFORM; }


        // IMPORTANT! it turns out my code did not work, I forgot I had the same statement elsewhere.
        else { echo 'Congratulations, Foo! Go to *link to Bar*.'; }
    }

    // Creates form.

    else { require_once REF_DIR . REF_REGISTERFORM; }

}

0 Cevap