みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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++:}でカウントしていますが、もっといい方法はありますか。
その他変な箇所があれば指摘して頂けると嬉しいです。
お願いします。

投稿日時 - 2012-07-08 02:36:56

QNo.7578092

困ってます

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

ひとつはデータをシークする

http://www.php.net/manual/ja/function.mysql-data-seek.php

もうひとつは一度配列にとっておく

投稿日時 - 2012-07-08 16:23:09

お礼

有難うございます。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>

投稿日時 - 2012-07-09 00:58:07

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問