• ベストアンサー

入力チェック DB連携

javascript初心者です。 教えてください。 入力チェックの際データベースを参照し、一致すればPOSTするのを作りたいのです。 例:データベース りんご ばなな なし みかん ぶどう フォームに'なし'を入力すれば、 データベースにあるのでPOSTします。 フォームに’オレンジ’を入力したら、 データベースにないのでPOSTせず、 このフォームをフォーカスする。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.5

レスありがとうございます。 あぁ、動いてよかったです[笑] さて、テキストエリアの値を消さない方法ですが… 最後の方のコード ------------------------------------------ print "<form name='form1' action='' onChange='form_check();'> FRUITS<input type='text' name='bumon_code'> </form> "; ------------------------------------------ の、テキストエリアを表示するタグの中に、value属性を追加します。そして、その値を変数 $bumon_code から持ってきてやれば、可能となります。

javaphp
質問者

補足

なんとなく動いてきました。 ありがとうございました。 感謝いたします。

その他の回答 (4)

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.4

レスありがとうございます。 (2)に関して、javascriptで格納した変数をPHPにて直接活用する事は残念ながらできませんが、格納する前の値、すなわちテキストエリア bumon_code の値を画面の再呼び出しにより参照することはできます。  テキストエリア bumon_code に入っている値を参照するには、PHPスクリプトの最初のほうに $bumon_code = $_REQUEST["bumon_code"]; というのを置いておきます。これで、$bumon_code に テキストエリアの値が入りますよ。 なお、画面の再呼び出しは document.form1.submit(); といったようなjavascript命令でできるので、これをテキストエリアの onChange で呼んでやるような仕組みにすれば、PHPでテキストエリアの値が参照できると思います。

javaphp
質問者

補足

ご回答ありがとうございます。 Enterキーを押す事により、チェック機能が働くようになりました。 しかし、リロードされてしまいテキストボックス値が消えてしまいます。 リロードされず(テキストボックス値が消えず)、チェック機能が働くようにするにはどうすれば良いでしょうか? <?php $bumon_code = $_REQUEST["bumon_code"]; print "<script type='text/javascript'> function form_check(){ document.form1.bumon_code.submit(); } </script> "; require_once("../common/off_db.php"); $con = pg_connect("host=$dbserver dbname=$dbname user=$dbuser password=$dbpassword"); $sql = "select count(*) as cnt from off_bumonmster where bumonmster_cd='$bumon_code' "; $rst = pg_query($con,$sql); $col = pg_fetch_array($rst); $cnt_bumon = $col["cnt"]; pg_free_result($rst); switch ($cnt_bumon) { case 0: print " <script type='text/javascript'> alert('部門が不正です'); document.form1.bumon_code.focus(); </script> "; break; } print "<form name='form1' action='' onChange='form_check();'> FRUITS<input type='text' name='bumon_code'> </form> "; ?>

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.3

レスありがとうございます。 さてPHPのコードありがとうございました。ちょっと気になった点がありましたので、参考にしてください。 (1)$rst = pg_query($con,$sql); で、接続のときの変数 $con を参照していますが、これが定義されていない( $con = ~ という式がない)ようです。 (2)form_check() での変数 bumon_cd (JavaScriptの世界)と、bumonmster_cd='$bumon_cd'の変数 $bumon_cd(PHPの世界)の値はリンクしないですね~ (3)$cnt_bumon = $col["cnt"]; でDBの内容を読んでいますが、繰り返しのループが無いため、2件目以降のデータが入ってこないですね~

javaphp
質問者

補足

コメントありがとうございます。 (2)に関して、 javascriptで格納した変数をPHPにて活用する事はできないのでしょうか? var bumon_cd=document.form1.bumon_code.value; どうしても、ページを移えること無くチェックをしたいのです。 何か別の方法があれば教えてください。 宜しくお願いします。

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.2

なるほどなるほど。ボタンのクリックを待たずにチェックをしたいということですね。 それなら、入力フォームに「onChange」という属性を追加することで実現できます。いま、チェックのための JavaScript の関数を form_check とすると <input type="text" name="~~" onChange="form_check();"> (関数名や name 属性はお手元のものに合わせてください) とすれば、1文字入れるたびにチェックがかかるようになります。お試しを。

javaphp
質問者

補足

PHPで作ってみました。 var bumon_cd=document.form1.bumon_code.value; にて格納したbumon_cdをsqlのwhere条件に使ってみましたが、 上手くいきません。 ご教授ください、よろしくお願いします。 <?php $sql = "select count(*) as cnt from off_bumonmster where bumonmster_cd='$bumon_cd' "; $rst = pg_query($con,$sql); $col = pg_fetch_array($rst); $cnt_bumon = $col["cnt"]; pg_free_result($rst); switch ($cnt_bumon) { case 0: print " <script type='text/javascript'> alert('上位部門が不正です'); document.form1.bumon_code.focus(); </script> "; break; } print "<script type='text/javascript'> function form_check(){ var bumon_cd=document.form1.bumon_code.value; } </script> "; print "<form name='form1' action=''> FRUITS<input type='text' name='bumon_code' onChange='form_check();'> </form> "; ?>

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.1

おはようございます。 おたずねの件ですが、JavaScript から直接データベースを読むことはできないので、PHP とかPerl のような言語でスクリプトを作る必要があります。そしてその中でまずデータベースを読ませて値を読めるようにします。そうしておいてから JavaScript の働きで「POST」や「フォーカス」を行なう…という手順が必要です。

javaphp
質問者

補足

早々のご回答ありがとうございます。 データベース接続はPHPを使っております。 フォームに入力してボタンを押しPOSTする事での入力チェックは可能ですが、 フォームに入力した段階で入力チェックしたいのです。 ご教授をお願いします。

関連するQ&A