PHP配列のループ中に値が正しく代入されない問題への対処方法

このQ&Aのポイント
  • PHPとDBを使用してシステムを作成しています。DBの値を読みながら配列と比較しています。しかし、ループ中の配列で2回目以降に正しく値が代入されません。$Baitai[$cnt]で最初のループでは値が正しく入りますが、2回目以降は一部の文字'b'しか入りません。
  • ループ中の配列で2回目以降に正しく値が代入されない問題が発生しています。$Baitai[$cnt]で最初のループでは値が正しく入りますが、2回目以降は一部の文字'b'しか入りません。
  • PHPでの配列のループ中に値が正しく代入されない問題があります。$Baitai[$cnt]で最初のループでは値が正しく入りますが、2回目以降は一部の文字'b'しか入りません。この問題に対してご教授いただけますか?
回答を見る
  • ベストアンサー

PHP 配列について

phpとDBでシステムを作っています DBをよみながら配列と比較しています。 ループ中の配列で2回目以降がどうしても配列の値が入りません $Baitai[$cnt]で1回目は配列の値が来るのですが 2回目以降が一部の文字bしか入りません ご教授お願いします。 while($arr_record = mysql_fetch_assoc($rs)) { foreach($arr_record as $field_name => $field_value) {            if($field_value<>"") { echo $Baitai[$cnt]; $Baitai="Baitai".$k; if($Baitai[$cnt]==$field_value) { ?>       <input type="checkbox" value="<?php echo $field_value;?>" Name="<?php echo $Baitai;?>" checked><?php echo $field_value;?> <?php } else { ?> <input type="checkbox" value="<?php echo $field_value;?>" Name="<?php echo $Baitai; ?>"><?php echo $field_value;?> <?php } } $cnt=$cnt+1;             $k=$k+1; } }

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

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

  • ベストアンサー
  • tomaju
  • ベストアンサー率76% (84/110)
回答No.1

$Baitai="Baitai".$k; により配列ではなくなっていませんか?

関連するQ&A

  • JavaScriptとPHPの配列

    現在、JavaScriptで配列を持っています。 str=[20,38,24,18,23,26,-,20,38.4,18,23,-,2009,01,09,15,13,24,] この配列を順序を変えずにPHP配列としてもつことは可能でしょうか? $arr(20,38,24,18,23,26,-,20,38.4,18,23,-,2009,01,09,15,13,24); 後々、この配列を用いてtextboxに値を格納したいので、 <input type="text" name="ta0"size ="2" value="<?php echo $arr[2]; ?>">s で、利用したいです。 document.write()で書く方法もあると思いますが valueに値として入れることができませんでした。 方法をご存知の方、よろしくご教授お願いいたします。

  • PHP

    PHPで <p>曜日</p> <p> <input type="checkbox" name="youbi[]" value="1" <?php if(strstr($result[4],'1')) echo"checked"; ?>>月 <input type="checkbox" name="youbi[]" value="2" <?php if(strstr($result[4], '2')) echo"checked"; ?>>火 <input type="checkbox" name="youbi[]" value="3" <?php if(strstr($result[4],'3')) echo"checked"; ?>>水 <input type="checkbox" name="youbi[]" value="4" <?php if(strstr($result[4],'4')) echo"checked"; ?>>木 <input type="checkbox" name="youbi[]" value="5" <?php if(strstr($result[4],'5')) echo"checked"; ?>>金 <input type="checkbox" name="youbi[]" value="6" <?php if(strstr($result[4],'6')) echo"checked"; ?>>土 <input type="checkbox" name="youbi[]" value="0" <?php if(strstr($result[4],'0')) echo"checked"; ?>>日 </p> <p>時間</p> <p> <input type="submit" value="設定" /> とやると日曜日を選択してsubmitするとチェックが外れます。なぜでしょうか?

    • ベストアンサー
    • PHP
  • PHP+MySQLでの配列のinsert文について

    PHP+MySQLでの配列のinsert文について はじめまして。 POSTされた配列データのDB一括挿入方法で約2週間悩み中で非常に困っております。 私の配列の理解が不足しているため、初心者の私でもわかるように解決方法をご教示いただけましたら大変助かります!何卒、よろしくお願い致します。 行いたい処理といたしまして、 [index.php] CSVアップロード(名前・メアド・金額・年月日の4項目)→※解決しました。  ↓↓↓ [check.php] CSVデータをテーブルで入力されている行数分をループして表示→※解決しました。  ↓↓↓ [finish.php] check.phpで表示した配列データをPOSTで受け取りDBに登録する。→※未解決 となります。 ソースは下記のようになります。 ※index.phpは今回無関係と思うので省略します。 ━━━━ [check.php]ここから ━━━━ ・ ・ ・ <form action="finish.php" method="post"> <? while($arr = fgetcsv_reg($fp,1024)){ ?> <? //空行以外を処理 $num = count($arr); if(!$arr ==''){ // $namae = $arr[0]; //名前 $mail = $arr[1]; //メアド $money = $arr[2]; //金額 $year = $arr[3]; //年 $month_hen = $arr[4]; //月 $month = sprintf("%02d", $month_hen); //1~9月(1桁)の場合、前に0を付加する $day_hen = $arr[5];//日 $day = sprintf("%02d", $day_hen); //1~9日(1桁)の場合、前に0を付加する // ?> <input type="hidden" name="namae[]" value="<?php echo $namae ?>"> <input type="hidden" name="mail[]" value="<?php echo $mail ?>"> <input type="hidden" name="money[]" value="<?php echo $money ?>"> <input type="hidden" name="year[]" value="<?php echo $year ?>"> <input type="hidden" name="month[]" value="<?php echo $month ?>"> <input type="hidden" name="day[]" value="<?php echo $day ?>"> ・ ・ ・ <input type="submit" value="  一括登録する  " /> </form> ━━━━ [check.php]ここまで ━━━━ ━━━━ [finish.php]ここから ━━━━ ・ ・ ・ // DB登録部分開始 if ($_POST['submit']) { $arr = array( 'reg_id', //auto_increment 'user_id', //ユーザーID(セッションで保持) 'namae', //名前 'mail', //メアド 'money',//金額 'ymd'//年月日 ); $value = array( NULL, mysql_real_escape_string( $_SESSION['user_id'] ), mysql_real_escape_string( $_POST['namae'] ), mysql_real_escape_string( $_POST['mail'] ), mysql_real_escape_string( $_POST['money'] ), mysql_real_escape_string( $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'] ) ); // DB登録部分終了 //ループ処理開始 foreach ( $arr as $value ) { $sql = "insert into receipt_issue ( $arr ) values ( $value )"; mysql_query($sql); $result = mysql_query( $sql ) ; //ループ処理終了 } } ・ ・ ・ ━━━━ [finish.php]ここまで ━━━━ というソースなのですが、データベースに登録できません。 例えば「finish.php」内に、 print_r( $_POST['namae'] ); と記述すると、 Array ( [0] => ああ君 [1] => いい君 [2] => うう君 [3] => ええ君 ) とちゃんと配列は受けとれているようです。 そもそもDB接続ができていないということもありません。 ※配列でない場合のテストでちゃんと接続・登録できていました。 いろいろ調べた中で、$value = array内の記述方法に問題があるのか・・・ と思い、色々調べて試したのですがダメでした。。。 上記の仕組みでループさせてデータベースに登録するには、どのように記述したらよろしいでしょうか? 情報に不足がございましたら、申し訳ございません。その点ご指摘いただきましたら必要な情報を再度投稿します。 何卒、お力をお貸しいただけましたら幸いでございます。 宜しくお願い致します!

    • 締切済み
    • PHP
  • 連想配列の処理

    こんにちは。 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
  • Nameは配列で、チェックされた箇所を特定したい。

    こんにちは。 下記のように、nameを配列に設定してるCheckBoxについて、 func()内で、チェックされたCheckBoxを特定するには どうすればよいでしょうか? チェック済みのCheckBoxではなく、 func()を起動させた、チェック、チェック解除箇所です。 チェックする度、解除する度、変るはずです。 <input type="checkbox" name="arr[]" onClick="func()"> <input type="checkbox" name="arr[]" onClick="func()"> <input type="checkbox" name="arr[]" onClick="func()"> <input type="checkbox" name="arr[]" onClick="func()">

  • 複数クエリ実行

    以前ここで質問させて頂き諦めていたのですが、やはりどうしても諦めきれず、 再度挑戦しようとしているスクリプトです。 PHP5.29 Apache2.33 MySQL5 -------------------------------------------------------------------------- ファイル名:test.php <form action="test2.php" method="post"> <? for($i=0;$i<3;$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="伊語" />伊語 <br /> <textarea name="group[<?php echo $i?>][context]" cols="30" rows="3" /></textarea> <br /> <? } ?> <input type="submit" value="登録" /> </form> -------------------------------------------------------------------------- ファイル名:test2.php <?php $dbuser="root"; $dbpass="root"; $db=new PDO("mysql:host=localhost;dbname=test",$dbuser,$dbpass); $group=$_POST['group']; for($i=0;$i<count($group);$i++) { $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $db->query('set names utf8'); $name=$group[$i]['name']; $check=implode(" ",$group[$i]['check']); $context=$group[$i]['context']; $arr=array($name,$check,$context); $stt=$db->prepare('insert into test(name,group,context) values(?,?,?)'); $stt->execute($arr); //print_r($arr); print "<br />"; } ?> <br /><br /><a href="test.php">戻る</a> <hr /> <?php print_r($_POST); ?> -------------------------------------------------------------------------- 上記スクリプトにて名前と言語及びテキストまでのパラメータを表示する所までは何とか行けたのですが、 いざ入力しようとするとエラーが返されます。エラーは'SQLSTATE[42000]:と言うものでSQL文に異常が 報告されています。「print_r($arr);」で配列が正確に格納されていることを確認しています。 どうも$stt->execute($arr)で何か問題があると思われるのですが、こちらの方わかる方いらっしゃいましたら 教えて頂けませんでしょうか? 宜しくお願い致します。

    • 締切済み
    • PHP
  • 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
  • PHPカレンダーについて

    今カレンダーを作成している段階です。 http://w1.nirai.ne.jp/freeze/main/file11.html ↑このサイトのプログラムを参考にしているんですが、 <html> <head> <title>カレンダー</title> </head> <body> <form action="<?php echo $_SERVER["PHP_SELF"]?>" method="POST"> <select name="year"> <?php $cnt = 1970; while($cnt<2038){   if($cnt==date(Y)){   echo "<option value='$cnt' selected>$cnt</option>";   } else {  echo "<option value='$cnt'>$cnt</option>";  } $cnt++; } ?> </select> <select name="month"> <?php $cnt=1; while($cnt<13){   if($cnt == date(n)){   echo "<option value='$cnt' selected>$cnt</option>";   } else {   echo "<option value='$cnt'>$cnt</option>";   } $cnt++; } ?> </select> <input type="submit" value="作成!"> </form> </body> </html> このPHPプログラムを実行してもエラーが消えません。 どこが間違っているのかどなたか教えてください。

    • 締切済み
    • PHP
  • PHPで配列をPOSTデータで送った場合の取り出し方を教えてください。

    PHPで配列をPOSTデータで送った場合の取り出し方を教えてください。 知恵袋でも質問したのですか、使い方をよくわかっておらず、補足が追加出来なくって、回答者の方に返事が出来なくなってしまいました。申し訳ありません。 プログラム初心者です。始めたばかりで、自分で考えて知っている範囲で組もうとしているのですが、 例えば <form method="POST" action="○○○"> <input type="checkbox" name="color[]" value="赤" />赤<br /> <input type="checkbox" name="color[]" value="青" />青<br /> <input type="checkbox" name="color[]" value="緑" />緑<br /> <input type="submit" value="送信" /> とこのように書いてすべてにチェックを付けて送った配列のデータはどのように取り出したら良いのでしょうか? foreachで下記のように、 $x = $_POST['color']; foreach( $x as $value ){ echo "色 = ". $value."<br />\n"; } exit; $_POST['color']の配列を取り出そうすると Invalid argument supplied for foreach() と表示されてしまいます。 var_dumpで配列を表示させると、 string(3) "Array" と表示され確かに配列として届いていると思います。 確かにチェックはいれて送信もしています。 print "{$_POST['color']}"で表示してみると、"A"と"r"と"r"でした。 チェックボックスを10個に増やして、それぞれ$_POST['color'][0]~[9]まで 表示させてみたところ、はじめの5個はArrayも文字がいつつ表示され、残りは空白でした。 知恵袋のほうで、取り出し方が間違っているとの指摘をいただきましたが、どのように取り出したら良いのでしょうか。 どなたかお手数ですが、教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpのチェックボックスによる絞込みについて

    PHPとSQLでチェックボックスを使って、複数条件によるデータを抽出するというものを作っています。 データベースの検索対象となるカラムが、以下の様にbakunen,seibetsu,clubとあります。 ―――――――――――――――――――― gakunen   seibetsu   club ―――――――――――――――――――― 1年   男 サッカー 1年   男  野球 2年   女  バスケット 2年   男  野球 3年   女  美術 3年   男  バスケット 3年   女  バスケット チェックボックス側は、 学年:1年□ 2年□ 3年□ 性別:男□ 女□ 部活:サッカー□ 野球□ バスケット□ 美術□ としています。 phpのソースは以下の通りにしています。(一部抜粋) <?php $arr1 = array(); foreach($_POST['gakunen'] as $gakunen){ $arr1[] = "gakunen = '$gakunen'"; } $arr2 = array(); foreach($_POST['seibetsu'] as $seibetsu){ $arr2[] = "seibetsu = '$seibetsu'"; } $arr3 = array(); foreach($_POST['club'] as $club){ $arr3[] = "club = '$club'"; } $a = implode("or" , $arr1); $b = implode("or" , $arr2); $c = implode("or" , $arr3); $query = "SELECT * from fa1 where ($a) and ($b) and ($c)"; $result = mysql_query($query, $link); if (!$result) { echo 'データエラー'; } else { echo '<p>該当した検索結果:<br />'; while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo h($row['gakunen']) . ' : ' . h($row['seibetsu']) . ' : ' . h($row['club']) . '<br />'; } echo '</p>'; } } ?> <form method="post" action=""> <input type="checkbox" name="gakunen[]" value="1年" />1年&nbsp; <input type="checkbox" name="gakunen[]" value="2年" />2年&nbsp; <input type="checkbox" name="gakunen[]" value="3年" />3年&nbsp;<br /> <input type="checkbox" name="seibetsu[]" value="男" />男&nbsp; <input type="checkbox" name="seibetsu[]" value="女" />女&nbsp;<br /> <input type="checkbox" name="club[]" value="サッカー" />サッカー&nbsp; <input type="checkbox" name="club[]" value="野球" />野球&nbsp; <input type="checkbox" name="club[]" value="バスケット" />バスケット&nbsp; <input type="checkbox" name="club[]" value="美術" />美術&nbsp; <input type="submit" value="送信する" /> </form> 私が得たい結果は、例えば学年で1年のチェックのみあった場合は性別、部活問わず1年生全てのデータ。 1年と3年とサッカーにチェックがあった場合には性別を問わず1年と3年のサッカーに所属しているデータ。 全てのチェックが無かった場合は全データ表示という具合にしたいのです。 現状は3つのカラム全てに該当するチェックをして、そのデータを表示させることしかできません。gakunen,seibetsu,clubのどれか一つでもチェックを空けるとデータが出てこない状態です。 それはソースを読んでも理解できるのですが、ここからどう変えていいかわからない状態です。色々過去の質問を見たり本で勉強したりはしたのですが、私の理解が足らず問題解決には至っていません。 どのようにすれば良いのか、何卒ご教授をお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう