0

我有一个名为的文件editprofile.php,我还有另一个名为action.php. 当用户使用editprofile.php. 信息被POST编辑到action.php我处理信息的地方并将其发送到mysql。发送后,我想显示一条消息,表明一切都已成功更改。我用这个:

if $everythingisdone{
$smarty->assign('sucess', 'Your changes have been made');
header('Location: ' . $_SERVER['HTTP_REFERER']);
}

我被重定向到上一页,但没有消息,即使我有这个editprofile.tpl

{if $sucess}
<div class="sucess">
{$sucess}
</div>
{/if}

重定向回来时如何分配消息?

4

2 回答 2

1

你可以这样做:

//custom smarty function to set session flash messages
function smarty_function_set_flash($params, $smarty) {
    $flash = "";
    if (isset($_SESSION['success'])) {
        $flash = $_SESSION['success'];
        $_SESSION['success'] = ""; //unset the session
    }
    return $flash; //return flash message
}

你的代码

....
if($everythingisdone) {
  $_SESSION['success'] =  'Your changes have been made';
  header('Location: ' . $_SERVER['HTTP_REFERER']);
}

并查看:

{if isset($smarty.session.flash) && $smarty.session.flash != ''}
    <div class="sucess">{set_flash}</div>
{/if}
于 2013-01-21T08:14:45.930 回答
1

您不能重定向到另一个页面并期望变量持续存在。当您调用$smarty->assign()该更改时,该更改将仅针对该特定页面请求持续存在,一旦您重定向它就不再存在了。

您可以使用 GET 参数执行此操作:

<?php
// action.php
if ($something) {
    header ("Location: " . $_SERVER['HTTP_REFERER'] . "?success=1");
    die;
}
else {
    header ("Location: " . $_SERVER['HTTP_REFERER'] . "?success=0");
    die;
}

然后editprofile.php您可以检查该值:

<?php
// editprofile.php
if ($_GET['success'] == '1') {
    // yes!
}
else {
    // aww :(
}

如果您不那样重定向,则没有必要这样做。为什么不将表单放在editprofile.php并提交到同一页面并检查那里的错误?设置标志变量并在表单未提交时显示错误消息:

<?php
if ($ok) {
    $smarty->assign ('form_processed', true); 
}
else {
    $smarty->assign ('form_processed', false); 
}

然后只需在您的表单中使用它来检查错误。

希望这可以帮助

于 2013-01-21T08:05:12.137 回答