電子書籍の厳選無料作品が豊富!

フォームから送信されたデータを配列として取得し、その配列の1つの要素に対してそれぞれmysqlにselectで問い合わせてageというカラムの値を取得したいと思っています。

配列の要素の数がその都度変わるので、要素が5つある場合には5回selectでデータベースに問い合わせてデータを5つ取得したいのですが、それは可能でしょうか?

ためしに下記のようにしてみたのですが、うまく取得できませんでした。


$hairetu = $_POST;

for($i=0; $i< count($hairetu) ; $i++){

$sql = "SELECT * FROM member where age = '$hairetu[i]';";
$res = mysql_query($sql, $conn) or die("エラー");
$row = mysql_fetch_array($res, MYSQL_ASSOC);
$age = $row["age"];

echo $age;

}

$ageの値をcount($hairetu)の回数分表示したいのですが、どのように処理していいのか分かりません。

また、根本的におかしな点もあると思いますがよろしくお願いします。

A 回答 (3件)

POSTデータをバリデートしないでSQL文に直接つなぐことはありえないので


エスケープ処理は別途きちんと行うものとして・・・

とりあえずフロー的には$iが単純に0からはじまる数字で回してますが
POSTで渡されるキーはかならずしも数字ではありません
なのでforeachで回すのが妥当です。(ここまでは#1さんと同様)

<?
$hairetu = $_POST;
foreach($hairetu as $val){
$sql = "SELECT * FROM member where age = '{$val}'";
echo $sql."<br>";
}
?>
<form method="post">
<input type="text" name="test1" value="value1">
<input type="text" name="test2" value="value2">
<input type="text" name="test3" value="value3">
<input type="submit" value="go">
</form>

しかし、なんどもSQLを投げるのは効率が良いとはいえません。
こんな感じの運用も視野に入れた方がいいかもしれません。

<?
$ages="'".implode($hairetu,"','")."'";
$sql = "SELECT * FROM member where age in ({$ages})";
echo $sql."<br>";
?>
<form method="post">
<input type="text" name="test1" value="value1">
<input type="text" name="test2" value="value2">
<input type="text" name="test3" value="value3">
<input type="submit" value="go">
</form>
    • good
    • 0
この回答へのお礼

どうもありがとうございました。
2パターンのやり方まで教えて頂きましてありがとうございます。
私にはもうちょっと勉強が必要のようです。

お陰さまで$ageの値をcount($hairetu)の回数分表示することができました。

あともう1点教えていただきたいのですが、$ageの値の合計を算出するにはどうしたらいいのでしょうか?

SELECT sum(age) as totalage FROM member where age = '{$val}'";
$res = mysql_query($sql, $conn) or die("エラー");
$row = mysql_fetch_array($res, MYSQL_ASSOC);
$totalage = $row["totalage"];
echo $totalage;

にしてみたましたがエラーになってしまいました。sum関数はwhere条件が複数の配列だと無理なのでしょうか。

お礼日時:2010/04/15 16:33

>SELECT sum(age) as totalage FROM member where age = '{$val}'



あっているような気もしますが・・・
ageがint型になっていないとか?

>エラーになってしまいました

具体的なエラーメッセージを提示してもらわないとなんとも言えません
    • good
    • 0
この回答へのお礼

再度見直したところ問題なく表示されました。
お騒がせ致しました。
どうもありがとうございました。

お礼日時:2010/04/16 01:53

まず、冒頭部分が間違っていると思います。


フォームの構造が分からないので、フォーム以外の値も $hairetu に代入されてしまいますが、とりあえず下記のようにしてください。

---------------------------
$i = 0;
foreach($_POST as $val) {
$hairetu[$i] = $val;
$i++;
}
    • good
    • 0
この回答へのお礼

どうもありがとうございました。
お陰さまで$ageの値をcount($hairetu)の回数分表示することができました。

あともう1点教えていただきたいのですが、$ageの値の合計を算出するにはどうしたらいいのでしょうか?

SELECT sum(age) as totalage FROM member where age = '{$val}'";
$res = mysql_query($sql, $conn) or die("エラー");
$row = mysql_fetch_array($res, MYSQL_ASSOC);
$totalage = $row["totalage"];
echo $totalage;

にしてみたましたがエラーになってしまいました。sum関数はwhere条件が複数の配列だと無理なのでしょうか。

お礼日時:2010/04/15 16:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す