質問

私は、次のコードを自分のサイト(phpをsmartyにしたがってうリスクを回避するために、形resubmittingがっf5:

if ($this->bln_added == false) {
    if (isset($_POST['submit'])) {
        $this->obj_site->obj_smarty->assign('title', $_POST['tas_heading']);
        $this->obj_site->obj_smarty->assign('desc', $_POST['tas_description']);
    }
} else {
    $this->obj_site->obj_smarty->assign('title', '');
    $this->obj_site->obj_smarty->assign('desc', '');
    unset($_POST);
}

bln_addedがfalseの場合、デフォルトが変更真のフォームが正しく提出する。のsmarty変数のタイトルおよびdesc使用されるテンプレートの形でコンテンツがありがある場合、ユーザーのエラーに変更する必要がありうに入力します。

場合に提出しを設定しまbln_added=true、その少しのコードなどの設備を導入し、試作から形の分野でも空$_POST.だっf5のデータは存在します。

そのアイデア?

役に立ちましたか?

解決

あなたの方法は、理論的に仕事ができるが、はるかに簡単な方法があります。

正常にフォームを送信した後、リダイレクトを行います。どこにそれは問題ではありませんが、それは、$ _POSTをクリアします。

header('Location: http://www.example.com/form.php');
あなたはすでににしているページにリダイレクトするように

あなたのケースでは、それが聞こえます。あなたは確認メッセージを表示したい場合は、URLに$ _GETパラメータを追加します。

この情報がお役に立てば幸い、

トム

他のヒント

ソリューションは、一般的にポスト/リダイレクト/取得する <として知られている模様であります/ P>

フォームを処理するための最良の方法は、自己提出し、リダイレクトを使用することです。このような何かます:

if (isset($_POST)) {
  // Perform your validation and whatever it is you wanted to do
  // Perform your redirect
}

// If we get here they didn't submit the form - display it to them.

CodeIgniterのフレームワークの

function index() {
  $this->load->library('validation');
  // Your validation rules

  if ($this->form_validation->run()) {
    // Perform your database changes via your model
    redirect('');
    return;
  }
  // The form didn't validate (or the user hasn't submitted)
  $this->load->view('yourview');
}

あなたは、フォーム提出AJAXウェイへを書き換えることができます。あなたはHTMLコンテンツを表示する必要がある場合は、JSON形式でそれを返すとJavaScriptを挿入します(たとえば、jQueryの。)

私は、この(サポートに対するコミットメントによる:

  1. に追加ユニークな識別子(id+カウンター)に基づかない時間()(!!!)

  2. への投稿は、別のファイル(postform.php)このチェックである、というユニークな識別子

  3. a)の場合のセッション固有の識別子見つかりませんでした:ポストデータベースへの入セッション固有の識別子

    b)の場合のセッション固有の識別子を発見した:何もしない

  4. 後は3a/3bへのリダイレクトに結果ページのヘッダー付き('場所: http://mydomain.com/mypage')

結果は:
な再提出行動はリフレッシュ/backbuttonのみを再提出警告をダブルクリックしbackbuttonが再提出)

成功した後のアクションの後の使用ヘッダーの場所

header('Location: '.$_SERVER['HTTP_REFERER']);
私はいくつかのデータを保存した後、私は、例えば、私のコードの最後にヘッダ()またはexit()のいずれかを使用する場合は、

これは私のために動作します。

私が見つけた最良の方法は、JavaScriptとCSSを使用しています。共通PHPリダイレクション方式ヘッダ( '場所: http://www.yourdomain.com/urlする);動作しますが、それは「警告:ヘッダー情報を変更することはできません - すでに送られたヘッダ」警告原因になりますワードプレス、DrupalのようなさまざまなフレームワークとCMS内などだから、私の提案は、以下のコード

に従うことです
echo '<style>body{display:none;}</style>'; 
echo '<script>window.location.href = "http://www.siteurl.com/mysuccesspage";</script>'; 
exit;

スタイルタグは、そうでない場合は、ユーザが二回ロードされたページのように感じるかもしれませんが重要です。私たちは、本体表示なしでスタイルタグを使用して、ページを更新した場合、ユーザーエクスペリエンスは、PHPのヘッダと同じようになります( '場所:....);

私はこれが役立つことを願っています:)

ポストが必要ではなく、不足しているの後にヘッダーをリダイレクトします。

PHP側で正常にフォームを送信した後、リダイレクトを行います。例えば。ヘッダ( '場所: http://www.example.com/form.php の')。

しかし、それは十分ではありません。一部のユーザーは二回(ダブルクリック)リンクを押してください。 JavaScriptは最初のクリックした後、送信ボタンを無効にすることを要求されます。

多分それは最善の解決策(迅速に行う)ではありませんが、私はそれをテストしてきたし、それは動作しますが、私自身のものを試してみてください。 Chromeでテストしました。 それが

BRををどのように見えるかを見るにはクリックしてください
 <?php 
session_start(); // Start session
?>
<html>
 <head>
  <title>
    Test
  </title>
 </head>
 <body>
   <form name="test" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
   <input type="text" name="name"><br>
   <input type="submit" name="submit" value="Submit Form"><br>
  </form>

  <?php

  if(isset($_POST['submit']))
    {
     $_SESSION['name'] = $_POST['name']; //  Assign $_POST value to $_SESSION variable
      header('Location: refresh.php'); // Address of this - reloaded page - in this case similar to PHP_SELF
    } else session_destroy(); // kill session, depends on what you want to do / maybe unset() function will be enough

  if(isset($_SESSION['name']))
    {
     $name = $_SESSION['name'];

     echo "User Has submitted the form and entered this name : <b> $name </b>";
     echo "<br>You can use the following form again to enter a new name."; 
    }
  ?>
 </body>
</html>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top