2013-01-21 63 views
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} 

我該怎麼分配消息時,我重定向回?

回答

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} 
+0

沒有的功能運行每次有人訪問該網頁?這會影響服務器的速度或者其他什麼? – shnisaka

+1

@shnisaka不,它不會影響服務器的速度,所以你需要重新考慮它......並且這個功能只會在你有會話閃存消息的情況下運行。 –

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); 
} 

然後,只需使用您的形式來檢查錯誤。

希望這有助於