在会话中存储错误消息并在另一页上显示

时间:2015-01-31 12:25:56

标签: php html html5 session

目前我手中有一个场景。我有2页index.php and code.php.

用户首先进入index.php页面,然后重定向到code.php页面并返回index.php页面。

如果在code.php页面中发生了一些错误,我需要在index.php页面重定向到索引页面时显示该错误。

我将错误信息存储在这样的会话中,然后将页面bsck重定向到index.php页面

$_SESSION["errormsg"]='please try again';
header("Location: index.php");

但是如果我在index.php页面中回显此会话消息,它会在页面加载时显示,但是当索引页面位于code.php页面之后我只需要一次。任何人都可以告诉它如何做到

5 个答案:

答案 0 :(得分:3)

我认为,通过会话显示错误消息的最佳方式是使用单独的消息文件,如message.php。

第1步: 你只需要在code.php。

中设置会话和错误信息

$ _ SESSION [“errormsg”] ='请再试一次';

第2步:

  • 现在创建一个名为“message.php”的新文件。

  • 将会话错误消息存储到新变量中。

$ error = $ _SESSION [“errormsg”];

第3步:

然后,取消设置会话或销毁会话。

 // remove all session variables
 session_unset(); 

 // destroy the session 
 session_destroy(); 

第4步:

  • 现在在格式化的div标签中回显该错误变量,以便您的错误看起来很好并且也引人注目。

<div id='alert'><div class=' alert alert-block alert-info fade in center'>$error</div></div> 
第5步:

  • 现在,在index.php文件中,有一个方法来检查是否设置了会话变量“errormsg”。
  • 如果设置了会话变量,则立即调用message.php文件。它将在index.php文件中回显该div。

我认为这会给你完整的答案。

答案 1 :(得分:2)

使用简单条件检查特定会话是否已设置。

if(isset($_SESSION["errormsg"])) {
    $error = $_SESSION["errormsg"];
    session_unset($_SESSION["errormsg"]);
} else {
    $error = "";
}

echo $error;

答案 2 :(得分:0)

您可以在页面开头使用session_start(),因为您在不实际启动会话的情况下分配会话变量值。

您也可以使用条件

<?php
session_start();
if (isset($_SESSION['variablename']))
{
 //your code
}
?>

答案 3 :(得分:0)

//Ensure that a session exists (just in case)
if( !session_id() )
{
    session_start();
}

功能

/**
 * Function to create and display error and success messages
 * @access public
 * @param string session name
 * @param string message
 * @param string display class
 * @return string message
 */
function flash( $name = '', $message = '', $class = 'success fadeout-message' )
{
    //We can only do something if the name isn't empty
    if( !empty( $name ) )
    {
        //No message, create it
        if( !empty( $message ) &amp;& empty( $_SESSION[$name] ) )
        {
            if( !empty( $_SESSION[$name] ) )
            {
                unset( $_SESSION[$name] );
            }
            if( !empty( $_SESSION[$name.'_class'] ) )
            {
                unset( $_SESSION[$name.'_class'] );
            }

            $_SESSION[$name] = $message;
            $_SESSION[$name.'_class'] = $class;
        }
        //Message exists, display it
        elseif( !empty( $_SESSION[$name] ) &amp;& empty( $message ) )
        {
            $class = !empty( $_SESSION[$name.'_class'] ) ? $_SESSION[$name.'_class'] : 'success';
            echo '<div class="'.$class.'" id="msg-flash">'.$_SESSION[$name].'</div>';
            unset($_SESSION[$name]);
            unset($_SESSION[$name.'_class']);
        }
    }
}


//Set the first flash message with default class
flash( 'example_message', 'This content will show up on example2.php' );

//Set the second flash with an error class
flash( 'example_class', 'This content will show up on example2.php with the error class', 'error' );

显示 该 消息

<?php flash( 'example_message' ); ?>
<?php flash( 'example_class' ); ?>

答案 4 :(得分:0)

问题已在3年前得到解答,但我认为我可以在同一主题中添加一些内容。我希望它有所帮助。

如果每次打开页面时都会显示index.php页面中的会话消息,则表示会话变量“errormsg”尚未清除。

因此,如上所示,请在显示后使用unset($_SESSSION['errormsg']);将其删除。

但是,当您执行此操作时,会出现另一个问题,错误消息将不会在code.php中显示此代码:

$_SESSION["errormsg"]='please try again';

header("Location: index.php");

因为当您重定向到索引页面时,会在显示消息之前清除会话变量。

解决这个问题:

避免多次重定向页面。

在code.php中

使用:

$_SESSION["errormsg"]='please try again';

没有重定向到index.php文件。