我有一个名为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}
如何在重定向时分配消息?
答案 0 :(得分: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);
}
然后只需在表单中使用它来检查错误。
希望这有帮助
答案 1 :(得分: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}