PHP — использование сеансов для обновления информации для входа

У меня есть страница входа, которая направлена ​​​​на другую страницу php. Эта php-страница принимает введенное пользователем имя пользователя, сохраняет его как переменную сеанса, а затем перенаправляет на home.php (этот код запускается после проверки информации).

    $username = $_POST['username'];
    $update = mysql_query("UPDATE usertable SET loginStatus='Logged in' WHERE userName = '$username'");
    session_start();
    $_SESSION['loggedin'] = true;
    $_SESSION['username'] = $_POST['username'];
    header("Location: home.php");

Это обновит соответствующий столбец без проблем. Я поместил следующий код на страницу home.php, чтобы отобразить статус входа каждого пользователя.

    session_start();
    $username = $_SESSION['username'];
    if(empty($_SESSION['username'])){
    header("Location: login.php");
    }

    $result = mysql_query("SELECT * FROM usertable");
    echo "Logged in as ". $_SESSION['username'];
    echo "<br />";
    while($row = mysql_fetch_array($result))
    {
    echo $row['userName'] . " " . $row['emailAddress'] . " " .$row['loginStatus'];
    echo "<br />";
    }

    ?>

    <p><a href=logout.php>Click here to logout</a></p>

Когда пользователь щелкает ссылку выхода, он направляет его на следующую php-страницу:

    <?php
    session_start();
    $username = $_SESSION['username'];
    $update1 = mysql_query("UPDATE usertable SET loginStatus='' WHERE userName = '$username'");
    echo $username;
    ?>
    <?php
    session_destroy();
    ?>
    <h1>You are now logged out</h1>
    <p><a href=login.php>login</a></p>     

Здесь у меня есть моя проблема. MySQL не обновляет loginStatus соответствующего имени пользователя. Все имеющиеся у меня переменные ($username, $username1) выводят правильную информацию, когда я их тестирую. В случае страницы выхода я знаю, что $_SESSION['username'] хранит правильное имя пользователя, но я не могу понять, почему он не обновит значение в базе данных.


person TaylorSmolik    schedule 11.03.2013    source источник
comment
Я вижу, вы не проверяете результат своего запроса на обновление; это false возможно? Вы могли бы echo запросить, он выглядит странно?   -  person Ja͢ck    schedule 11.03.2013
comment
Где соединение с базой данных на странице выхода?   -  person EmCo    schedule 11.03.2013
comment
эхо $update1 со страницы выхода ничего не возвращает, если вы это имели в виду?   -  person TaylorSmolik    schedule 11.03.2013
comment
О, неловко, вы были правы, EmCo, мне нужно было начать соединение на странице. Это решает мою проблему.   -  person TaylorSmolik    schedule 11.03.2013
comment
Это игрушка для хакеров. Пожалуйста, узнайте об инъекциях mysql.   -  person Ron van der Heijden    schedule 11.03.2013


Ответы (2)


Если это все на вашей странице, возможно, у вас нет подключения к базе данных. Проверьте возвращаемое значение вашего запроса, по крайней мере,

$update1 = mysql_query("UPDATE usertable SET loginStatus='' WHERE userName = '$username'") or die(mysql_error());

и вы должны увидеть реальную причину.

Кроме того, вам следует подумать о переходе на mysqli или PDO, потому что функции mysql_* уже устарели.

person Olaf Dietsche    schedule 11.03.2013

В чем именно ваша проблема??... обновление базы данных при входе в систему или выборка базы данных на странице home.php или обновление базы данных на странице выхода из системы... также, сколько раз вы запускаете свои сеансы, на всех трех страницах есть функции запуска сеанса.

person jcobhams    schedule 11.03.2013
comment
проблема заключается в обновлении на странице выхода, у меня сложилось впечатление, что запуск сеанса необходим для извлечения переменных. - person TaylorSmolik; 11.03.2013