いくつかのチェックを通過してからデータをデータベースに保存する簡単な登録フォームを作成しようとしています。最初は、登録フォームと処理フォームだけがあり、検証されていないフォーム データがデータベースに保存されていました。問題は、プロセスに検証を入れようとしたときに始まりました。
<Edit>
ここでの目標は 3 つだけです。
- ログインしているユーザーが登録しようとするのを防ぐため。
- ブラウザでアクティブなユーザー アカウントが実行されていない限り、まず空のフィールドがないことを確認し、
- 処理のためにフォーム データを送信します。
#1 については、php self への投稿が理想的でした。これにより、多くの余分なコーディングを回避でき、ユーザーがすべてのものを再度入力する必要がないという利点があります。
#2の場合、検証は現在空のフィールドのチェックに限定されており、他には何もありません。これは登録フォームであり、ユーザー データが収集されています。ユーザーの認証はまったくありません。
#3については、データを別のphpに送信する方法を考案しましたが、それはもう問題ではありません.
問題はロジックです。別々に機能している部品を組み合わせると機能しなくなるのはなぜですか? プロセスに適用しているロジックに問題がありますか?
コメントの 1 つは、elseif について何かを言ったし、私もそれを試しました。コードにエラーはありません-解析エラー、構文エラー、致命的なエラーはありません-しかし、何も起こっていません-登録フォームが更新されるだけです。システムの個々の部分は、テスト ページでは個別に機能しますが、完全なフォームと組み合わせると機能しません。
</Edit>
ここSEで、フォームをphp selfに投稿する方法を見つけ、投稿のサンプルコードで試してみました。期待どおりに機能し、すべて問題ないようだったので、フォームページに追加しました。しかし、実際のフォームページでは、リロードする以外は何もしていません。
繰り返しになりますが、ここ SE で、すべてのエラーを配列でキャッチして表示する方法を示す投稿を見つけました。サンプル ファイルで動作するように見えたので、変数名を適切に変更したコードを登録ページに追加しました。ログインしているユーザーがいない場合、ユーザーが送信をクリックすると、キャッチされた空のフィールド エラーが表示されます。そうではありませんでした。すべてのフィールドが空白のままの場合でもエラーを表示します。その後、すべてが崩壊しました。
今起こっていることは、登録フォームがリロードされることだけです-エラーまたはエラーなし!
あまりにも多くのことを試したので、昨夜からしようとしていたことが、コードが現在行っていることなのかどうか、もはや確信が持てません。そのため、ロジックと関連する質問だけからやり直しています。
各段階のロジックと質問は次のとおりです。
<php session_start() ;?>
<?php
//check if the user is logged in
if (isset($_SESSION['validuser'])) {
//catch this first - before user spends time filling out the 12 fields!
//send to message page saying "you cannot register - you are already a member and logged in"
//WORKING PERFECTLY - CONFIRMS FORM POSTING TO SAME PAGE CORRECTLY!
//time for other checks....
}
else (!isset($_SESSION['validuser']) && isset($_POST['submit'])) {
//if there is no logged in user and form has been submitted, start checking the fields to see if any fields are empty
//collect all errors in array and display?
//direct back to the form with appropriate messages, form fields retained
//exit here? or no?
//focus now has to pass to the form again - need any code for this? or will it happen automatically?
}
if isset($_POST['submit'])) {
//Should this part be within the else block?
//If it is out side, will it get rendered on load?
//if there are no errors proceed to process the form
//there are further checks that need talking to the database
//once those checks and approvals are over the data gets saved to the database
}
?>
<html>
<body>
<form action="<?=$_SERVER['PHP_SELF']?>" method = "POST">
<!-- 12 fields to be filled out by user -->
<input type = "submit" name = "submit" value = "submit" />
</form>
</body>
</html>
私は何が欠けていますか?これは私がクリーンアップしようとしているワークフローであることを覚えておいてください。元のコードは非常に洗練されているため、ここでは公開したくありません。入力のサニテーションと出力のエスケープについて多くのアドバイスを得る可能性があります。私だけがフォームとデータベースにアクセスできるこの開発環境では、これらのビットを意図的に省略しました。サニタイズとエスケープは、この時点で混乱を招くだけです。
そうは言っても、ワークフローの権利が得られたら、それらのビットも追加します:-)