2015-11-26 3 views
1

Я создал рабочий сеанс (с помощью здесь я мог бы добавить), и мне удалось получить его для хранения переменной в нескольких файлах без каких-либо проблем.PHP Session не установлен, если я не обновляюсь

Когда $ username не заполнено, есть приглашение предоставить пользователю свое имя пользователя и после отправки $ username присваивается значение имени пользователя, а форма заменяется текстом, больше не запрашивая пользователя ввести имя пользователя, теоретически.

Вот код, я прямо сейчас:

<?php 
session_start(); 

?> 

<header> 
    <!DOCTYPE html> 
    <link rel="stylesheet" type="text/css" href="style/main.css"> 
    <title>webshop</title> 

</header> 

<div id="LogIn"> 
    <?php 
    if(isset($_SESSION['username'])){ 
    echo 'Current session username: '.$_SESSION['username']; 
    echo '<br /><a href="logout.php">Destroy current session</a>'; 
} else { 
     ?> 
     <form class="form1" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" id="form1"> 
      <fieldset> 
       <ul> 
        <p>Please enter your username to continue to the webshop.</p> 
        <label for="name">User Name:</label><span><input type="text" name="username" placeholder="User Name" 
                    class="required" role="input" 
                    aria-required="true"/></span> 

        <input class="submit transparentButton" value="Next" type="submit" name="Submit"/> 
       </ul> 
       <br/> 
      </fieldset> 
     </form> 
     <?php 

     if (isset($_POST['Submit'])) { 
      $_SESSION['username'] = $_POST['username']; 
     } 

    } 
    ?> 
</div> 


<a href="cart.php">cart</a><br /> 
<a href="index.php">index</a> 

Проблема у меня в том, что после того, как пользователь ввел свое имя пользователя в форму и нажимает кнопку «Далее», перезагружается страницы и форма все еще там. Если вы затем обновите эту страницу, она заменяет форму текстом и переменной сеанса $ username, обработанной как обычный текст, с ссылкой на выход (session_destroy()).

Мой вопрос: почему мне нужно обновить страницу для переменной сеанса, которая будет отображаться правильно? Это как-то связано с утверждением if?

Заранее спасибо.

ответ

6

У вас просто есть проблема с логикой/упорядочением.

Переместить этот кусок кода, который в настоящее время ниже вашей формы:

if (isset($_POST['Submit'])) { 
     $_SESSION['username'] = $_POST['username']; 
    } 

в верхней части файла, чуть ниже session_start(), и он будет вести себя, как вы намерены.

Способ, которым написан ваш код сейчас, переменная сеанса не установлена ​​до тех пор, пока на дисплее не появится форма. Вы хотите, чтобы переменная сессии была установлена ​​до того, как отобразится форма (если на самом деле задано имя пользователя $ _POST).

+0

Ничего себе, это было легко, спасибо большое! Я отмечу, как разрешено через несколько минут, когда смогу, спасибо большое! –