- ベストアンサー
チェックボックスの値取得
- チェックボックスの値を取得する方法について質問させていただきます。
- 選択項目が増えた場合、処理が遅くなってしまっています。
- 他の方法で効率的に選択項目の値を扱う方法はありますか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
つまるところ、DBにデータを格納するんですよね? ですから、何で、わざわざスカラーデータにし、 かつセッションに格納するかが、よく分かりませんでしたので、 あえて、セッション格納部分は記述しませんでした。 ですから、スカラーで保持したいときは、 if( is_array( $_POST["key"] ) ){ $count = 1; foreach( $_POST["key"] as $value ){ $data[] = $value; // DBへのカラム名は key01,key02...を想定している $db_columns[] = "key" . sprintf("%02d", $count); $count++; } } $_SESSION["key"] = implode("\t", $data); で、$_SESSION["key"] は各パラメータの値がタブ連結でスカラー値になります。 同様に $columns = implode("\t",$db_columns); で $columns は各DBへのフィールド名が入ってます。 # こちらはあまり意味がないと思いますが。 質問に対する返答を見受けるに、phpといいますか、プログラミングの基本をあまり理解できてないように思います。 # スカラー・配列の概念、implodeっていう関数の意味 私の意見も含め、他人の意見を丸々鵜呑みにせず、自分で考えて吸収するようにしましょう。
その他の回答 (3)
- panerai777
- ベストアンサー率34% (9/26)
どういう感じでDBにフィールド(カラム)を作成しているか、その後の値のinsertをされているかはよく分りませんが、 if( is_array( $_POST["key"] ) ){ $count = 1; foreach( $_POST["key"] as $value ){ // DBへのカラム名は key01,key02...を想定している $name = "key" . sprintf("%02d", $count); $data[$name] = $value; $db_columns[] = $name; $count++; } } の方が、後のデータの取り出し方が楽かもしれません。
お礼
何度もありがとうございます。 下記の回答と併せてお礼申し上げます。 おかげ様でforeachを使った配列の取得は理解できました。ありがとうございます。 現在段階を踏みながらやっておりますが、今回教えていただいたやり方ですと、『Array』という結果しか返ってきません。これでよろしいのでしょうか?
- panerai777
- ベストアンサー率34% (9/26)
なるほど、動的にDBにフィールドを作って格納したいのですね。 HTML側でのnameを別にすることと、DBにフィールドをつくることは別に思います。 $param = array("key01","key02","key03"); foreach( $param as $key ){ if( $_POST[$key] )$data[] = $_POST[$key]; } $_SESSION["key"] = implode("\t", $data); はまず、理解できましたでしょうか? コピペしなくても、$param に値を増やしていけば、対応できます。 ただ、これも美しくありません。 <input type="checkbox" name="key[]" value="value01"> <input type="checkbox" name="key[]" value="value02"> だとして、 if( is_array( $_POST["key"] ) ){ $count = 1; foreach( $_POST["key"] as $value ){ $data[] = $value; // DBへのカラム名は key01,key02...を想定している $db_columns[] = "key" . sprintf("%02d", $count); $count++; } } とすれば、HTML側の変更だけで、対応できます。 実際の値は、$dataに格納されて、 DB側でつくるカラム名は、$db_columnsに格納されます。
- panerai777
- ベストアンサー率34% (9/26)
都度都度、$_SESSIONに格納しているからのような気がします。 なんで、配列を使わないのか良く分らないのですが、 $param = array("key01","key02","key03"); foreach( $param as $key ){ if( $_POST[$key] )$data[] = $_POST[$key]; } $_SESSION["key"] = implode("\t", $data); でいいのではないでしょうか?
お礼
回答ありがとうございます。 ご指摘の通り、一つ一つ$_SESSIONに格納しているからだと思います。 配列を使わない理由は、DBに格納する際、チェックボックスと同じ数のフィールドを作って、受け取った値をそれぞれに格納しようとしているからです。 配列を使っても、同じような作業が出来るのだとは思いますが、初心者なもので・・・ もし、配列を使用しても上記のように個別にDB格納が出来る方法、または、詳しい解説のあるサイトがあったら教えていただけますでしょうか?
お礼
おかげ様で思ったようになりました。 ありがとうございました。 やっぱり無駄だったんですよねぇ。 色々とお世話になりました。