Я делаю систему регистрации с верификатором электронной почты.Ваш типичный тип «используйте этот код для проверки».
Я хочу, чтобы переменная сеанса была сохранена, чтобы, когда люди завершат регистрацию своего аккаунта на странице регистрации и каким-то образом вернутся на страницу в случае аварии,это напоминает им, что им необходимо активировать свою учетную запись перед использованием.
Что делает эту проблему такой сложной для диагностики, так это то, что я использовал много других переменных сеанса аналогичным образом, но эта не работает вообще.Вот мой подход:
/* 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.
Теперь, чтобы проверить переменную, я разместил ее в верхней части страницы.
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>';
}
Теперь я использовал перенаправление страницы нановая страница, но я взял это, чтобы проверить это.Когда страница перезагружается из submit, появляется мое сообщение в приведенном выше операторе if, а затем я получаю Notice: Undefined index: registrationComplete blah blah
от повторения сеанса var!
Затем, если я когда-либо вернусь на страницу, он игнорируетЕсли оператор все вместе.
Я проверил на опечатки и все, очистка переменных сеанса в случае, если старые из тестирования мешали, но мне не повезло.Большая часть Google показывает, что люди подавляют эти ошибки, но это звучит безумно!Не только это, но я не получаю такое же постоянство переменных сеанса в другом месте на моем сайте.Может кто-то указать, если я делаю что-то явно неправильно?Помогите!Спасибо!
К вашему сведению, я прочитал несколько смежных вопросов и являюсь новичком, поэтому могу не знать, как использовать определенные советы без объяснения причин.
По запросу, больше кода,сильно аннотированный, чтобы держать это кратким
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; }
}