0

ページを更新するたびに、post配列に同じ値が格納されます。送信後、エコー結果を更新した後にのみエコーステートメントを実行したい。

<?php
if(isset($_POST['submit'])) 
{ 
$name = $_POST['name'];
echo "User name : <b> $name </b>";


}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="name"><br>
<input type="submit" name="submit" value="Submit Form"><br>
</form>
4

4 に答える 4

2

GETまたはPOSTメソッドを使用しているかどうかに関係なく、フォームだけでは、それが更新であるか、最初の送信であるかを確認することはできません。

単一のメッセージを確実にするには、次のことを行う必要があります。

a。リクエストを処理した後、ユーザーを別の場所にリダイレクトします。

if(isset($_POST['submit'])) {
  // process data
  header("Location: new-url");
}

そして、他のURLにメッセージを表示します。

b。フォームがすでに処理されたことを示すCookie/セッション変数を設定します。

if(isset($_POST['submit']) && !isset($_SESSION['form_processed'])) {
  $_SESSION['form_processed'] = true;
}

この2番目のアプローチでは、ユーザーがブラウザを閉じるまでフォームが強制終了されるため、フォームに別の非表示フィールドを保存し、それをセッションに保存するなど、より複雑な操作を行う必要があります。

于 2013-01-10T08:03:25.830 に答える
1

フォームを送信してから結果のページを更新すると、ブラウザはフォームを再投稿します(通常は最初にプロンプ​​トが表示されます)。そのため、POSTデータは常に存在します。

オプションとして、セッション変数を保存してフォームに送信し、フォーム処理コードで一致するかどうかを確認して、再投稿かどうかを判断します。

フォーム内:

<input type="hidden" name="time" value="<?php echo $time; ?>" />

PHPの場合:

session_start();

if(isset($_POST['submit'])) 
{
    if(isset($_SESSION['time']) && $_SESSION['time'] == $_POST['time'])
    {
        echo "User name : <b> $name </b>";
    }
}

$time = $_SESSION['time'] = time();

別のオプションは、投稿データの処理後にリダイレクトすることです。

if(isset($_POST['submit'])) 
{
    ...
    ...

    header('Location: ' . basename($_SERVER['PHP_SELF']));
    exit();
}
于 2013-01-10T08:00:37.907 に答える
0

$nameすでに表示されているかどうかの状態を維持する必要があります。最も簡単な方法は、おそらくブラウザのCookieでその状態を維持することです。

<?php
$nonce = $_COOKIE['nonce'];
$new_nonce = mt_rand();
setcookie('nonce', $new_nonce);
if(isset($_POST['submit']) && $_POST['nonce'] == $nonce) 
{ 
    $name = $_POST['name'];
    echo "User name : <b> $name </b>";
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="nonce" value="<?php echo $new_nonce ?>">
<input type="text" name="name"><br>
<input type="submit" name="submit" value="Submit Form"><br>
</form>

問題

  • 古い変数でユーザーの「セッション」を汚染しています。
  • これは、ユーザーが同じページに対して複数のウィンドウ(またはタブ)を開いた場合に機能しなくなります。これを修正するには、nonceCookieをナンスの配列に変更し、それに応じて更新する必要があります。
于 2013-01-10T08:10:24.030 に答える
-1

送信後にページを更新したい場合

<form method="get"

フォームに大量のデータがなく、$_POST変数の代わりに$_GETを使用する必要がある場合は、正しい方法ですが、このロジックは適切ではありません。このスクリプトをリファクタリングする必要があります。

<?php
if(isset($_POST['submit'])) 
{ 
$name = $_POST['name'];
echo "User name : <b> $name </b>";
unset($_POST['submit']);
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="name"><br>
<input type="submit" name="submit" value="Submit Form"><br>
</form>
于 2013-01-10T07:57:39.197 に答える