- ベストアンサー
フォームでのデータ入力システムを制作する際の注意点とは?
- PHPとMySQLとXHTMLを使って、フォームからのデータ入力システムを制作しています。フォームの入力内容を判断するための方法や、判断方法についてアドバイスを求めています。
- フォームのテキスト内容の判断や入力されているかどうかの判断には、確認ページで正規表現を使用すると良いです。
- 現在NULLもしくは半角数字以外をNGと判断したいがうまくいっていない状況です。Javascriptも視野に入れつつ、アドバイスを求めています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
PHP単体では、「この方法がスタンダード」っていうのは無いと思います(「PHP単体」というのは、フレームワークなどを使わないという意味です)。 いちおう、よく使われると思われる関数などを挙げておきます。 テキストボックスの入力データを想定しています。 ・ctype関数 半角英数などの基本的なチェックはこれでできます。 http://jp2.php.net/manual/ja/ref.ctype.php ・正規表現 Perl互換 http://jp2.php.net/manual/ja/ref.pcre.php マルチバイト対応 http://jp2.php.net/manual/ja/function.mb-ereg.php なお、サーバ側チェックは絶対に省略してはなりません。クライアント側チェック(JavaScript)はオマケ程度のものです。 JavaScriptでのチェックは、攻撃者が容易に迂回できる、JSをOffに設定しているユーザがいる、ブラウザのバージョンにより動作が左右されるなるなどの問題があります。なので、Yahooやgooなどの大手サイトでは殆どやってません。
その他の回答 (2)
- hkd9001
- ベストアンサー率48% (99/204)
hepinさん、早速ご質問ありがとうございます。 さて「フォーム移動先のページで警告文を出したい」とのことのですが、これは技術的には難しくはありません。ただ、一般に このような場合 (1)入力のフォーマットチェック等、データベースなどと照合する必要のないチェックについては、クライアント側(ブラウザ側)で行い、OKなら次の画面へ進むが、NGなら alert などで警告を出して、次の画面へは進まない、というシステムにする。 (2)会員番号が正しいかどうかのチェック等、サーバ側での判断が必要なチェックについては、hepin さんがおっしゃる様な確認画面を設けて、そこでエラー表示を行う。 というふうにすることが多いです。クライアント側のチェックで用が足りるのに(2)の方法をとってしまうと、ユーザが集中した場合などサーバの負担を増やしてしまう…ということも理由としてあるようです。 以上、お答えになっているでしょうか?もしご不明の点ありましたら、追加でご質問どうぞ。
補足
hkd9001さん回答ありがとうございます。 「フォーム移動先のページで警告文」ですが、伝え方が悪かったです。 私としては、アラートなどを使用せずに次ページもしくは該当のページにNG用の文章を出したいのです (赤文字で○○を入力してください。や、半角数字で入力して下さいなど) 他の部分で、フォームに内容が記入されていなかった場合などに 次ページでPOSTやGET値がNULLかどうかを確認して警告文を出していたので次ページという伝え方になってしまいました。 該当の入力ページ中で判断とエラー文の表示ができるようならそれでもいいのですがやり方がわかりません汗 PHPもしくはJavascriptでアラートを使わない半角英数字の判断方法などをご教授頂けないでしょうか? 重ね重ねの質問申し訳ありませんが宜しくお願い致します。
- hkd9001
- ベストアンサー率48% (99/204)
hepinさん、こんにちは。 このような場合、JavaScriptで処理するのが適切かと思われます。 (1)以下の、点線「-----」で囲まれた部分(点線は入れないで)をテキストエディタにコピーして「test.html」等という名前で、デスクトップ等わかりやすい場所に保存してください。 (2)いま保存したファイルのアイコンをダブルクリックします。フォームが表示されると思うので、値をいろいろ入れて試してみてください。 ---------------------------------------- <html><head> <script language="javascript"> function check(){ str = frm.text1.value; err = 0; if(str.length > 0) { for (i=0; i<str.length; i++){ moji = str.charAt(i); if(moji <= '0' || moji >= '9') { err = 1; } } } if (err!=0) { alert('半角数字以外のものがまじっています。'); } else { alert('正常です'); } } </script></head> <body> <form name="frm"> 入力<input type="text" name="text1"> <input type="button" value="チェック" onClick="check()"> </form></body></html> ---------------------------------------- これでたぶん、とりあえず お望みの機能を実現していると思います。もし、うまく動かないとか、ご不明の点があれば、追加で質問をくだされば幸いです。
補足
hkd9001さん、返信ありがとうございます。 こういうやり方もあったんですね、納得です 欲を言うとアラートでの表示ではなく、フォーム移動先のページで警告文を出したいのですが難しいでしょうか?
お礼
ありがとうございます。 無事正規表現を利用して意図する対応ができました。 まだPerl互換とマルバイト対応の意味がよく分かっていませんが勉強を重ねていきたいとおもいます。