• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:チェックボックスの値取得)

チェックボックスの値取得

このQ&Aのポイント
  • チェックボックスの値を取得する方法について質問させていただきます。
  • 選択項目が増えた場合、処理が遅くなってしまっています。
  • 他の方法で効率的に選択項目の値を扱う方法はありますか?

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

  • ベストアンサー
回答No.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っていう関数の意味 私の意見も含め、他人の意見を丸々鵜呑みにせず、自分で考えて吸収するようにしましょう。

hakkarin
質問者

お礼

おかげ様で思ったようになりました。 ありがとうございました。 やっぱり無駄だったんですよねぇ。 色々とお世話になりました。

その他の回答 (3)

回答No.3

どういう感じで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++; } } の方が、後のデータの取り出し方が楽かもしれません。

hakkarin
質問者

お礼

何度もありがとうございます。 下記の回答と併せてお礼申し上げます。 おかげ様でforeachを使った配列の取得は理解できました。ありがとうございます。 現在段階を踏みながらやっておりますが、今回教えていただいたやり方ですと、『Array』という結果しか返ってきません。これでよろしいのでしょうか?

回答No.2

なるほど、動的に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に格納されます。

回答No.1

都度都度、$_SESSIONに格納しているからのような気がします。 なんで、配列を使わないのか良く分らないのですが、 $param = array("key01","key02","key03"); foreach( $param as $key ){ if( $_POST[$key] )$data[] = $_POST[$key]; } $_SESSION["key"] = implode("\t", $data); でいいのではないでしょうか?

hakkarin
質問者

お礼

回答ありがとうございます。 ご指摘の通り、一つ一つ$_SESSIONに格納しているからだと思います。 配列を使わない理由は、DBに格納する際、チェックボックスと同じ数のフィールドを作って、受け取った値をそれぞれに格納しようとしているからです。 配列を使っても、同じような作業が出来るのだとは思いますが、初心者なもので・・・ もし、配列を使用しても上記のように個別にDB格納が出来る方法、または、詳しい解説のあるサイトがあったら教えていただけますでしょうか?

関連するQ&A

専門家に質問してみよう