2017-03-17 1 views
-1

J'ai un message d'erreur stocké dans une variable de session que je souhaite afficher une seule fois. Ma méthode est de vérifier si elle est là, puis de faire écho et de la désinstaller après.Impossible de supprimer la variable de session après l'écho

<div class="signin"> 
 

 
    <form name="signuser" action="php/signin_user.php" onsubmit="return validateForm()" method="POST"> 
 
    <input type="text" name="email" placeholder="E-mail" value="<?php echo $_SESSION['signin']['email']; ?>"><br> 
 
    <input type="password" name="password" placeholder="Password"><br> 
 
    <input type="submit" value="Sign in"> 
 
    </form> 
 

 
    <br> 
 
    <div id="login-error" style="display: none"></div> 
 
    
 
    <?php 
 

 
    if(isset($_SESSION['msg']['signin-error'])) { \t 
 
     echo '<div id="login-php-error">'; 
 
echo '<p>'.$_SESSION['msg']['signin-error'].'</p>'; 
 
     echo '</div>'; 
 
} 
 

 
    if(isset($_SESSION['msg']['signin-error'])) { 
 
     unset($_SESSION['msg']['signin-error']); 
 
    } 
 

 
    if (isset($_SESSION['signin']['email'])) 
 
     unset($_SESSION['signin']['email']); 
 

 
    ?> 
 

 
</div>

J'ai essayé avec = "" aussi bien:

<?php 
 

 
    if($_SESSION['msg']['signin-error'] != "") { \t 
 
    echo '<div id="login-php-error">'; 
 
    echo '<p>'.$_SESSION['msg']['signin-error'].'</p>'; 
 
    echo '</div>'; 
 
    } 
 

 
    if($_SESSION['msg']['signin-error'] != "") { 
 
    unset($_SESSION['msg']['signin-error']); 
 
    } 
 

 
    if ($_SESSION['signin']['email'] != "") 
 
    unset($_SESSION['signin']['email']); 
 

 
?>

Rien ne fonctionne. J'ai session_start() sur toutes mes pages. Il apparaît toujours à chaque rafraîchissement.

EDIT:

Il est évident que je suis nouveau à PHP et je vois maintenant que l'utilisation de session pour donner les commentaires des utilisateurs est stupide. J'ai fini par utiliser GET pour afficher les messages d'erreur et cela fonctionne très bien pour mon besoin. Merci pour l'aide!

+1

vous devez démarrer la session si vous n'avez pas déjà –

+0

J'ai Ontop toutes mes pages –

+0

vérifier les erreurs puis http://php.net/manual/fr/function.error-reporting.php - Voir la source html, 'var_dump()' et echo sont tous des outils de débogage utiles. –

Répondre

0

Les sessions sont déclarées dans l'en-tête. Les en-têtes sont envoyés avant tout autre contenu et le contenu echo ou simplement le texte (par exemple HTML) met fin aux en-têtes. Cela signifie que vous ne pouvez pas modifier les sessions après echo 'ing.

Il existe cependant un moyen de contourner PHP output buffering. Vous utilisez ob_start() au début de votre script et ob_end_flush() à la fin. En utilisant ces fonctions, vous pouvez éditer des sessions après l'écho du contenu.

Voir this answer pour plus d'informations.

Edit:
Comme @ccKep a dit que vous pouvez toujours changer la variable $_SESSION ($_SESSION['something'] = 'else') après avoir envoyé les en-têtes. Vous ne pouvez pas démarrer ou détruire une session après l'envoi des en-têtes.

+0

Merci d'avoir éclairci ça! –

+0

Cela pourrait être un peu déroutant, bien sûr, vous pouvez changer les variables '$ _SESSION' même après avoir déjà envoyé la sortie. C'est le 'session_start' qui doit précéder (puisqu'il déclare l'identifiant de session dans le cookie). – ccKep