0

HTMLフォーム、PHPロジック、HTMLフッターの順に含むphpファイルがあります。

フォームからページの下部(ただしフッターの前)のいくつかのphp検証ロジックに値を取得しようとしています。<?php VALIDATION LOGIC HERE ?>.

問題は、検証でエラーが検出されると、phpロジックがdie()になるため、HTMLフッターが実行されないことです。

php die();にもかかわらず、HTMLフッターを実行する方法はありますか?...または、HTMLとPHPを統合するためのより良い全体的な方法はありますか?ありがとう!どんな助けでも大歓迎です。


編集:私は実際、データベースに接続しようとしているコードのほぼすべての場所にdie()があります。ユーザーのクレデンシャルが正しい場合、それらは接続します。クレデンシャルが間違っている場合、それはdie()になります。

これは良い習慣であり、die()の使用ですか?私の問題の解決策は、HTMLフッターの処理を続行するためにreturn()INSTEAD OF die()...を使用することだと思われます。

また、mysql_connect()やdie()などの状況があります。HTMLが処理される前にdie()が実行されたときに、残りのHTMLページの処理を続行するにはどうすればよいですか?..mysql_connect()またはreturnとは思わない; 良い習慣は正しいですか?

よろしくお願いします!フィードバックは非常に役に立ちました!

4

5 に答える 5

2

フォームの処理と検証に外部ファイルを使用し、エラー/成功時にフォームページにリダイレクトして、エラー/成功メッセージを表示します。

于 2009-12-18T08:54:03.740 に答える
2

他の状態として、複数のファイルが必要です。header.php、index.php、footer.php、formvalidator.php。index.php ファイルには、header.php と footer.php を含める必要があります。formタグでは、formvalidator.phpをロードするアクションが設定されています。

フォーム バリデータ スクリプトでは、次のようなものを使用できます。

  // All form fields are identified by '[id]_[name]', where 'id' is the 
  // identifier of the form type.
  // The field identifier we want to return is just the name and not the id.
  public function getFormData() {
    $formData = array();
    foreach ($_POST as $key => $value) 
    {
      // Remove [id]_ 
      $name = preg_replace('!.*_!', '', $key);

      if (is_array($value)) {
        $formData[$name] = implode(',', $value);
      } else {
        $formData[$name] = $value;
      }
    }
    return $formData;
  } 

これで、配列をループして各フィールドを検証できます。エラーが見つかった場合はエラー メッセージをエコーし​​、そうでない場合はフォームを処理します。

あなたのアップデート
への回答を更新します。

die() を「絶対に」使用しないでください。代わりに、現在の関数を終了し、エラー メッセージを返します。単純に die() すると、どこで何が悪かったのかわかりません。

送信ボタンをクリックしない限り、フォームのサーバー検証を行うことはできません。私が提供したコードをフォームと同じ PHP ファイルに入れることができます。送信するときは、同じページをリロードするだけです (設定するだけですaction="<?= $_SERVER['PHP_SELF'] ?>") 。

送信前にフィールドを検証する場合は、jQuery.validateなどの JavaScript を使用してこれを行う必要があります。

うーん... PHP と HTML を混在させる方法について、もう少し知識が必要なようです。PHP でフォームを操作する方法については、この初心者向けガイドをご覧ください。

于 2009-12-18T09:13:41.437 に答える
1

1つのheader.phpファイルと1つのfooter.phpファイルを作成するだけです。エラーが発生した場合は、ダイの代わりに戻るだけです。

このように、ページの上部に次のように配置できます。

<?php include('header.php');?>

///put in whatever html there may be


<?php 
/// put your form and processing info here
///just return if you need to prevent further processing
?>

///put in whatever html there may be
<?php include('footer.php');?>
于 2009-12-18T09:02:05.817 に答える
0

あなたがしていることをするためのより良い方法はたくさんあります。しかし、最初の質問に答えるために、フッターに表示する必要のあるhtmlを含む文字列を返すフッターと呼ばれる関数を作成し、die(footer());を呼び出すことができます。しかし...なぜあなたはダイを使うのですか?エラーを数えて、結果のどこかに表示することはできませんか?そのようにスクリプトを強制終了しないでください。

そして2番目の質問です。BenTheDesignerが言ったように、検証して、問題が発生した場合はフォームに戻るか、そうでない場合は別の場所に戻るphpスクリプトを指すフォームアクションを含むhtmlページを使用できます。ただし、そこでも、die()関数を削除し、他の何かを呼び出してリダイレクトする必要があります。smartyのようなテンプレートシステムを使用して、ロジックをhtmlプレゼンテーションから分離できます。すべてを1つのファイルに書き込むことができますが、ロジック全体をファイルの上部に、すべてのhtmlを下部に記述してみてください。<?= $ var?>を使用してphpのものを表示するか、さまざまなhtml結果の単純な条件を表示します。ただし、die()は使用しないでください。それは私が推測することを複雑にするだけです。

于 2009-12-18T09:01:09.827 に答える
0

サイトにアクセスしているユーザーに分かりやすいメッセージが表示されないため、die() を使用することはお勧めできません。die を使用することを絶対に確認する必要があります。たとえば、ハッキングの試みがあると思われる場合の手順で使用できます。代わりに if else 構造を使用して、物事を表示または非表示にしてください。実装する可能性のあるプロトタイプを次に示します。

  // if there is a validation error, show it, otherwise not
  if ($error == true)
  {
    // show footer
  }

  <!-- Your footer goes normally here -->
于 2009-12-18T09:26:42.720 に答える