同じページでフォームを処理する方法と、別のプロセスページを使用する方法。現在、サインアップやコメントの送信などのために、データを検証してから送信し、home.phpにルーティングする2番目のページを使用しています。送信時に、2番目のページを使用するのではなく、ページ自体が検証されるようにするにはどうすればよいですか。
6 に答える
PHPに送信するようにフォームに指示してから、$_POST
フォーム処理の変数を確認できます。この方法は、エラーを設定してから、ユーザーが以前に送信した情報をそのままフォームに再読み込みできるため、エラーチェックに非常に適しています(つまり、送信が失われることはありません)。
「送信」ボタンをクリックすると、同じページに情報がPOSTされ、上部にPHPコードが実行されます。(チェックに基づいて)エラーが発生した場合、フォームはユーザーに再ロードされ、エラーが表示され、ユーザーがフィールドに入力した情報が表示されます。エラーが発生しない場合は、フォームの代わりに確認ページが表示されます。
<?php
//Form submitted
if(isset($_POST['submit'])) {
//Error checking
if(!$_POST['yourname']) {
$error['yourname'] = "<p>Please supply your name.</p>\n";
}
if(!$_POST['address']) {
$error['address'] = "<p>Please supply your address.</p>\n";
}
//No errors, process
if(!is_array($error)) {
//Process your form
//Display confirmation page
echo "<p>Thank you for your submission.</p>\n";
//Require or include any page footer you might have
//here as well so the style of your page isn't broken.
//Then exit the script.
exit;
}
}
?>
<form method="post" action="<?=$_SERVER['PHP_SELF']?>">
<?=$error['yourname']?>
<p><label for="yourname">Your Name:</label><input type="text" id="yourname" name="yourname" value="<?=($_POST['yourname'] ? htmlentities($_POST['yourname']) : '')?>" /></p>
<?=$error['address']?>
<p><label for="address">Your Address:</label><input type="text" id="address" name="address" value="<?=($_POST['address'] ? htmlentities($_POST['address']) : '')?>" /></p>
<p><input type="submit" name="submit" value="Submit" /></p>
</form>
$_POST
最も簡単な構成は、配列が空でないかどうかを検出することです
if(isset($_POST['myVarInTheForm'])) {
// Process the form
}
// do the regular job
ページのコード内でPOSTリクエストであったかどうかを確認してから、データを確認できます。GETリクエストの場合は、フォームを表示するだけです。
ただし、GETリクエストを通じて提供される別のページに、成功したフォームの送信結果を表示することをお勧めします。つまり、成功したフォームのPOSTには、成功ページにリダイレクトして回答する必要があります。
もちろん、ハンドラースクリプトを非同期で呼び出し、送信ページを更新して成功メッセージで更新するAJAXリクエストを調べることもできます。これにより、「同じページ処理」の印象が与えられます。つまり、ページを更新する必要はありません。
しかし、それはあなたが達成しようとしている効果に本当に依存します。
@Michael Irigoyen:正常に動作しますが、最初のrn/loadでは次のように表示されます。
「注意:未定義の変数:28行目のC:\ xampp \ htdocs\same_page.phpのエラー」
この通知を処理する方法は?
今すぐ入手:「エラーを抑制するためにisset、@などを使用しました...」「魅力のように機能します!!!」「今度は自分のコードで試してみます...」
ありがとうメッセージを保存し、セッション変数を使用して更新しました。
if(!is_array($error)){
$_SESSION['message'] = 'Thank You!';
header('Location: yourpage.php');
exit();
}
次に、フォームの上部でこれを使用します。
if(isset($_SESSION['message'])){
echo $_SESSION['message'];
unset($_SESSION['message'];
}
これにより、ページが更新されてメッセージが表示されます。その後、ページが更新された場合、セッション変数が空になるため、ありがとうございますは表示されません。これはフラッシュメッセージと呼ばれます。