7

同じページでフォームを処理する方法と、別のプロセスページを使用する方法。現在、サインアップやコメントの送信などのために、データを検証してから送信し、home.phpにルーティングする2番目のページを使用しています。送信時に、2番目のページを使用するのではなく、ページ自体が検証されるようにするにはどうすればよいですか。

4

6 に答える 6

14

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>
于 2011-01-24T15:03:48.347 に答える
7

$_POST最も簡単な構成は、配列が空でないかどうかを検出することです

if(isset($_POST['myVarInTheForm'])) {
  // Process the form
}

// do the regular job
于 2011-01-24T14:56:09.790 に答える
2

ページのコード内でPOSTリクエストであったかどうかを確認してから、データを確認できます。GETリクエストの場合は、フォームを表示するだけです。

ただし、GETリクエストを通じて提供される別のページに、成功したフォームの送信結果を表示することをお勧めします。つまり、成功したフォームのPOSTには、成功ページにリダイレクトして回答する必要があります。

于 2011-01-24T14:56:39.383 に答える
1

もちろん、ハンドラースクリプトを非同期で呼び出し、送信ページを更新して成功メッセージで更新するAJAXリクエストを調べることもできます。これにより、「同じページ処理」の印象が与えられます。つまり、ページを更新する必要はありません。

しかし、それはあなたが達成しようとしている効果に本当に依存します。

于 2011-01-24T15:02:58.390 に答える
0

@Michael Irigoyen:正常に動作しますが、最初のrn/loadでは次のように表示されます。

「注意:未定義の変数:28行目のC:\ xampp \ htdocs\same_page.phpのエラー」

この通知を処理する方法は?

今すぐ入手:「エラーを抑制するためにisset、@などを使用しました...」「魅力のように機能します!!!」「今度は自分のコードで試してみます...」

于 2011-07-25T05:42:52.800 に答える
0

ありがとうメッセージを保存し、セッション変数を使用して更新しました。

if(!is_array($error)){
    $_SESSION['message'] = 'Thank You!';
    header('Location: yourpage.php');
    exit();
} 

次に、フォームの上部でこれを使用します。

if(isset($_SESSION['message'])){ 
    echo $_SESSION['message'];
    unset($_SESSION['message'];
} 

これにより、ページが更新されてメッセージが表示されます。その後、ページが更新された場合、セッション変数が空になるため、ありがとうございますは表示されません。これはフラッシュメッセージと呼ばれます。

于 2014-06-01T19:56:31.850 に答える