2017-03-17 4 views
-1

セッション変数にエラーメッセージが1回だけ表示されるようにしました。私の方法は、それがそこにあるかどうかを確認し、それをエコーし​​て後に解除することです。エコー後にセッション変数を解除できません

<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>

私が試してみました= "" だけでなく!

<?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']); 
 

 
?>

何も機能しません。私は私のすべてのページにsession_start()を持っています。各リフレッシュがまだ表示されます。

EDIT:

は明らかに私はPHPに新しいですし、私は今、ユーザーからのフィードバックを与えるためにセッションを使用することは愚かであることがわかります。私はエラーメッセージを表示するためにGETを使用して終了し、それは私の必要性に最適です。助けてくれてありがとう!

+1

まだセッションを開始していない場合は、セッションを開始する必要があります。 –

+0

<?php session_start(); ?>すべての私のページオフフック –

+0

エラーをチェックしてください。http://php.net/manual/en/function.error-reporting.php - HTMLソース、 'var_dump()'、echoはすべて便利なデバッグツールです。 –

答えて

0

セッションはヘッダーで宣言されます。ヘッダーは、他のコンテンツの前に送信され、コンテンツが含まれているか、またはテキスト(HTMLなど)のみがヘッダーを終了します。つまり、echoの後にセッションを変更することはできません。

ただし、PHP output bufferingを使用する方法があります。スクリプトの最初にob_start()、最後にob_end_flush()を使用します。これらの機能を使用すると、コンテンツをエコーし​​た後でセッションを編集できます。

詳細については、this answerを参照してください。

編集:
@ccKepは、あなたがまだヘッダを送信した後に$_SESSION変数($_SESSION['something'] = 'else')を変更することができます言ったように。ヘッダーが送信された後でセッションを開始または破棄することはできません。

+0

これをクリアしてくれてありがとう! –

+0

これはちょっと混乱しているかもしれません。もちろん、すでに出力を送信した後でも '$ _SESSION'変数を変更することはできます。それは前に来なければならない 'session_start'です(それはセッションIDをクッキーに宣言しているためです)。 – ccKep

関連する問題