Je fais un système d'enregistrement avec un vérificateur de courrier électronique. Votre type typique "utiliser ce code pour vérifier" type de chose. Je veux qu'une variable de session soit stockée, de sorte que lorsque les gens complètent leur enregistrement de compte sur la page d'inscription et retournent d'une manière ou d'une autre sur la page accident, cela leur rappelle qu'ils doivent activer leur compte avant utilisation.PHP: Remarque: Indéfini où la variable de session est définie
Ce qui rend ce problème si difficile à diagnostiquer, c'est que j'ai utilisé de nombreuses autres variables de session de manière similaire, mais celle-ci ne fonctionne pas du tout. Voici mon approche:
/* 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.
Maintenant, pour vérifier la variable, j'ai placé cela en haut de la page.
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>';
}
Maintenant, j'avais l'habitude d'avoir la page rediriger vers une nouvelle page, mais je l'ai sorti pour le tester. Lorsque la page se recharge de submit, mon message dans l'instruction if ci-dessus apparaît et puis j'obtiens un Notice: Undefined index: registrationComplete blah blah
de l'écho de la session var! Puis, si jamais je retourne à la page, il ignore l'instruction if tous ensemble.
J'ai testé pour les fautes de frappe et tout, en effaçant les variables de session au cas où les anciennes des tests interféraient, mais je n'ai pas de chance. Beaucoup de Google montre juste les gens supprimant ces erreurs, mais cela semble fou! Non seulement cela, mais je n'obtiens pas la même persistance des variables de session ailleurs sur mon site. Quelqu'un peut-il signaler si je fais quelque chose de flagrant? Aidez-moi! Merci! Pour info, j'ai lu plusieurs questions connexes et je suis aussi un débutant, donc je ne sais pas comment utiliser certains conseils sans explication.
Comme demandé, plus de code, largement annoté pour le garder bref
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; }
}
Assurez-vous que session_start est appelée en haut de la page pour continuer la session? http://php.net/manual/en/function.session-start.php –
Combien de données stockez-vous dans les variables de session? –
@Jack: Oui. Un gros morceau du site qui contient session_start() est ajouté au contenu via require_once. Si quelque chose n'allait pas, il me manquerait aussi la moitié de mon site, donc je pense qu'il peut être sûr de l'exclure. – Tarik