重定向后显示消息

时间:2014-04-06 17:57:32

标签: php smarty

在提交表单然后重定向后显示成功消息的最佳方式是什么。

我正在开发一个带有智能模板引擎的脚本,我不想使用javascript,因为我希望它尽可能简单,以便用户设计自己的模板,并且我尝试使用会话来显示重定向后似乎取消设置的消息

表格

<form action="" id="comment_form" method="POST">
    <input type="hidden" name="movie_id" id="page_id" value="{$mov.mid}" />
    <input type="hidden" name="user_id" id="user_id" value="{$logged_id}" />
    <input class="span2" name="comment" type="text" />
    <button class="btn" name="add_comment" type="submit">Add Comment</button>
</form>

PHP

if (isset($_POST['add_comment'])) {
    if (!empty($_POST['comment'])) {
        $user_id = $logged_id;
        $post_comment = mysqli_real_escape_string($con, $_POST['comment']);
        $movie->AddMovieComments($con, $movie_id,  $user_id, $post_comment);
        $_SESSION['insert'] = 'success';
        header ('Location: '.$_SERVER['REQUEST_URI']);
    } else {
        $_SESSION['insert'] = 'empty';
    }
}

现在尝试在tpl中显示成功

{if isset($smarty.session.insert)}
    <div class="alert alert-success">
        <button type="button" class="close" data-dismiss="alert">&times;</button>
        <h4>Success</h4>
        Your Comment was successfully added
    </div>
{/if}
{php}unset($_SESSION['insert']);{/php}

所以任何人都可以帮助我,告诉我最好的方法,或者告诉我为什么它在显示之前没有被设置。

2 个答案:

答案 0 :(得分:0)

尝试

if( isset($_SESSION['insert']) && $_SESSION['insert'] == 'success')
{
//Your alert
unset($_SESSION['insert']);
}

答案 1 :(得分:0)

我认为SESSION变量不是最好的方法。

在我们的模板中,进行简单的条件检查以确定是否存在Smarty变量:

{if $success}Your comment was added{/if}

然后,在处理事务的PHP中,简单地启动变量,根据结果将其设置为true或false,并在显示模板之前将其分配给Smarty

$success = false;
if (!empty($_POST['comment'])) {
    $success = true;
}
$smarty->assign("success",$success);
$smarty->display("template.tpl");

当然,在你使$ success = true之前应该验证插入是否成功,但是你得到了漂移。