質問
私は、次のコードを自分のサイト(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.
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の。)
私は、この(サポートに対するコミットメントによる:
に追加ユニークな識別子(id+カウンター)に基づかない時間()(!!!)
への投稿は、別のファイル(postform.php)このチェックである、というユニークな識別子
a)の場合のセッション固有の識別子見つかりませんでした:ポストデータベースへの入セッション固有の識別子
b)の場合のセッション固有の識別子を発見した:何もしない
後は3a/3bへのリダイレクトに結果ページのヘッダー付き('場所: http://mydomain.com/mypage')
結果は:
な再提出行動はリフレッシュ/backbuttonのみを再提出警告をダブルクリックしbackbuttonが再提出)
成功した後のアクションの後の使用ヘッダーの場所
header('Location: '.$_SERVER['HTTP_REFERER']);
これは私のために動作します。
私が見つけた最良の方法は、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>