• ベストアンサー
※ 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

  • チェックボックスが複数選択できない

    アンケートフォームを作成していますが、チェックボックスで複数項目を選択しても最後のひとつしか表示されずに困っています。 配列での処理にすれば良いという事なので自分なりにやってみたのですが、今度は「Array」と表示されてしまい、具体的にどうしたらいいのか分かりません。 ※html側 <input type="checkbox" name="cat[]" value="abc"> <input type="checkbox" name="cat[]" value="def"> ※php側 <FORM action="<? echo $script; ?>" method="POST"> <? echo $err_message; ?> <?php foreach($_POST as $key=>$var) { $key = strtr($key, $string_from, $string_to); if(get_magic_quotes_gpc()) $var = stripslashes($var); $var = htmlspecialchars($var); print("項目:".$key."選択したのは".$var); ?> <INPUT type="hidden" name="<?= $key ?>" value="<?= $var ?>"> <?php print("です。\n"); } ?> となっています。 また、選択内容をメール送信するようになっており、 foreach($_POST as $key=>$var) { $key = strtr($key, $string_from, $string_to); if(get_magic_quotes_gpc()) $var = stripslashes($var); if($var == "eweb_submit") ; else $rebody.="[".$key."] ".$var."\n"; です。 複数項目をまとめて処理しているようで、どうしたらいいのか分かりません。ちなみに、http://www.eweb-design.com/のフリーのメールフォームを使っています。

    • ベストアンサー
    • PHP
  • チェックボックスのvalue値のチェック

    POSTされたチェックボックスの値の検証はどのようにしていますか? 私はチェックボックスの表示とともにvalue値をセッションに入れといて、送信先のページで、POSTされたvalue値がセッションに含まれていればOK、含まれていなければイタズラと判定しているのですが、 もっと簡単にすむ方法があれば教えていただきたいです。

    • ベストアンサー
    • PHP
  • 値の表示のやり方

    PHP初心者です。 チェックボックスを利用し、複数選択が出来る項目を作っています。 配列を使わずに、チェックをしていただいたものだけを取り出し、確認画面で表示しています。 その際、<input type='checkbox' name='key01'><input type='checkbox' name='key02'>など、nameを変えてPOSTで1つずつ値を取り出し、 $_SESSION['key']=($_POST['key01'].$_POST['key02'])等として、ひとつにまとめようとしています。 この時、確認画面で改行や区切りのマーク等をいれてわかりやすく表示したいのですが、当然チェックが入るものと入らないものが出てきますので、表示のしかたが上手くいかなくて困っています。 何かいい方法とかないでしょうか? そもそも、値だけ取り出したてセッション管理したいと言う考え方がまちがっているのでしょうか? 補足として、選択項目は10個ほどです。 また、現在は何の区切りもなくつながって表示されている状態です。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 【PHP】チェックボックスの必須チェック

    初歩的な質問ですみません。 現在、PHPで問い合わせフォームを作成しており、チェックボックスが選択されていない場合に、エラーを返す処理を行いたいです。 通常のテキストフィールドの場合は、下記の文言でエラー処理が行われるのですが、 チェックボックスが選択されているかを見るにはどうすればよいかご教示いただけないでしょうか。 ーーーーーーーーーーーーーーーー ■フォーム側 {if:$required.お名前} <p>エラー文</p> {/if:$required.お名前} ■php // 入力必須チェック if (isset($_POST['required'])) { foreach ($_POST['required'] as $v) { $tmpl->set("required.$v", false); if (empty($_POST[$v])) { $tmpl->set("required.$v", h($v . ERROR_REQUIRED)); $global_error[] = h($v . ERROR_REQUIRED); $global_error_flag = true; } } } ーーーーーーーーーーーーーーーー

    • ベストアンサー
    • PHP
  • URLの内容チェックがうまくいきません

    $_POST['url']に何らかの値が格納されている場合のみ、正規表現で値をチェックしたいのですが、現在のソースでは$_POST['url']が空の場合も処理が正規表現に移ってしまい、結果エラーが出てしまいます。 if ( isset($_POST['url']) && preg_match('/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/', $_POST['url']) && mb_strlen($_POST['url']) <= 100){ 【データベース登録処理】 }else{ echo "エラー:入力内容が正しくありません"; } issetあたりが怪しいとは思うのですが、!emptyでも駄目でした。 他に何か書き方がありましたらご教授ください。

    • ベストアンサー
    • PHP
  • checkboxの値を取得する方法について

    チェックボックスをひとつ用意しています。 チェックがされていれば1、チェックされていなければ0を 取得し、最終的には更新処理を行いたいと思っていますが すべてチェックされている状態で更新処理(1)がされてしまいます。 $ABC = $_POST['AAA']; If($ABC[$count] = "1"){ SQL = "1" }else{ SQL = "0" } <input type = "checkbox" checked name="abcKbn[]" id = "AAA" value = "1"> SQLに問題がないと思うので、省略させて頂きます。 value値を配列abcKbn[]に値をセットし、If文でチェックを 行っていますが、この場合だとvalue = "1"のため すべての値が1となり、配列に格納されるかと思っています。(違ったらすいません) そのためIf文もすべて1になるかと・・・。 チェックがされていれば1、チェックがされていなければ0を value値に設定することは可能なのでしょうか? それ以外でもし良いやり方があれば アドバイスお願い致します。

    • ベストアンサー
    • PHP
  • チェックボックスのチェック済みを保持

    PHPを使ってフォームのチェックボックスの初期値にチェック済みでページを表示させ、そのチェックを外してサブミットし、同ページにリロードした際、セッションを使ってチェックを外した状態を保持しようとしているのですがうまくいきません。 チェックを外した状態でリロードしてもチェックがついた状態で表示されてしまいます、チェックを外した状態を保持表示させるにはどのように記述すればよいのでしょうか ご教授宜しくお願いします。 【PHP】 session_start(); $event = $_POST[ 'event' ]; $_SESSION[ 'event' ] = $event; if(!empty($event)){ $event_on = 'checked';} 【フォーム】 <form action="./" method="post" name="chbox"> <input type="checkbox" name="event" id="event" value="event" $event_on >イベント <button class="btn" onClick="boxCheck()" >表示</button> </form> 環境 php5.3 html5 javascriptのlocalStrage等を使ったほうが実装が現実的なら、検討いたします。

    • 締切済み
    • PHP
  • 同様の値があるか判別するには?

    ショッピングカートを作っており商品情報を以下のような セッション配列で管理しています。 Array ( [set] => Array ( [0] => Array ( [key] => 商品名A [num] => 1 [price] => 1980 ) [1] => Array ( [key] => 商品名B [num] => 1 [price] => 2980 ) [2] => Array ( [key] => 商品名C [num] => 1 [price] => 3980 ) ) ) やりたいことは既に持っているセッションの['key']と商品名の 変数が同様かどうかを判別し同様の値があった場合となかった 場合で分岐しそれぞれの処理をしたいです。 分岐後の処理はなんとかなるのですがどうやって判断すれば いいものかわかりません^^; $set = 'ここに商品名がはいります'; if (!count($_SESSION['set'])) { // セッションカウントがない場合 // (1つ目の商品をカートに入れた場合) // 値設定 $n = 0; $_SESSION['set'][$n]['key'] = $set; // その他の処理 } else { // セッションカウントがある場合 // (2つ目以降の商品をカートに入れた場合) // 値設定 $n = count($_SESSION['set']); if (!array_search($set, $_SESSION['set'][$n])) { // ここで同様の値があるか判別したい } if (***) { // 同様の値がある場合の処理 } else { // 同様の値がない場合の処理 } } 宜しくお願い致します。

    • 締切済み
    • PHP
  • phpでの複数選択チェックボックスのデータ取得に関して質問です。

    phpでの複数選択チェックボックスのデータ取得に関して質問です。 制作中のWEBサイトにお問い合わせページを作っています。 その項目のひとつに、件名を選択させるチェックボックスを4つ配置しているのですが、 複数選択した際に、一番最後の値しか取得できないという現象が起こっています。 お問い合わせページ⇒確認ページ⇒メールで送信 という動きなのですが、確認ページでは問題なく複数の値を取得して表示できています。 問題はメールで送信する部分なのですが、なぜかここでは一番最後の値しか取得・表示できていません。 以下にソースを載せます。 --------------------------------------------------------- ★HTML側 <p> <label><input type="checkbox" size="40" name="件名[]" value="資料請求">資料請求 </label> <label><input type="checkbox" size="40" name="件名[]" value="入試に関するご質問">入試に関するご質問 </label> <label><input type="checkbox" size="40" name="件名[]" value="本校へのご意見">本校へのご意見 </label> <label><input type="checkbox" size="40" name="件名[]" value="その他ご質問・ご相談">その他ご質問・ご相談</label> </p> ★php側(メール配信) $body="「".$sbj."」からの発信です\n\n"; $body.="-------------------------------------------------\n\n"; foreach($_POST as $key=>$var) { if(is_array($_POST[$key])==true) { foreach($_POST[$key] as $key=>$var) { $key = strtr($key, $string_from, $string_to); if(get_magic_quotes_gpc()) $var = stripslashes($var); if($var == "eweb_submit") ; else $body.="[".$key."] ".$var."\n"; } } else { $key = strtr($key, $string_from, $string_to); if(get_magic_quotes_gpc()) $var = stripslashes($var); if($var == "eweb_submit") ; else $body.="[".$key."] ".$var."\n"; } } ------------------------------------------------------- ネットから取得したフリーのメールフォームをアレンジしてソースを記述しています。 php初心者なので、説明がわかりづらい部分や、載せるソースが足りないかもしれませんので、 ご指摘ください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • チェックボックスの値の受け渡しについて

    現在、複数のチェックボックスの値を配列にしてパラメータで送ったのち、そのパラメータを引き継いで、ページング処理をしようとしてエラーが出て困っております。 【ページングの処理】 function pager($idname,$countRe){ $id =$_GET[$idname]; foreach($_GET as $key => $value){ if ($key != $idname){ $other_param .= "&".$key."=".urlencode($value); } } if($id=="") $id=1; $maxPage=ceil($countRe / PER_PAGE); if( ($maxPage == 1) or ($maxPage < $id) ) return false; if($id > VIEW_PAGE_MENU_WIDTH + 1){ $startPage = $id - VIEW_PAGE_MENU_WIDTH; $startMore = "<a href=\"$PHP_SELF?".$idname."=".($startPage - 1).$other_param."\">".PREV_MARK." </a>\n"; }else{ $startPage = 1; } if($id + VIEW_PAGE_MENU_WIDTH < $maxPage){ $endPage = $id + VIEW_PAGE_MENU_WIDTH; $endMore = " <a href=\"$PHP_SELF?".$idname."=".($endPage + 1).$other_param."\"> ".NEXT_MARK."</a>\n"; }else{ $endPage = $maxPage; } $page_footer=""; for($i = $startPage ; $i <= $endPage ; $i++){ $page_footer.= " ".(($id == $i)?"<span style='font-size:120%'>$i</span>\n":"<a href=\"$PHP_SELF?$idname=$i$other_param\">$i</a>\n"); } $page_footer = $startMore.$page_footer.$endMore; print $page_footer; } ----------------------------------------------------- 【エラー内容】 Warning: urlencode() expects parameter 1 to be string, array given in どうやら foreach($_GET as $key => $value){ if ($key != $idname){ $other_param .= "&".$key."=".urlencode($value); } } の部分でチェックボックスの値が第1引数ではないのでエラーが返っていると思うのですが、どなたかエラーが出ないようにご教授ください。 お願いいたします。

    • ベストアンサー
    • PHP