• ベストアンサー

入力チェック 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

  • 現在JavaScriptで、入力した項目(チェックした項目)だけを次の

    現在JavaScriptで、入力した項目(チェックした項目)だけを次のページに飛ばすものを作成しているのですが、例えば、 ***************** ぶどう 200円 みかん 150円 りんご 190円 いちご 450円 ***************** の4種類があったとして、 ***************** ぶどう 200円 3個 みかん 150円 0個 りんご 190円  2個 いちご 450円 1個 ***************** を購入と入力したら、次ページには ***************** ぶどう 200円 3個 りんご 190円  2個 いちご 450円 1個 ***************** と、個数の入力があった項目だけを渡すように作成したいです。 どなたかご教授していただけないでしょうか? 宜しくお願いします。

  • Accessでテーブルの文字列フィールドを連結する

    次のようなフィールドが2列のデータがあります。 1:りんご 1:みかん 1:バナナ 2:みかん 2:ぶどう 3:りんご 3:バナナ それを 1:りんご、みかん、バナナ 2:みかん、ぶどう 3:りんご、バナナ とクエリーでまとめたいのですが どのようにしたらよろしいでしょうか?

  • Excel VLOOKUPで可能でしょうか?

    下記のようにな表がありあます。 1 りんご 1 みかん 2 みかん 3 ぶどう 5 りんご 2 バナナ ↓ 2 みかん 2 バナナ このように「2」と入力したら2列目の名前が表示するよにしたいです。 おわかりの方教えてくださーい!

  • 番号入力後に データベースシートから自動入力

    エクセルの関数で、 下記、ご助言願います。 エクセルのシートで、 番号と項目名(1対1対応)を記載したデータベースシートを作ります。  別シートで、番号を入力すると 先程のデータベースシートを参照して、(番号入力をしたセルの横のセルに) 入力番号に対応する項目名を自動で入力するようにしたいと思います。 関数で可能でしょうか? 例えば、  データベースシート:  01 りんご  02 みかん 03 バナナ 入力シート 03 <ばななが自動入力> よろしくお願いいたします。

  • 行と列の条件に一致したら印を付けたい

    シート1に名前と商品のリストがあります 名前 商品 佐藤 りんご 佐藤 みかん 佐藤 ぶどう 加藤 みかん 山本 バナナ 山本 みかん 小林 りんご 小林 ぶどう 小林 みかん 小林 バナナ シート2の行に名前、列に商品名の表があり、シート1のリストを元に 行と列の条件に一致した箇所に印をつけたいのですが、 何か適当な関数はありますでしょうか? りんご みかん ぶどう バナナ 佐藤 加藤 山本 小林

  • エクセルでデータ→集計?入力規制?

    エクセル2003です。A1のセルに、データ→入力規制→リスト→元の値のところに、りんご・バナナ・みかん・ぶどう等を選択して使用しておりますが、B1のセルに、金額まで自動で表示したい場合はどうすればよいですか?例えば、りんごを選択するとB1に100・バナナは200など。

  • エクセル2010で 項目の抜き出しをしたい

    エクセル2010で 項目の抜き出しをしたいです。 たとえば、A列に りんご りんご バナナ トマト りんご バナナ みかん トマト メロン バナナ リンゴ みかん ぶどう とデータが入っているとき、これらのデータには、 トマト バナナ りんご リンゴ みかん メロン ぶどう という種類のデータが入っているということを簡単に表示する方法が知りたいです。 どうぞよろしくお願いします。

  • テキストエリアに入力した複数行のデータをもとに、DBから呼び出したデータをPHP側でソート

    PHP: 5.2.1 MySQL: 5.0.27 PHPとMySQLのバージョンは上記の通りです。 Smartyも利用しております。 (1) テキストエリアに以下のような情報を入力します。 ┏━━━━━━━━━━━┓ ┃ 5 ┃ 3 ┃ 1 ┃ 2 ┃ 4 ┗━━━━━━━━━━━┛ (2) 上記の情報をもとにデータベースに情報を取りに行きます。 (3) その結果、以下の情報が取得できます。 ID┃NAME ┃PRICE ━╋━━━╋━━━ 1 ┃メロン┃1000 2 ┃りんご┃100 3 ┃ぶどう┃300 4 ┃バナナ┃150 5 ┃みかん┃100 (4) このデータを、(1)でテキストエリアに入力した順番に並べ替えて表示する。 ┏━━━━━━━━━━┓ ┃5 みかん 100 ┃3 ぶどう 300 ┃1 メロン 1000 ┃2 りんご 100 ┃4 バナナ 150 ┗━━━━━━━━━━┛ という処理を行いたいのですが、(4)の部分が出来ません。 始めは1件1件問い合わせをかけて、1件ずつ表示すればと思ったのですが、 テキストエリアに入力する情報が1000件を超える場合があります。 速度に不安があるので、まとめて問い合わせする方法でやりたいのですが、 そうなると、どうしてもPHP側でソートさせる必要があります。 しかし、ソートさせるための基準となるものが 「テキストエリア内の情報の順番」なのです。 array_multisort関数なども試してみたのですが、 うまくいきませんでした。 データベースの書き換えを行わず、且つ、 1件ずつ問い合わせする方法もしない。といった場合、 上記を再現する事は可能でしょうか? お知恵をお貸し頂ければ幸いです。

    • ベストアンサー
    • PHP
  • CustomValidatorのチェックタイミング

    CustomValidatorでユーザIDとパスワードの存在チェックしているのですが。 CustomValidatorのなかにSQL文発行して、データベースからデータを取ってきて参照してチェックしています。 CustomValidatorのチェックタイミングはフォーカス離れたときから、パスワード入力されてないのに、データベースに行ってしまう現状です。 CustomValidatorのチェックタイミングをフォーカス離れたときではなく、ボタンを押したときにしたいですが。。 どうしたらいいですか。 できるのであれば、ぜひ教えてください。 よろしくお願いします。

  • エクセルで、スペースで区切られた言葉をわける。

    たとえば、セルのA1に、  りんご■バナナ■みかん■ぶどう■いちご (■=半角スペース) とあったときに、 B1のセルにりんご C1のセルにバナナ D1のセルにみかん E1のセルにぶどう F1のセルにいちご となるようにB1~F1に入力する関数があれば教えてください。