2017-03-17 8 views
-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()가 있습니다. 각 리프레시가 계속 표시됩니다.

편집 :

은 분명히 내가 PHP 새로운 오전과 내가 지금 사용자 피드백을 제공하는 세션을 사용하는 것은 어리석은 것을 알 수있다. 나는 오류 메시지를 표시하기 위해 GET을 사용하는 것을 끝내었고 그것은 나의 필요를 위해 아주 잘 작동한다. 도와 주셔서 감사합니다!

+1

아직 세션을 시작하지 않은 경우 –

+0

모든 페이지에서 온 오프 –

+0

오류를 확인한 다음 http://php.net/manual/en/function.error-reporting.php - HTML 소스보기, var_dump() 및 echo는 모두 유용한 디버깅 도구입니다. –

답변

0

세션이 헤더에 선언되어 있습니다. 다른 콘텐츠보다 먼저 헤더가 전송되고 콘텐츠가 있거나 텍스트 만 있으면 (예 : HTML) echo 헤더가 끝납니다. 즉, echo 처리 후 세션을 변경할 수 없다는 의미입니다.

그러나 PHP output buffering을 사용하는 방법이 있습니다. 스크립트 시작 부분에 ob_start()을 사용하고 마지막에는 ob_end_flush()을 사용합니다. 이 기능을 사용하면 내용을 에코 한 후 세션을 편집 할 수 있습니다.

자세한 내용은 this answer을 참조하십시오.

편집 :
@ccKep는 여전히 헤더를 보낸 후 $_SESSION 변수 ($_SESSION['something'] = 'else')를 변경할 수 있습니다 말했듯이. 헤더가 전송 된 후에는 세션을 시작하거나 종료 할 수 없습니다.

+0

삭제 해 주셔서 감사합니다! –

+0

이것은 다소 혼란 스러울 수 있습니다. 물론 출력을 보내더라도'$ _SESSION' 변수를 변경할 수는 있습니다. 그것은 (세션 ID를 쿠키에 선언했기 때문에) 그 전에 올 필요가있는'session_start'입니다. – ccKep