• 締切済み

php繰り返し構文とforeache

PHP5.26 MySQL5 Apache2.2 <html> <head>登録</head> <body> <form action="" method="post"> <input type="submit" value="登録" /> <?php $context=<<<EOF <input type="text" name="name" /><br /> <input type="checkbox" value="" name="国語" />国語<br /> <input type="checkbox" value="" name="算数" />算数<br /> <input type="checkbox" value="" name="理科" />理科<br /> <input type="checkbox" value="" name="社会" />社会<br /> <input type="checkbox" value="" name="道徳" />道徳<br /> EOF; for($i=0;$i<4;$i++) {print $context;} ?> </body> </html> 上記コードを書くと5つループされます。 これをDBに登録する際、insert文を5回繰り返す、科目が複数チェックされていると1つのinsert文のように登録することが出来ません。1つの場合はforeachを使って配列を返す構文まではわかりました。 解決策としてはforeachを使って返された配列をserialize関数を使ってオブジェクト化し、そのまま登録することを考えました。出来ればserializeを使わずに登録したいと思います。 PDOを使用しています。 どうかどなたかお時間御座いましたらご教授お願いします。

  • PHP
  • 回答数2
  • ありがとう数1

みんなの回答

回答No.2

<?php if($_SERVER['REQUEST_METHOD'] == 'POST'){ if(isset($_POST['group'])){ if(is_array($_POST['group'])){ foreach($_POST['group'] as $p_data){ echo '<pre>'; print_r($p_data); echo '</pre>'; } } } } ?> <form action="" method="POST"> <?php for($i=0;$i<5;$i++) { ?> <input type="text" name="group[<?php echo $i?>][name]" /><br /> <input type="checkbox" name="group[<?php echo $i?>][check][]" value="国語" />国語 <input type="checkbox" name="group[<?php echo $i?>][check][]" value="算数" />算数 <input type="checkbox" name="group[<?php echo $i?>][check][]" value="理科" />理科 <input type="checkbox" name="group[<?php echo $i?>][check][]" value="社会" />社会 <input type="checkbox" name="group[<?php echo $i?>][check][]" value="道徳" />道徳 <hr /> <? } ?> <input type="submit" value="登録" /> </form> これで、それぞれのPOSTデータが含まれることを確認してください。(print_rの部分) name値を配列表記すれば、$_POSTで取得する値も配列になります。 serialize関数で、配列を文字列にする件に関しては、PHP以外の言語でデータベースから値取得するときに面倒が起きますので、CSVデータなどに加工して保存したほうがいい気もしますが、いかがでしょう。

atlantic32
質問者

お礼

ありがとうございます!name値を配列表記にすればいいんですね。 こんなこと考えもしなかったです…。

atlantic32
質問者

補足

一晩やってすぐに諦めるのもまずいことだと思いますが… いくら考えても配列要素を一個づつ取り出すのが自分には考えつきませんでした。いっそのこと5つを登録するのではなく、1つづつ登録するようなものに変えようと思います。自分の実力に見合わない構文を使おうとするのは役不足だと思いました。

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

何をやりたいかよくわかりません・・・ この構文だと5x5=25の表示をしたいということ? nameがかぶるしvalueを設定していないしどうしたいのでしょうか? おそらく、nameとvalueを調整するだけでなんとかなりそうですが・・

atlantic32
質問者

補足

ソースめちゃくちゃになってました。 申し訳ございません。 $context=<<<EOF <input type="text" name="name" /><br /> <input type="checkbox" value="国語[]" />国語 <input type="checkbox" value="算数[]" />算数 <input type="checkbox" value="理科[]" />理科 <input type="checkbox" value="社会[]" />社会 <input type="checkbox" value="道徳[]" />道徳 <hr /> EOF; for($i=0;$i<5;$i++) {print $context;} -------------------------------------------------------- 名前と好きな教科を登録する画面を作りたいと思います。 チェックボックスを配列で受け取る方法は上記コードの 登録欄が1つの場合(名前と科目1つづつ)は登録可能な ところまでこぎつけたのですが、これを一気に5つないし より多くを登録しようとするにはどうすればいいのかわかりません。

関連するQ&A

  • phpでチェックボックスでの値の表示について

    HTMLで作成したテキスト、セレクト、チェックボックスなどに、選択されたもの全てをPOST送信で受け取って PHPにてパラメータをチェックしてから 確認画面(HTML)に表示してPHPにてDB登録するというプログラムを作ってます。 HTML側で <input type="checkbox" name="genre[0]" value="1" >国語 <input type="checkbox" name="genre[1]" value="2" >算数 <input type="checkbox" name="genre[2]" value="3" >理科  <input type="checkbox" name="genre[3]" value="4" >社会 として例えば、 <?php $genre = $_POST["genre"]; foreach ($genre as $key => $value){ print($value); } ?> で表示するとチェックした数字が表示されます。 (国語をチェックした場合 1) これを 国語 と表示させるにはどうすればいいんでしょうか? DBに登録する際は数字でいいんですが。

    • ベストアンサー
    • PHP
  • ラジオボタンとチェックボックスの計算について

    ラジオボタンとチェックボックスで選択して、その合計を表示させたいのですが、合計の最高は50になる用に作ったのですが、9点にしかなりません。 私が考えるに、<script language="JavaScript">~</script>の間が間違っていると思うのですがどうでしょうか? 皆様ご教授の程お願いします。 <script language="JavaScript"> <!-- // 項目の合計を計算 function ttlValue() { chn = 10; // ラジオボタンとチェックボックスの総数 ttl = 0; for(i=0; i<chn; i++) { if(document.nForm.elements[i].checked) { ttl += eval(document.nForm.elements[i].value); } } document.nForm.result.value = ttl; } //--> </script> </head> <body alink="#000000" bgcolor="#f0f8ff" link="#00ffff" text="#000000" vlink="#ff0000"> <br> それぞれの項目で該当する回答を1つずつ選択して下さい。 <form name="nForm">項目1<br> <input name="ch1" value="3" checked="checked" type="radio">a<br> <input name="ch1" value="2" type="radio">b<br> <input name="ch1" value="1" type="radio">c<br> <input name="ch1" value="0" type="radio">d<br> <br> 項目2<br> <input name="ch2" value="3" checked="checked" type="radio">a<br> <input name="ch2" value="2" type="radio">b<br> <input name="ch2" value="1" type="radio">c<br> <input name="ch2" value="0" type="radio">d<br> <br> 項目3<br> <input name="ch3" value="3" checked="checked" type="radio">a<br> <input name="ch3" value="2" type="radio">b<br> <input name="ch3" value="1" type="radio">c<br> <input name="ch3" value="0" type="radio">d<br> <br> 項目4<br> <input name="ch4" value="1" checked="checked" type="radio">a<br> <input name="ch4" value="0" type="radio">b<br> <br> 項目5<br> <input name="ch5" value="1" checked="checked" type="radio">a<br> <input name="ch5" value="0" type="radio">b<br> <br> オプションがあれば選択して下さい。(複数選択可)<br> <input name="bx1" value="1" type="checkbox">1<br> <input name="bx1" value="1" type="checkbox">2<br> <input name="bx1" value="1" type="checkbox">3<br> <input name="bx1" value="1" type="checkbox">4<br> <input name="bx1" value="1" type="checkbox">5<br> <input name="bx1" value="1" type="checkbox">6<br> <input name="bx1" value="1" type="checkbox">7<br> <input name="bx1" value="1" type="checkbox">8<br> <input name="bx1" value="1" type="checkbox">9<br> <input name="bx1" value="1" type="checkbox">10<br> <input name="bx1" value="1" type="checkbox">11<br> <input name="bx1" value="1" type="checkbox">12<br> <input name="bx1" value="1" type="checkbox">13<br> <input name="bx1" value="1" type="checkbox">14<br> <input name="bx1" value="1" type="checkbox">15<br> <input name="bx1" value="1" type="checkbox">16<br> <input name="bx1" value="1" type="checkbox">17<br> <input name="bx1" value="1" type="checkbox">18<br> <input name="bx1" value="1" type="checkbox">19<br> <input name="bx1" value="1" type="checkbox">20<br> <input name="bx1" value="1" type="checkbox">21<br> <input name="bx1" value="1" type="checkbox">22<br> <input name="bx1" value="1" type="checkbox">23<br> <input name="bx1" value="1" type="checkbox">24<br> あなたの獲得したメダルは何色?<br> <select name="ch2"> <option value="0" selected="selected">なし</option> <option value="5">金メダル</option> <option value="3">銀メダル</option> <option value="1">銅メダル</option> </select> <br> <br> メダル獲得まで何年かかりましたか?<br> 項目6<br> <input name="ch6" value="10" checked="checked" type="radio">20年以上<br> <input name="ch6" value="5" type="radio">19年~10年<br> <input name="ch6" value="3" type="radio">9年~5年<br> <input name="ch6" value="1" type="radio">4年~3年<br> <input name="ch6" value="0" type="radio">2年未満<br> <br> <input value="合計金額を計算" onclick="ttlValue()" type="button"><br> <br> 合計<input name="result" size="10" type="text"> </form> <br>

  • checkbox 特定項目だけを、チェックするには

    こんにちは。いつもお世話になります。 checkbox内で、同じnameの中から特定のものだけ チェックさせるにはどうしたら良いでしょうか。 条件として、name='or52'の部分は変更出来ません。 <input type='button' value='A,B,Cだけを同時にチェック' onclick='checkAll();'> <form action='xxx.cgi' method='post' name='f1'> <input name='or5' type='checkbox' value='A'><br> <input name='or5' type='checkbox' value='B'><br> <input name='or5' type='checkbox' value='C'><br> <input name='or5' type='checkbox' value='D'><br> <input name='or5' type='checkbox' value='E'><br> <input name='or5' type='checkbox' value='F'><br> ......... </form> それで、こんなのをウェブから探してきました。 function checkAll() { for (i=0; i<7; i++) document.f1.elements["or52"+i].checked = true; } そして、同時にチェックしたいものだけ下記の様にしました。 <input name='or52' type='checkbox' value='A' id='or51'> <input name='or52' type='checkbox' value='B' id='or52'> <input name='or52' type='checkbox' value='C' id='or53'> 取りあえずできますが、エラーがでます。 「document.f1.elements["..."]は、objまたはnullではない!」 どうか教えて下さい。よろしくお願いします。

  • JavaScriptでcheckboxの入力個数制限

    以下のようなチェックボックスがあります。 3つ以上チェックできないようにしたいのですが、JavaScriptで可能でしょうか? <FORM method=POST action="aaa.cgi" name="FORM1"> <input type="checkbox" name="Q1" value="1">1<br> <input type="checkbox" name="Q2" value="1">2<br> <input type="checkbox" name="Q3" value="1">3<br> <input type="checkbox" name="Q4" value="1">4<br> <input type="checkbox" name="Q5" value="1">5<br> </form>

  • php アンケートについての質問

    htmlのフォームから送信 phpでアンケート結果を受け取る ようなものを書きましたがphpの受け取る処理でエラーが起きてしまうので@を書いて何とか動くようにしました。@を使わずにエラーを修正したいのですがうまくいきません。どなたか助けてさい <html> <p> </p> <h3>アンケート</h3> <form name="form" action="upload1.php" method="GET"> <body bgcolor="#f40fff" text="#ffffff"> <p> お名前を入力して下さい:<br> <input type="text" name="simei"> </p> <p> 性別を選んで下さい。<br> <input type="radio" name="gender" value="男性">男性です<br> <input type="radio" name="gender" value="女性">女性です<br> </p> <p> この大学を何で知りましたか?<br> <input type="checkbox" name="check1" value="メディア媒体"/> メディア媒体で<br> <input type="checkbox" name="check2" value="イラスト"/> イラストで<br> <input type="checkbox" name="check3" value="その他"/> その他<br> </p> <p> 最近ハマっていることは?<br> <input type="checkbox" name="check4" value="サークル、部活"/> サークル部活など<br> <input type="checkbox" name="check5" value="得にない"/> 得にない<br> <input type="checkbox" name="check6" value="その他"/> その他<br> </p> <p> 今やりたいことは?<br> <input type="checkbox" name="check7" value="課題"/> 課題など<br> <input type="checkbox" name="check8" value="得にない"/> 得にない<br> <input type="checkbox" name="check9" value="その他"/> その他<br> </p> <p> <input type="submit" name="submit" value="送信"> </p> </body> </html> php <html> <body bgcolor="#f40fff" text="#ffffff"> <p> </p> <h3>アンケート</h3> <p> <?php print(date('A:g時i分s秒').'<br>'); ?> <b>お名前:</b><br> <?php print( @$_REQUEST["simei"] ); ?> </p> <p> <b>性別:</b><br> <?php print( @$_REQUEST["gender"] ); ?> </p> <p> <b>この大学を何で知りましたか:</b><br> <?php print( @$_REQUEST["check1"] ); ?><br> <?php print( @$_REQUEST["check2"] ); ?><br> <?php print( @$_REQUEST["check3"] ); ?><br> </p> <p> <b>最近ハマっていることは:</b><br> <?php print( @$_REQUEST["check4"] ); ?><br> <?php print( @$_REQUEST["check5"] ); ?><br> <?php print( @$_REQUEST["check6"] ); ?><br> </p> <p> <b>今やりたいことは:</b><br> <?php print( @$_REQUEST["check7"] ); ?><br> <?php print( @$_REQUEST["check8"] ); ?><br> <?php print( @$_REQUEST["check9"] ); ?><br> </p> <p> <?php $life = 60 * 60 * 24 * 30; if(isset($_COOKIE["count"])) { $count = $_COOKIE["count"] + 1; } else { $count = 1; } setcookie("count", $count, time() + $life); ?> <?php echo $count, "回目の訪問です。\n"; ?> </body>

    • ベストアンサー
    • PHP
  • phpによるアンケート csvに保存

    <html> <p> </p> <Div Align="center"> <h3>アンケート</h3> <form name="form" action="log.csv" method="GET"> <div> <p> お名前を入力して下さい:<br> <input type="text" name="simei"> </p> <p> 性別を選んで下さい。<br> <input type="radio" name="gender" value="男性">男性です<br> <input type="radio" name="gender" value="女性">女性です<br> </p> <p> 好きなスポーツ: <select name="favorite_sports"> <option value="バスケットボール">バスケットボール</option><br> <option value="野球">野球</option><br> <option value="サッカー">サッカー</option><br> <option value="テニス">テニス</option><br> </select><br> <br> <p> 満足度をこたえてください<br> <input type="checkbox" name="check1" value="満足"/> 満足<br> <input type="checkbox" name="check2" value="やや満足"/>やや満足 <br> <input type="checkbox" name="check3" value="ふつう"/> 普通<br> <input type="checkbox" name="check3" value="やや不満"/> やや不満<br> <input type="checkbox" name="check3" value="不満"/> 不満<br> </p> <p> <p> <input type="submit" name="submit" value="回答"> </p> <?php if( isset( $_POST[ 'log.csv' ] ) ){ //テキストボックス「log.csv」に入力された内容を表示 print "送信された内容は{$_POST['log.csv']}です。\n"; } ?> </div> </body> </html> 回答ボタンを押すと内容をcsvに保存するアンケートを作りたいのですがcsvに全く反映されて内容で困っております。どなたか助けてほしいです

    • ベストアンサー
    • PHP
  • phpに関する質問

    phpでフォームに入力して送信ボタンを押したらアンケートの集計をphpの方に出力するプログラムを作っているのですがhtmlのほうは問題なく動くのですがphpのほうが入力したものが反映されなくて非常にこまっていますどなたかたすけてください ここからhtml <html> <p> </p> <h3>アンケート</h3> <form name="form" action="kadai.php" method="GET"> <p> お名前を入力して下さい:<br> <input type="text" name="simei"> </p> <p> 性別を選んで下さい。<br> <input type="radio" name="gender" value="男性">男性です<br> <input type="radio" name="gender" value="女性">女性です<br> </p> <p> この~を何で知りましたか?<br> <input type="checkbox" name="check1" value="メディア媒体"/> メディア媒体で<br> <input type="checkbox" name="check2" value="イラスト"/> イラストで<br> <input type="checkbox" name="check3" value="その他"/> その他<br> </p> <p> 最近ハマっていることは?<br> <input type="checkbox" name="check4" value="サークル、部活"/> 部活など<br> <input type="checkbox" name="check5" value="得にない"/> 得にない<br> <input type="checkbox" name="check6" value="その他"/> その他<br> </p> <p> <input type="submit" name="submit" value="上記内容で送信"> </p> </form> </body> </html> ここからphp <html> <p> </p> <h3>アンケート</h3> <p> <b>下記の内容でお問合せを受付けました。<br> ありがとうございました。</b> </p> <p> <b>お名前:</b><br> <?php print( $_REQUEST["simei"] ); ?> </p> <p> <b>性別:</b><br> <?php print( $_REQUEST["gender"] ); ?> </p> <p> <b>この~を何で知りましたか:</b><br> <?php print( $_REQUEST["check1"] ); ?><br> <?php print( $_REQUEST["check2"] ); ?><br> <?php print( $_REQUEST["check3"] ); ?><br> </p> <p> <b>最近ハマっていることは:</b><br> <?php print( $_REQUEST["check4"] ); ?><br> <?php print( $_REQUEST["check5"] ); ?><br> <?php print( $_REQUEST["check6"] ); ?><br> </p> <p> </body> </html>

    • ベストアンサー
    • PHP
  • チェックボックスにチェックしたファイルだけをダウンロードできるようにしたい

    サーバーにpdfファイルを10個保存しています。 HTMLページでチェックボックスにチェックを入れたpdfだけを ダウンロードできるようにURL入りの返信メールを自動的に送りたい のですが、やり方がわかりません。 どなたか詳しい人がおられましたら、教えていただけますでしょうか。 一応チェックボックスの過去の回答を見たのですが見当たりません。 (全て見れたわけではないですが) チェックボックス表示までは以下のところまでできたのですが。 よろしくお願いします。 <form> <input type="checkbox" name="グループ1" value="項目1">Apdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目2">Bpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目3">Cpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目4">Dpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目5">Epdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目6">Fpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目7">Gpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目8">Hpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目9">Ipdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目10">Jpdf<br><br><br><br> </form>

  • チェックボックスによる検索(複数チェックの場合)

    プログラム超初心者です。色々なサイトを検索し参考にしたのですがどうしても結果が得られないため投稿させていただきました。(似たようなものは多かったのですがわかりませんでした。) チェックボックスにて複数チェックされる可能性があるものをMYSQLより検索をかけ結果を表示したいと思っております。 地域:□北海道、□東北、□関東、□北陸、□中部、 ジャンル:□イタリアン、□アジアン料理、□洋食、□すべて 以上にチェックをいれてもらったものに対し検索結果画面をだす予定です。 検索をかけるhtml画面は以下のように致しました。 <form method="POST" action="search.php"> <input name="area[]" type="checkbox" value="0"/>北海道<br> <input name="area[]" type="checkbox" value="1"/>東北<br> <input name="area[]" type="checkbox" value="2"/>関東<br> <input name="area[]" type="checkbox" value="3"/>北陸<br> <input name="area[]" type="checkbox" value="4"/>中部<br> <input name="genre[]" type="checkbox" value="a"/>イタリアン<br> <input name="genre[]" type="checkbox" value="b"/>アジア料理<br> <input name="genre[]" type="checkbox" value="c"/>洋食<br> <input name="genre[]" type="checkbox" value="g"/>すべて<br> <input type="submit" name="bottun1" value="入 力"> PHPで$変数名a = $_POST["area"];と$変数名b = $_POST["genre"]; とし配列 foreach関数を使うのでは・・・とまで考えたのですがその後どうすればよいかわかりません。こんなにわからない状態でお伺いするのは恥ずかしいのですがお知恵を頂きたく投稿させていただきました。 お忙しいかと思いますがどうか宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • php アンケートについての質問

    アンケートフォームを作成しました。回答ボタンを押すとcsvファイルにアンケート結果の内容を保存できるように造りたいのですが参考になるようなものがなくて困っています。どなたか参考になるようなソースなどをお教えくださると助かります。 <HTML> <HEAD> <TITLE>テキスト送信のテスト></TITLE> </HEAD> <FORM name="form1"method="post" action="view.php"> <Div Align="center">名前:<BR> <INPUT type="text"name="onamae"> <BR> 性別:<BR> <INPUT type="radio"name="gender" value="男">男<BR> <INPUT type="radio"name="gender" value="女">女<BR> <BR> <SELECT name="syokugyou"> <OPTION value""selectd>職業をえらんでください</OPTION> <OPTION value"学生">学生</OPTION> <OPTION value"会社員">会社員</OPTION> <OPTION value"公務員">公務員</OPTION> <OPTION value"自営業">自営業</OPTION> <OPTION value"その他">その他</OPTION> </SELECT><BR> <p></p> 満足度を答えてください:<BR> <INPUT type="checkbox" name="hobby[]" value="満足"> 満足<BR> <INPUT type="checkbox" name="hobby[]" value="やや満足"> やや満足<BR> <INPUT type="checkbox" name="hobby[]" value="普通"> 普通<BR> <INPUT type="checkbox" name="hobby[]" value="やや不満"> やや不満<BR> <INPUT type="checkbox" name="hobby[]" value="不満"> 不満<BR> <BR> <INPUT type="submit" value="回答"> </div> </FORM> </BOBY> </HTML> <HTML> <HEAD> <TITLE>PHPのテスト</TITLE> </HEAD> <BOBY> <p> <Div Align="center">名前</p> <?php print $_POST["onamae"]; ?> <p> <?php if(isset($_POST["gender"])&&($_POST["gender"]=="男"|| $_POST["gender"]=="女")){ print"性別:<BR>"; print $_POST["gender"]; }else{ print"性別を選んでください。<BR>"; } ?> <p> </p> <?php if($_POST["syokugyou"]<>""){ print"職業:<BR>"; print$_POST["syokugyou"]; }else{ print"職業をえらんでください<BR>"; } ?> <p>

    • ベストアンサー
    • PHP

専門家に質問してみよう