連想配列の操作がうまくいかない

このQ&Aのポイント
  • PHPの連想配列を操作する際にシンタックスエラーが発生しています。特に、チェックボックスの選択状態に応じて「or」または「and」の値を連想配列に代入する処理がうまく機能していません。
  • 具体的には、チェックボックスが選択されている場合には「or」を、選択されていない場合には「and」を代入するようにしていますが、その処理の一部にシンタックスエラーが出ています。
  • 解決方法としては、ループ処理の中で変数の代入を行う箇所で問題が発生している可能性があります。変数「$and」に値を代入する際の文法を見直し、適切な代入方法を採用する必要があります。
回答を見る
  • ベストアンサー

連想配列の操作がうまくいかない

チェックがついてきたものは"or"ついていなかったものは"and"を返すphpを作成しています。 if($_POST["cb"]) { //チェックされていれば $cb = $_POST["cb"]; //変数 $cb に格納 } $ands = array_fill(0,8,"or"): foreach($ands as $and){ //・・・・・・・・・・・・・・(A) if($cb){ $and="or"; } } echo <<< EOT <form method="POST" action="./checkbox.php"> <input type="checkbox" name="cb[0]">title0<br> : <input type="checkbox" name="cb[8]">title8<br> <input type="submit" value="送信"> </form> EOT; たとえば0,1,4,6にチェックがついていたら、 $and=("or","or","and","or","and","or","and","and") 1.7にチェックがついていたら $and=("or","and","or","or","or","or","and","or) となるように考えたのですが、なぜか(A)の部分にシンタックスエラーが出てきます。 どなたか解決方法をご教示ください。どうかよろしくお願いします。

  • PHP
  • 回答数3
  • ありがとう数4

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

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

若干、つめが甘い。 たぶんこんな感じがしたいんだと。 <?PHP if(isset($_REQUEST["cb"])){ $cb = $_REQUEST["cb"]; $ands = array_fill(0,8,"or"); foreach($ands as $key=> &$and){ if(isset($cb[$key])){ $and="and"; } } print_r($ands); } echo <<< EOT <form> <input type="checkbox" name="cb[0]" value="1">title0<br> <input type="checkbox" name="cb[1]" value="1">title1<br> <input type="checkbox" name="cb[2]" value="1">title2<br> <input type="checkbox" name="cb[3]" value="1">title3<br> <input type="checkbox" name="cb[4]" value="1">title4<br> <input type="checkbox" name="cb[5]" value="1">title5<br> <input type="checkbox" name="cb[6]" value="1">title6<br> <input type="checkbox" name="cb[7]" value="1">title7<br> <input type="checkbox" name="cb[8]" value="1">title8<br> <input type="submit" value="go"> </form> EOT; ?>

spinia0120
質問者

お礼

おおお…うまくできました! 本当にありがとうございます

その他の回答 (2)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

セミコロンがコロンだというオチでは... foreachブロックの中もちょっと意味が分からないのでよく考えた方がいいです。

spinia0120
質問者

お礼

ご回答ありがとうございます。 まずすべてにandを代入してから該当部分だけorに置き換えようと考えていました。

noname#138894
noname#138894
回答No.1

シンタックスエラーの中身が何より大事なので、 提示して下さい。 また、エラーで表示される行数はあくまで目安くらいに思っておかないと エラーが永久に見つからないこともあります。

spinia0120
質問者

お礼

ご回答ありがとうございます。 >シンタックスエラーの中身が何より大事なので、 提示して下さい。 わかりました。エラーが出た際は必ず明示します。

関連するQ&A

  • チェックボックスで得たデータを送信する場合

    CGIでデータの受け渡しを行い、決められたアドレスへ結果を送信するアンケートをつくっています。以前、チェックボックスで複数回答可とした場合の制限のかけ方をJavaScriptを用いた方法で教えてもらいましたが、これを利用して得た値をCGIで受け取りたいのですが、どうやって設定すればいいのでしょうか。「name」がそれぞれ名前が違う所でつまずいています。また<form method=post action="***.cgi">~</form>と項目全体をくくればいいのでしょうか?参考までに以下のHTMLを付記いたします。 <html> <head> <title>5個のうち3個しかチェックできないようにする</title> <script Language="JavaScript"><!-- function check(n) { fOBJ = document.myFORM; count = 0; for (i=1; i<=5; i++) if (fOBJ["CB"+i].checked) count++; if (count > 2) { alert("3個以上チェックできません"); fOBJ["CB"+n].checked = false; } } // --></script> </head> <body> <form name="myFORM"> <input type="checkbox" name="CB1" onClick="check(1)">チェック1<br> <input type="checkbox" name="CB2" onClick="check(2)">チェック2<br> <input type="checkbox" name="CB3" onClick="check(3)">チェック3<br> <input type="checkbox" name="CB4" onClick="check(4)">チェック4<br> <input type="checkbox" name="CB5" onClick="check(5)">チェック5<br> </form> </body> </html>

    • ベストアンサー
    • CGI
  • 二次元配列のforeachはどうすれば?

    <form action="form_check.php" method="POST"> <input type="checkbox" name="check[]" value="aaaa"> <input type="checkbox" name="check[]" value="bbbb"> <input type="checkbox" name="check[]" value="cccc"> <input type="submit" value="送信"> </form> フォームでこのように送りました このデータを受け取り、1つにまとめたいのですが foreach($_POST[check] as $val){ if($all){ $all .= ",".$val; }else{ $all = $val; } } このようにしてみたところ Warning: Invalid argument supplied for foreach() とエラーが出ました。 二次元配列でforeachのループをかけるときはどのように記述すればいいのでしょうか。

    • ベストアンサー
    • PHP
  • チェックボックスの初期選択と選択保持

    複数のチェックボックスのうちどれかを初期選択させ、ボタン押下後は選択保持をさせたいです。 片方のみならできるのですが、どなたかご教授いただけるとうれしいです。 現在のソースはこんな感じになっていて選択したものの保持はできるのですが、初期選択ができていません。よろしくおねがいします。 <html> <body> <form name="form" method="post"> <?php test1() ?> test1 <?php test2() ?> test2 <?php test3() ?> test3<br><br> <input type="submit" name="button" value="button"> </form> <?php function test1(){ if ($_POST['test1']){ echo "<input type=\"checkbox\" name=\"test1\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test1\">"; } } function test2(){ if ($_POST['test2']){ echo "<input type=\"checkbox\" name=\"test2\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test2\">"; } } function test3(){ if ($_POST['test3']){ echo "<input type=\"checkbox\" name=\"test3\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test3\">"; } } ?> </body> </html>

    • 締切済み
    • PHP
  • 配列をhiddenで

    こんばんは。いつもお世話になっております。 初歩的な質問かと思いますが、書籍を参考に、hiddenでのデータの受渡しの応用にと、配列でのチェックボックスを設けたのですが、上手く表示できずに悩んでおります。 書籍を片手にない知識を振り絞っているのですが、思うように結果を得る事が出来ません。お忙しい中恐縮ですが、アドバイスなど頂戴できたら幸いです。いつもすまらない質問ですみません。 confirm.php <?php if($_POST["open"]==""){ ?> <FORM name="form1" method="post" action="confirm.php"> <input type="checkbox" name="open[]" value="1" <?=$ca01?>>1 <input type="checkbox" name="open[]" value="2" <?=$ca02?>>2 <INPUT type="submit" value="送信"> <INPUT type="hidden" name="user_id" value="0001"> <?php exit; } else{ ?> <FORM name="form1" method="post" action="view.php"> <?php if(isset($_POST["open"])){ $open_box = implode(',',$_POST["open"]); if(stristr($open_box, "1")){$ca01 = "checked";} if(stristr($open_box, "2")){$ca02 = "checked";} } $open_box = implode(',',$_POST["open"]); echo $open_box; ?> <INPUT type="submit" value="決定"> <INPUT type="hidden" name="open[]" value="<?=$_POST["open"]?>"> <INPUT type="hidden" name="user_id" value="<?=$_POST["user_id"]?>"> </FORM> <?php } ?> view.php <?php $open_box = implode(',',$_POST["open"]); echo $open_box; ?>

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

  • 連想配列の処理

    こんにちは。 MySQL 4.1.22 と PHP 4.4.7 でプログラムを組んでいて、こちらではいつも皆様の知識と経験を参考にさせていただいております。 今回、どうしても超えられない壁に当たってしまいコーディングが止まってしまったので力をお貸し下さい。 今取り組んでいるプログラムは、複数の<checkbox>から選択した値を受け取って、マスターテーブルに検索を掛けて、返った値を表示した後、確認ボタンで別のユーザーテーブルに値を格納するというものです。 *** プログラムの流れ **** input.php(入力ページ:checkbox )  ↓ view.php (確認ページ:CC_master.tbl)  ↓ regist.php (登録ページ:user_master.tbl) input.php から値を取得して、 CC_master.tbl に検索・値の取得までは出来たのですが、取得した値を別の形に整形するところでつまづいてしまいました。 //--- input.php --- //--- 実際には 99個の checkbox がある訳ではありません。^^; <form name="form" method="POST" action="view.php"> <input type="checkbox" name="cc[]" value="1">50cc <input type="checkbox" name="cc[]" value="2">80cc <input type="checkbox" name="cc[]" value="3">125cc <input type="checkbox" name="cc[]" value="4">200cc <input type="checkbox" name="cc[]" value="5">250cc <input type="checkbox" name="cc[]" value="6">400cc   ・   ・(中略)   ・ <input type="checkbox" name="cc[]" value="99">その他 <input type="submit" name="exec" value="排気量の確認"> </form> //--- END Code --- //--- view.php --- //--- チェックされた排気量コードを CC_master.tbl に対して検索をかける //---例:1番、2番、6番にチェックを入れたとして... //---具体的な排気量を「 50cc 80cc 400cc 」の様に一列、スペース区切りで変数($cc_name)に格納、表示 $arr_cc = $_POST["cc"]; if(isset($arr_cc) and count($arr_cc) > 0){ $val = ""; for($i=0; $i<count($arr_cc); $i++ ){ if($i == 0){ $val .= $arr_cc[$i]; }else{ $val .= "," . $arr_cc[$i]; } } } $res = mysql_query("select * from CC_master where id in ('$val')"); while($row = mysql_fetch_array($res)){ # #ここで配列からフィールド:cc の値のみを取り出して、変数 $cc_name に格納。 # } ecoh $cc_name; //--- END Code --- //--- regist.php --- //--- $cc_name の値をINSERT文で user_master.tbl に登録。 現在、上記のように考えていますが、どうしても変数 $cc_name に意図した形で値を格納できません。 $val に値を入れる要領で処理すればOKだと思うのですが、while( )、for( )、foreach( ) のどれを使っても上手くいきません。連想配列となる $row["cc"] の扱い方(整形方法)がどうしても解らないで助けて下さい。 宜しくお願いします。 //--- CC_master.tbl --- CREATE TABLE `CC_master` ( `id` int(2) NOT NULL default '0', `cc` varchar(10) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=ujis; INSERT INTO `CC_master` (`id`, `cc`) VALUES (1, '50cc'), (2, '80cc'), (3, '125cc'), (4, '200cc'), (5, '250cc'), (6, '400cc'),   ・   ・(中略)   ・ (99, 'その他');

    • 締切済み
    • PHP
  • 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ではない!」 どうか教えて下さい。よろしくお願いします。

  • フォーム INPUTの文字化け対策の対処方は?

    チェックボックス(趣味のリスト)のチェック有無を配列で受けていますが、"パソコン"の文字が"パソ\コン"に文字化けしてしまいます。対処方法をお教えください。 <?php mb_language('Japanese'); $hobby=@implode(" ",$_POST[hobby]); echo $hobby; ?> <FORM action="<?=$_SERVER[PHP_SELF]; ?>" method="post" > <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> <INPUT type="checkbox" name="hobby[]" value="写真" >写真<BR> <INPUT type="submit" name="submit" value="送信"><BR> <INPUT type="reset" name="reset" value="RESET"> </FORM>

    • ベストアンサー
    • PHP
  • チェックボックスから配列を使って値を受け取る方法

    チェックボックスから配列を使って値を受け取る方法について、 以下の通りに試してみたのですが、上手く行かず、 配列$fCに値が入りません。 どなたか原因を教えていただけないでしょうか。 ------------------------------------------------ hoge.html <form action="hoge.php"> <input type="checkbox" name="fC[]" value="hoge"> hoge <br> <input type="checkbox" name="fC[]" value="foo"> foo <br> <input type="checkbox" name="fC[]" value="bar"> bar <br> <input type="submit" value="OK"> </form> ---------------------------------------------------------- ------------------------------------------------- hoge.php <? for( $i=0; $i<count($fC); $i++ ) { print $i ." ::: " . $fC[$i] . "<br>\n"; } ?> ----------------------------------------------------------

    • ベストアンサー
    • PHP
  • checkboxにチェックされた果物をOR条件で、さらに他の検索条件と

    checkboxにチェックされた果物をOR条件で、さらに他の検索条件とAND条件で結ぶSQL文を発行したいです。 (PHP5+MySQL5) 5年前に本サイトでご教示いただいた以下の回答を今でも活用させていただいて参りましたが、 http://okwave.jp/qa/q1506155.html このたび、好きな果物の登録が「ない」人を抽出する(空白の人もマッチさせる)SQL文を発行したくなりました。 具体的には以下のような画面だとして、kudamono_torokunasiのチェックボックスをどのように取り込んだらよいでしょうか。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <body> <form method="post" action="<?php $_SERVER['PHP_SELF'] ?>"> 好きな果物 <input type="checkbox" name="kudamono[]" value="0">りんご <input type="checkbox" name="kudamono[]" value="1">みかん <input type="checkbox" name="kudamono[]" value="2">ぶどう <input type="checkbox" name="kudamono[]" value="3">ばなな <br> 登録なし(空白の人もマッチさせる) <input type="checkbox" name="kudamono_torokunasi"> <br> <input type="submit" name="exec" value="検索"> </form> </body> </html> <?php if ($_POST['kudamono'] != "") { $sql = "select * from mytable where myval1 =1 "; if (is_array($_POST['kudamono'])) {  $sql .= " and (";  $i=0; # 「or」 をつけるフラグ  foreach ($_POST['kudamono'] as $kudamonovalue) {   if ($i) {    $sql .= " or ";   }   $sql .= "kudamono = '$kudamonovalue'";   $i++;  }  $sql .=")"; } $sql .= " order by myval3"; echo $sql; } ?>

    • ベストアンサー
    • PHP