• 締切済み

入力値の正規化を行うタイミング

下記の通り、データ入力用のフロントエンド(html)、DB向けのクエリ発行用スクリプト(PHP)、 データベース(MySQL)で構成されたWebアプリケーションがあるとします。 index.html <データを入力>   ↓ insert.php <DBへクエリ発行>   ↓ DB <クエリに従って値をinsert> index.html上のフォームに入力された文字列をDBに挿入するという主旨です。 この時、文字列に半角/全角スペースが含まれる場合は、半角/全角スペースを排除して DBに挿入するとします。 半角/全角スペースを排除した旨の通知はしません。 このような値の正規化はどのタイミングで行うのがベストでしょうか? 正規化を行うチャンスはすべての段階で存在すると理解しています。 ・index.html   Javascriptにて、submitする前に値を正規化してPHPへ渡す。    → Javascriptが無効化されていると不可      (しかし、今時Javascriptを無効化するユーザがいるだろうか)。 ・insert.php   ここで正規化してDBへ渡す。    → 経験上、これが一般的と感じる。 ・DB   ストアドプロシージャ等を用いて、正規化した値を挿入する。    → 最近MySQLでプログラミングのようなことが出来ることを知り、ここで正規化するのも      アリではないかと考えた次第。 メンテナンス性やパフォーマンスなど、様々な観点からご意見を頂けると幸いです。

みんなの回答

回答No.1

> このような値の正規化はどのタイミングで行うのがベストでしょうか? 一言で言えば「処理の入口で行う」だと思います。 ただ、入口はいくつもある場合があります。 質問の例なら、ユーザーがブラウザ上で入力する 箇所が主な入口ですが、ハッカーがブラウザを 使わずに直接PHPにリクエストする可能性があるなら、 PHPのリクエスト受け付け部分も入口です。 データベースも、自分が管理しているプログラム以外から アクセスされる可能性があるなら、そこも入口です。 場合によっては、それぞれの入り口全てでやらなければ ならない場合もありますし、データベースの格納値に スペースが入っていることが後の処理に影響しないなら、 特にデータベースアクセス時点でスペース削除する必要は ないと思います。 また、PHPのリクエスト受け付け部でスペース削除しているから といってブラウザ側でスペース削除する必要がないとも 限りません。 ユーザビリティ(使いやすさ)を考えて、文字入力段階から スペースが入らないように正規化した方がよいかもしれません。 ただ、入口の文字入力段階ではなく、submitする時に ユーザに知らせず勝手にスペース削除するだけでは意味がないと 思います。スペースが含まれているかチェックして、ユーザに お知らせするか再入力させるならまだ意味があるかもしれません。

関連するQ&A

  • 正規表現を使った入力値のチェック

    こんにちは、yukimura1024です。 perlでブラウザのフォームに入力された値をチェックしたいのですが、 入力された値が「全角文字のみか」と「全角カタカナのみか」 という2種類のチェックのしかたがわかりません。 「数値のみか」のチェックは正規表現を使ってできたのですが、 これと同じように正規表現を使って、この2つの全角チェックをする 方法はないでしょうか? 数値チェックは以下の方法でやっています↓ if ($str_txt_yuubin =~ /[^0-9]/) { print "「郵便番号」を半角数字で入力してください。<br>\n"; } ご存知の方がいましたら教えていただけると助かります。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • 正規表現を使って入力チェックを行う

    JavaScriptで正規表現を用いて半角英数入力チェックを行いたいのですが、うまくいきません。 ご協力お願いします。 --【1】------------------------------------------------- if((element2.value.match(/^[^0-9a-zA-Z]$/)){  document.FORM01.in_AAA.value="";  return false; } ------------------------------------------------------- 【1】では、半角、全角に関わらず正常に処理が行われます。 --【2】------------------------------------------------- if(!element2.value.match(/^[^0-9a-zA-Z]$/)){   document.FORM01.in_AAA.value="";   return false; } ------------------------------------------------------- 【2】にすると、半角、全角ともエラーとなってしまいます。 どのようにすれば、実装できるのでしょうか。 皆さん、よろしくお願いします。

  • javascriptでの正規表現について

    javascript正規表現にて正の整数および小数(半角のみ) を判別したいのですがうまくいきません。どうすればいいのでしょうか。<script language=javascript> function StrCheck(strSrc){ var value = strSrc.value; if (value.match(/[0-999]+¥.[0-99]/)==true){ alert("半角数字のみで入力して下さい"); } </script> ); 以上のようにつくってみましたが、半角でも全角でも「半角を入力してください」というメッセージがでてしまいます。これを全角のみでエラー表示がでるようにしたいのですがどうしたらよいのでしょうか。参考になるWEBページでもあれば教えてください。ご教授の程よろしくお願い申し上げます。

  • PHPを使用してMySQLを更新について

    SQLを勉強しようと思い、本を見ながらやっているのですが、入力する文字が全て半角でないとPHPで正常に登録できません。コマンドプロンプトから「Insert ・・・ 」と下記の通り打ち込むと問題なく登録できます。本当は下記のtest1~3は全角/半角を意識せず入力出来るようにしたいと思っています。お手数ですがご教示お願いします。 使用している環境は下記です。 WinXP HE Mysql 5.0 php 5.2.1 Apache 2.0.46 (SQLを更新しようとしている部分 ・・・ 下記”test3”は「3」だけ全角にしているとエラーになるが、半角で「3」と記述すると正常に登録できる) $sql = "INSERT INTO cdinfo(cd_no,artist_name,title,genre,melody1) VALUES(9,'test1','test2','J-POP','test3')"; $result = query($sql,$con); (上記”query”の中身) <?php function query($sql,$con) { $result = mysql_query($sql,$con); if ($result == false) { echo ("クエリーの実行に失敗しました!"); exit(); } return $result; } ?>

    • ベストアンサー
    • MySQL
  • セレクトフォームで選択した複数の値の挿入

    こんにちは。 標題の通りセレクトフォームで複数の値を渡した時のテーブルへのInsertの方法について悩んでいます。 環境はPHP5.1.2、MYSQL5、Apache2です。 やりたいことはセレクトフォームで複数の値を選択した場合、カンマ区切りにしてひとつのフィールドに格納したいということです。 現在つまづいている部分は、カンマ区切りにした値をInsertする部分です。表示するだけならいいのですが、どうしても最後の値しかInsertできません。(ちなみに挿入する値は数値です。フィールドはカンマを入れるのでVarcharにしています) 下にソースを書きましたが、この書き方だと前の値が上書きされているためだということはわかるのですが、どうしても書き方がわかりません。 できれば $value = $id['0'].",".$id['1'].",".$id['2']....; というような形で挿入したいのです。(ほかに同等の形になるよい方法があればこの形にこだわりません) へたな説明で申し訳ありませんがよろしくお願いします。 <<index.php>> <form action="entry.php" method="post"> <select name="bugID[]" multiple> <option value="id1" name="bugid">AA</option> <option value="id2" name="bugid">BB</option> <option value="id3" name="bugid">CC</option> <option value="id4" name="bugid">DD</option> </select> <input type="submit" value="送信"> </form> <<entry.php>> if($_POST["bugID"]){ foreach($_POST["bugID"] as $value){ $bug_id = $value.","; } } mysql_select_db($DB,$mysql) or die ("Entryデータベースの接続に失敗しました\n".mysql_error()); $query = "insert into ".entryTA." (bug_id)"; $query .= " values('{$bug_id}')"; mysql_query($query,$mysql);

    • ベストアンサー
    • PHP
  • 半角英数字のみを受け付ける入力フォーム

    PHPで半角英数字文字のみを受け付ける入力フォームをつくりたいので教えてください。 JavaScriptではコピペで全角を受け付けてしまうので困っています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現について

    全角文字と半角文字のスペースの有無を正規表現で検出したいと思っております。 書き方をお教え頂けますでしょうか。 よろしくお願いいたします。

  • 半角スペースを全角スペースに

    文字列で、半角スペースを全角に置き換える方法がわかりません。。。 正規表現が苦手で、MySQLに登録する画面を作りましたが、半角スペースがあると、それ以降が無視されてしまうため、その半角スペースを全角スペースに置き換えたいのですが、書式がわかりません。 すいませんが、ご教授お願いします。 あと、もし全角スペースに置き換える方法以外で何かいい策などもしありましたら、それもよろしくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現での空白文字チェックについて。

    VB2005環境です。 正規表現を用いて、以下の3パターンのチェックをしたいと 思っています。 A.半角のみカナ許可(半角スペースも許可) B.全角のみカナ許可(全角スペース許可) C.全角&半角カナのみ許可(スペース許可) Cのパターンは^[ァ-ヶ\uFF61-\uFF9F\s]+$のように 記述してみましたが、\sでは全角、半角問わずに スペースであればよしとしてしまうようで、A、Bの パターンが実現できません。 探してみた限り、半角全角スペースを区別する正規表現が 見つからなかったのですが、そのような表現がありましたら ご教授いただけないでしょうか?

  • テキストエリアからのINSERT文で文中に\nを挿入するには?

    PHPでformの<textarea></textarea>より、POST送信して、 INSERT文でDB(MySQL)に保存した時に、文中改行時に"\n"を挿入したい。 例)textarea内書込み。 あいうえお(ENTERキー:改行) かきくけこ(ENTERキー:改行) さしすせそ    ↓ 現在は、下記のようにINSERT文でDB(MySQL)に保存。 あいうえお かきくけこ さしすせそ    ↓こうしたい あいうえお\nかきくけこ\nさしすせそ 色々調べてみたのですが、 PHPだけで対応できるのかJavaScriptを利用するのか、 正規表現やonKeyDownやonkeypressを使わなければいけないのか、 もっと単純にできるのか等々対処法が全く思い浮かびません。 どなたかアドバイスやご教授をお願いします。 よろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう