phpのフォームからmysqlのデータ登録について

このQ&Aのポイント
  • フォームからMySQLのデータ登録に関しての質問です。フォームには10個以上の項目があり、空の値は登録しないようにしたいです。
  • 現在のクエリでは、10項目全てが入力された場合にのみ登録されますが、空の値の項目がある場合でも登録されてしまいます。
  • どのようにすれば空の値の項目を除外し、入力された項目のみを登録することができるでしょうか。お知恵をお貸しいただければ幸いです。
回答を見る
  • ベストアンサー

mysql データ登録

phpのフォームからmysqlのデータ登録についてお聞きしたいことがあります。 フォームで <select name="test1"> <option value="">--</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <select name="hoge1"> <option value="">--</option> <option value="サッカー">サッカー</option> <option value="野球">野球</option> <option value="バスケ">バスケ</option> </select> <select name="test2"> <option value="">--</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <select name="hoge2"> <option value="">--</option> <option value="サッカー">サッカー</option> <option value="野球">野球</option> <option value="バスケ">バスケ</option> </select> ・ ・ ・ これが10項目ぐらいあります。 これをデータ登録するときに空の値はデータを登録しないとしたいのですが、空の値でも登録されてしまいます。 queryは下記のようになっています。 $testquery = sprintf("INSERT INTO `testhoge` (`test`,`hoge`) VALUES ('$test1','$hoge1'),('$test2','$hoge2),('$test3','$hoge3'),('$test4','$hoge4'), ('$test5','$hoge5'),('$test6','$hoge6'),('$test7','$hoge7'),('$test8','$hoge8'), ('$test9','$hoge9'),('$test10','$hoge10') "); } test1とhoge1が1:サッカー。 test2とhoge2が2:野球。 test3とhoge3が1:バスケ。 (必ずしもtest項目の番号が123ではない。) となり4項目以降は空の場合は3項目までが登録される。 10項目全部入力されれば全部登録される。 としたいのです。 どなたかおわかりの方がいらっしゃいましたらご教示お願いします。

  • h-h13
  • お礼率24% (37/149)
  • PHP
  • 回答数5
  • ありがとう数5

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

selectのnameを工夫すると楽です <?PHP $test=$_REQUEST["test"]; $hoge=$_REQUEST["hoge"]; $vals=""; $sql=""; foreach((array) $test as $key=>$val){ if($val!=="" and $hoge[$key]!==""){ if($vals!=="") $vals.=","; $vals.="('{$val}','{$hoge[$key]}')"; } } if($vals!==""){ $sql="INSERT INTO `testhoge` (`test`,`hoge`) VALUES".$vals; } print $sql; ?> <form> <select name="test[1]"> <option value="">--</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <select name="hoge[1]"> <option value="">--</option> <option value="サッカー">サッカー</option> <option value="野球">野球</option> <option value="バスケ">バスケ</option> </select> <select name="test[2]"> <option value="">--</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <select name="hoge[2]"> <option value="">--</option> <option value="サッカー">サッカー</option> <option value="野球">野球</option> <option value="バスケ">バスケ</option> </select> <input type="submit" value="go"> </form>

h-h13
質問者

お礼

ご回答有難う御座います。 度重なるご質問で申し訳ないのですが、 ご教示いただいたコードをもとにフォームを作成してみましたが、データの登録までにたどりつかず頭が混乱してしまいました。 内容は フォーム画面 <form> <select name="test[1]"> <option value="">--</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <select name="hoge[1]"> <option value="">--</option> <option value="サッカー">サッカー</option> <option value="野球">野球</option> <option value="バスケ">バスケ</option> </select> <select name="test[2]"> <option value="">--</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <select name="hoge[2]"> <option value="">--</option> <option value="サッカー">サッカー</option> <option value="野球">野球</option> <option value="バスケ">バスケ</option> </select> <input type="submit" value="確認"> 確認画面 $testtxt = $_REQUEST['test']; $hogetxt = $_REQUEST['hoge']; $_SESSION['testtxt'] = $testtxt; $_SESSION['hogetxt'] = $hogetxt; foreach((array) $_SESSION['testtxt'] as $key => $val){ if($val !== "" && $_SESSION['hogetxt'][$key] !== ""){ $txt .= $val. ":" .$_SESSION['hogetxt'][$key]. '<br />'."\n"; } } echo $txt; 登録画面 ここでわからなくなってしまいました。 $txtに渡してから登録画面ではNULLと表示されてしまいます。 SESSIONも考えていたのですが、このような感じであっていますでしょうか? $_REQUESTを使ったのがはじめてのためあってるのかわかりませんが宜しくお願いします。

その他の回答 (4)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

>とValuesの横に,が入っていました。 じゃ、まずそのカンマを取るところからはじめてください

h-h13
質問者

お礼

できました。 有難う御座います。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

>Column count doesn't match value count これは単に・・・ INSERT INTO hoge(a,b,c) values('x','y'); みたいに投入するフィールドの指定と、データ数に差異があるだけだと思います

h-h13
質問者

お礼

ご回答有難う御座います。 >INSERT INTO hoge(a,b,c) values('x','y'); >みたいに投入するフィールドの指定と、データ数に差異があるだけだと思います ですが、 INSERT INTO hoge(a,b,c) values('x','y',Z); にしています。 また、IDの構成かと思いしらべたのですが、AUTO_INCREMENTになっています。 vr_dumpをやったところ、 INSERT INTO hoge(a,b,c) values,('x','y',Z); とValuesの横に,が入っていました。 これは関係しますでしょうか?

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>$testtxt = $_REQUEST['test']; >$hogetxt = $_REQUEST['hoge']; > >$_SESSION['testtxt'] = $testtxt; >$_SESSION['hogetxt'] = $hogetxt; どこでセッションを利用しているか微妙ですが 前回提示したソースは$_REQUEST['test']と$_REQUEST['hoge']は それぞれ配列を想定しています 配列データはSESSION変数に乗らないので、シリアライズし 受け取った側でアンシリアライズします。 http://www.php.net/manual/ja/function.serialize.php

h-h13
質問者

お礼

度重なるご回答有難う御座います。 SESSIONはできたのですが、データベースへの登録ができなくエラーがでてしまいます。 エラー文はColumn count doesn't match value count at row 1のように表示されます。 データベースの構成など調べたのですが間違いはないのにでてしまいます。 お分かりになりますでしょうか?

  • bakaok
  • ベストアンサー率22% (33/148)
回答No.2

データが空かのチェックをしてそれにあわせてINSERT文を生成するようにする。

h-h13
質問者

お礼

ありがとうございます。

関連するQ&A

  • セレクトメニューで2つの項目や値を渡す方法はありますか?

    良かったら教えてください。 セレクトメニューで2つの項目や値を渡す方法は ありますか? 普通は、 <select name="test"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> と言う感じですが、 「テスト」を選ぶと name="test1" name="test2"の項目で、 value="1111" value="2222" 選択項目は、1つですが、2つの項目、 2つの値を次のCGIに渡す事は、 可能でしょうか? 教えてください。

    • ベストアンサー
    • HTML
  • selectフォームの未選択の項目にフラグ

    下記のselectフォームを用いてASPにデータを渡したいのですが、 未選択の項目にフラグを立てて(例えば"0")データを渡すことは可能でしょうか? ご教授宜しくお願い致します。 <select name="hoge" multiple> <option value="1" selected>111</option> <option value="2">222</option> <option value="3">333</option> <option value="4">444</option>

  • mysql データ登録

    phpにてmysqlにデータ登録の流れを作っているのですが、わからないことがあり投稿しました。 簡単に流れを説明しますと mysqlのテーブル(テーブル名member)の構成は id | name だとして phpのフォームで <input type="text" name="name1" value=""> <input type="text" name="name2" value=""> <input type="text" name="name3" value=""> というものを作っています。 ここでフォームのname1、name2、name3をそれぞれ入力したときにmysqlに登録されるのですが、 mysqlのなかに id | name 1 | A 2 | B 3 | C としたいのですが、下記の記述ではできません。 (INSERT INTO `member` SET `name`='$name1',`name`='$name2',`name`='$name3') エラー文はColumn 'name' specified twiceと表示されます。 レコード数は増やしたくないので、何か方法が御座いましたら教えていただけないでしょうか? まだ、PHPを勉強し始めたばかりで困っています。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • select boxとinput valuの連動

    どなたか教えてください。 変な質問の仕方で申し訳ありません。 <select> <option value="hoge1">a1,b1,c1</option> <option value="hoge2">a2,b2,c2</option> <option value="hoge2">a3,b3,c3</option> </select> これはhoge1をセレクトするとa1,b1,c1となりますが、 これをhoge1をセレクトするとinput hoge2、input hoge3、が連動して 値b1,c1を表すような事をしたいのですが。(下記) <select><option value="hoge1">a1</option></select>をセレクトすると <input type="text" name="hoge2" >value値に=b1が入る <input type="text" name="hoge3" > value値に=c1が入る どうすれば動くのか分かりません 初心者なので具体的に教えていただければ幸いです。 何か簡単な方法はないでしょうか? どうぞよろしくお願い致します。

    • ベストアンサー
    • HTML
  • プルダウンを選択していないときは、初期値(selected)の値を、選

    プルダウンを選択していないときは、初期値(selected)の値を、選択したときは選択値を、hiddenで渡したい。 ▽プルダウン例 <form> <select> <option value="0" selected>A</option> <option value="4">B</option> <option value="6">C</option> </select> </form> ↑上で選択した値(A or B or C)値を、↓下のvalue=「"hoge"」に渡したいです。 ※選択肢は3つだけではなくて、たくさんあります。 ▽input例 <input name="category_name" value="hoge" type="hidden"> ※formとかselectにid振っても構いません。 ※javascriptでやりたいです。

  • 複数 selectフォームから今回onchangeで変更した項目を知りたい

    phpプログラムで、画面上にある複数のselectフォームを使用してselectフォームの内容が選択されれば、selectフォームの値を取得してデータの 抽出を行い、選択された内容の表示を行なおうと思っています。 onChange='submit()' で選択された内容をpostで受け取って再表示を行い、項目にあったデータを取り出すことは出来てますが、直近に変更された項目が何か(どのselectフォームの内容(年度、組織、社員及び商品の項目)が変更されたのか?)を知りたいのですが、いい方法を教えていただけないでしょうか? よろしくお願いします。 sample.phpの内容 <?php $nen = $_POST['nend']; $sosi = $_POST['so']; $syin = $_POST['sa']; ?> <html> <body> <form action="sample.php" method="post"> <select name='nend' onChange='submit();'> <option value=2007 selected>2008</option> <option value=2006>2007</option> <option value=2005>2006</option> </select> <select name='so' onChange='submit();'> <option value=0 selected>全社</option> <option value=01 >本社</option> <option value=02 >A支店</option> <option value=03 >B支店</option> </select> <select name='sa' onChange='submit();'> <option value=0 selected>社員</option> <option value=1 >田中</option> <option value=2 >佐藤</option> <option value=3 >鈴木</option> </select> <select name='sy' onChange='submit();'> <option value=0 selected>商品</option> <option value=1 >A商品</option> <option value=2 >B商品</option> <option value=3 >C商品</option> </select> </form> </body> </html>

    • ベストアンサー
    • PHP
  • <logic:iterate>のデータ表示に関して

    <logic:iterate>を使ってデータの表示を行っています。 データは2つあり、1つは、コードで、もう1つは名称です。 その2つのデータをselectのoptionとして表示したいのですが、 下記ソースにするとoptionのvalueの値がうまく入ってくれず、文字列(<bean:write~)になってしまいます。 うまくデータをいれるにはどうすればよいのでしょうか?? <html:select property="name"> <logic:iterate id="list" name="nameList"> <html:option value="<bean:write name='list' property='code' />"><bean:write name="list" property="name" /></html:option> </logic:iterate> </html:select>

  • マッチに関する正規表現

    $hoge = ’ <select name="a"> <option value="A" selected>■</option> <option value="B">★</option> <option value="C">▲</option> </select> <select name="b"> <option value="A">■</option> <option value="B">★</option> <option value="C" selected>▲</option> </select> ’; となっている場合、 『selected』が付いているoptionにマッチさせ、 そのvalue値【A】や【C】を$hoge1や$hoge2へ代入したいのですが、正規表現はどのようになるのでしょうか? $hoge =~ /value="?([^"]+)"? selected/g $hoge1 = $1; $hoge2 = $2; ↑これでは、ダメでした。 御教授 お願い致しますm( __ __ )m

    • ベストアンサー
    • Perl
  • セレクトボックスの選択項目を変える

    セレクトボックスの選択項目を変えるには どうすればいいですか? <FORM action=./ method=post> <SELECT name=server> <OPTION value=2 selected>2</OPTION> <OPTION value=3>3</OPTION> <OPTION value=4>4</OPTION> </SELECT> </FORM> こういうフォーム(FORMやOPTIONにnameがない)で [4]を選択したいです このフォームを書き換えないで(スクリプトでの書き換えなら○) どうにか変えることはできないでしょうか? IEのみの対応でいいので、お願いします

  • フォームのPOSTデータをサブウィンドウに渡したいです。

    フォームのPOSTデータをサブウィンドウに渡したいです。 <form action="sample.html" method="post"> <input type="checkbox" name="test[]" value="0">0 <input type="checkbox" name="test[]" value="1">1 <input type="checkbox" name="test[]" value="2">2 <input type="checkbox" name="test[]" value="3">3 <input type="checkbox" name="test[]" value="4">4 </form> 上記のフォームの値を、サブミットボタンを押したときにサブウィンドウをひらき、そのサブウィンドウに渡したいのですが、いまいち上手くいきません。 window.openでサブウィンドウを開いてもデータが受け渡せずにいます。 このような場合、どうしたら値を渡せるのでしょうか。 理想はPOSTで渡したいのですが、引数で渡す方法でもかまいません。

専門家に質問してみよう