В основном у меня есть следующий код, который в настоящее время работает нормально, как ожидалось:
if ( isset($_SESSION['message']) )
{
echo '<p class="user_message">'.$_SESSION['message'].'</p>';
//unset( $_SESSION['message'] );
}
Как видите, unset () закомментирован. То, что я хочу сделать, это сбросить сообщение сеанса после того, как оно отразилось эхом. Однако когда я запускаю этот код без комментариев, переменная сеанса вообще не выводится?
Спасибо заранее.
РЕДАКТИРОВАТЬ:
Спасибо за ответ, однако это решение не работает и возвращает тот же результат, что и моя первоначальная попытка. Вот код, который определяет сообщение сеанса:
$_SESSION['message'] = "";
// We know user email exists if the rows returned are more than 0
if ( $result->num_rows > 0 ) {
$_SESSION['message'] = $_SESSION['message'].'User with this email already exists!<br />';
}
// Validate email address
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$_SESSION['message'] = $_SESSION['message'].'Email address is invalid, please try again!<br />';
}
// Validate Referral code
if ( $refby != "" ) {
if ( (count_digit($refby) > 0 && count_digit($refby) < 6) || count_digit($refby) > 6 ) {
$_SESSION['message'] = $_SESSION['message'].'Referral code is invalid!<br />';
} elseif ( !is_numeric($refby) ) {
$_SESSION['message'] = $_SESSION['message'].'Referral code is invalid!<br />';
}
}
// Validate password length
if ( count_digit($_POST['password']) < 6 ) {
$_SESSION['message'] = $_SESSION['message'].'Password invalid, must be more than 6 characters!<br />';
}
// Validate password confirmed
if ( $_POST['password'] != $_POST['confirm_password'] ) {
$_SESSION['message'] = $_SESSION['message'].'Your passwords do not match!<br />';
}
if ( count_digit($num1)>2 || count_digit($num2)>2 || count_digit($num3)>2 || count_digit($num4)>2 || count_digit($num5)>2 ) {
$_SESSION['message'] = $_SESSION['message'].'Please select your lucky numbers!<br />';
}
if ( $_SESSION['message'] != "" ) {
header("location: #register_content");
Тем не менее, я не понимаю, как код прекрасно работает до сброса переменной сеанса? хотя содержимое выводится до того, как переменная сеанса будет сброшена?
Большое спасибо
Вы можете использовать следующий подход:
if ( isset($_SESSION['message']) )
{
$message = $_SESSION['message'];
echo '<p class="user_message">'.$message.'</p>';
unset( $_SESSION['message'] );
}
Он распечатает данные, а затем сбросит их.
также не забудьте позвонить session_start()
в начале вашего сценария.
Так что для всех, кто заинтересован.
Это происходит из-за того, что скрипт продолжает работать, не совсем уверенный в том, как он работает, но в основном после удаления переменной сеанса скрипт больше не может ссылаться на него.
Как только переменная сеанса не установлена в сценарии, exit(0);
необходимо. Это решает проблему, и переменная сеанса сбрасывается, однако скрипт все еще выводит содержимое переменной сеанса до того, как он будет сброшен.