質問
私は持っている buy.php
とともに 形状 どこに入るのか 品目、数量、配送データなど
をクリックすると、 送信ボタン, 、にポストバックします buy.php
($_SERVER['PHP_SELF'])
そしていくつかのデータ検証を行います。
フィールドが欠落しているかエラーがある場合、それらは強調表示されます。すべてが正しければ、保存します $_POST
のデータ $_SESSION
変数を指定してから、 header('Location: check.php')
, ここでは、購入者が実際に購入する前に最後に情報を確認できるようにデータを表示します。
さて、もし私がそこにいるなら check.php
そして「戻る」ボタンを押して、 buy.php
内容を変更できるようにするため、ブラウザーは POST データを再送信するかどうかを尋ねます。それを避けようとしているんです。
PHP マルチフォーム検証に関する良いアドバイスや良い実践方法を持っている人はいますか?
また、ユーザーが記入できるページが n ページあった場合、 buy.php, buy2.php, ... buyn.php
check.php が導入される前でも、同じ考え方がまだ有効でしょうか?
解決
セッション オブジェクトに保存した後、buy.php へのリダイレクトを行うことができます。これにより、サーバーが check.php へリダイレクトされます。これは、ユーザーがクリックして戻ると、POST リクエストではなく GET リクエストに戻ることを意味します。
他のヒント
はい - 上記に同意します。私はいつも次のことをします redir
最後の投稿から離れているため、「戻る」をクリックするとエラーが発生せずに元に戻されるか、再送信されます。合併症も避けられます。いつでもタグ付けできます redir
リンクページ ?m
または &m
(つまり: page.php?m
)そしてこれをページの上部に置きます:(使用 elseif
その後)
if (isset($_GET['m'])) {
echo 'order placed.';
}
else {
//...
}
すべてを 1 ページにまとめることもできます。送信ボタンに名前を付けるだけです submit1
, submit2
, 、 のように:(送信に画像を使用する場合は、 $_POST['submit1_x']
:)
if (isset($_POST[submit1]) {
//validate + save session data from form1
//display form 2
} else if(isset($_POST[submit2])) {
//validate + save session data from form2
//display form 3
} else {
//display first form
//<input type="submit" name="submit1" value="Continue">
}