mysql_fetch_arrayを何度も使いたい
phpとmysqlを使っています。
配列$valuesがあります。
その値は一部だけmysqlのフィールドdの中に格納しています。
両方の値を比較してもし一致すればチェックボックスを作るという処理をしています。
また、同時に一致した数もそれぞれ取得したいと考えています。
イメージ的には、□はチェックボックスとして()には、その配列の値とフィールドdの値に一致する数が入ります。
□(33) □(13) □(1) □(22) □(3)
□(16) □(15) □(9) □(23) □(32)
□(4) □(16) □(7) □(6) □(11)
□(5) □(21) □(1) □(4) □(15)
□(13) □(10) □(3) □(19) □(8)
□(0)のとき非表示になるようにしています。
<?php
$m = mysql_connect('localhost','root',password);
$mm = "SELECT * FROM tableA";
mysql_set_charset('utf8');
$mmm = mysql_query($mm,$m);
$values=array(
"chk1"=>array("a1","a2","a3","a4","a5","a6","a7","a8","a9","a10")
,"chk2"=>array("b1","b2","b3","b4","b5","b6","b7","b8","b9","b10")
,"chk3"=>array("c1","c2","c3","c4","c5","c6","c7","c8","c9","c10")
);
foreach($values as $key=>$array){
foreach($array as $val){
$checked=(isset($_REQUEST[$key]) and in_array($val,$_REQUEST[$key]))?" checked":"";
$count = "";
while($r = mysql_fetch_array($mmm)){
if($val === $r['d']){$count++:}
}
if($count>0 && !$count==""){
$h = $h.htmlspecialchars($val, ENT_QUOTES, 'UTF-8').'<input type="checkbox" name="'.$key.'[]" value="'.$val.'"'.$checked.'/>('.$count.') '."\n";
}
}
}
print "<br />\n";
}
?>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<form method="get" action="checkbox2.php">
<?php echo $h; ?>
<input type="submit" value="送信" />
</form>
</body>
</html>
これではmysql_fetch_arrayが一度しか使えないので、配列の値a2以降が進みません。
こういうときはどのようにするべきでしょうか。
また、if($val === $r['d']){$count++:}でカウントしていますが、もっといい方法はありますか。
その他変な箇所があれば指摘して頂けると嬉しいです。
お願いします。
お礼
回答ありがとうございました。 >多分PHPでは表現不可能な配列かと array_combine以前の話ですね。 気がつきませんでしたー