Отображение $ _SESSION не отражает изменения после однократного нажатия кнопки отправки - PullRequest
0 голосов
/ 27 мая 2020

Я создаю страницу профиля, где можно редактировать имя пользователя. Кажется, я не могу понять, как обновить имя пользователя, которое отображается на верхней странице (например, Привет, Кана!) После успешного редактирования.

Имя создается с использованием переменной сеанса в вверху моей страницы $ _ SESSION ['username']

<?php
session_start();
if(isset($_POST['submit']) && isset($_SESSION['newusername'])){
    unset($_SESSION['username']); //clear existing username session
    $_SESSION['username'] = $_SESSION['newusername']; //replace with the new username
    echo $_SESSION['username'];
} else {
    echo $_SESSION['username'];
}
?>

После нажатия кнопки отправки с другим именем, установленным во вводе текста, оно должно измениться, но это не так. Это строки кодов после кода, который я упомянул выше.

<?php
$textinput = $_POST['textinput']; 

if(isset($_POST['submit']))
{
if(strlen($_POST['textinput']) < 2)) {
$errormessage = 'too short';
}
else
{
$_SESSION['newusername'] = $textinput; //setup a new session for the new username to be used above.
}
}
?>

Обратите внимание, что два цитируемых набора кодов находятся на одной странице.

Имя все еще отображается предыдущее имя, которое якобы перезаписано. Я попытался обновить страницу, но она по-прежнему не меняется, мне нужно отправить еще раз (второй раз), чтобы отобразить новое имя.

1 Ответ

2 голосов
/ 27 мая 2020

Вы можете и должны радикально упростить свой код. В настоящее время здесь есть множество ненужных операций. Семантически продумайте, что вы хотите выполнить. sh:

Если пользователь отправляет свое имя, обновите сеанс новым значением. Затем выведите значение.

Вот и все. Пусть семантика того, что вы хотите достичь, sh укажет, как вы sh этого добьетесь. Запустить сеанс, проверить сообщение формы, условно обновить значение, вывести текущее состояние значения. Например:

<?php
session_start();

// update the value
if(isset($_POST['submit'])) {
    $_SESSION['username'] = $_POST['textinput'];
}

// output the value
echo $_SESSION['username'];
?>

Возможно, вы захотите добавить разумное значение по умолчанию при отсутствии имени пользователя. Это будет примерно так:

<?php
session_start();

// set a default value
if (!isset($_SESSION['username'])) {
    $_SESSION['username'] = "Default User";
}

// update the value
if(isset($_POST['submit'])) {
    $_SESSION['username'] = $_POST['textinput'];
}

// output the value
echo $_SESSION['username'];
?>
...