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++:}でカウントしていますが、もっといい方法はありますか。
その他変な箇所があれば指摘して頂けると嬉しいです。
お願いします。
お礼
有難うございます。mysql_data_seekを使うとできましたが、件数を取得するのはこのやり方で正しいですか。 <?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 = 0; while($r = mysql_fetch_array($mmm)){ if($val === $r['d']){$count++;} } if($count>0){ $h = $h.$val.'<input type="checkbox" name="'.$key.'[]" value="'.$val.'"'.$checked.'/>('.$count.')<br />'."\n"; } mysql_data_seek($mmm,0); } print "<br />\n"; } function checkbox($c){ foreach($c as $key => $val){ echo htmlspecialchars($val, ENT_QUOTES, 'UTF-8')."<br />"; } } if(isset($_GET["chk1"])){checkbox($_GET["chk1"]);} if(isset($_GET["chk2"])){checkbox($_GET["chk2"]);} if(isset($_GET["chk3"])){checkbox($_GET["chk3"]);} ?> <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 if(isset($h)){echo $h;} ?> <input type="submit" value="送信" /> </form> </body> </html>