0

と呼ばれるドキュメントがあり、と呼ばeditprofile.phpれる別のドキュメントがありaction.phpます。ユーザーがを使用して情報を送信したときeditprofile.php。情報は、私が情報を処理してmysqlに送信する場所に送られますPOSTaction.php送信後、すべてが正常に変更されたことを示すメッセージを表示したいと思います。私はこれを使用しました:

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 に答える