![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
フォームから送信されたデータを配列として取得し、その配列の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)の回数分表示したいのですが、どのように処理していいのか分かりません。
また、根本的におかしな点もあると思いますがよろしくお願いします。
No.2ベストアンサー
- 回答日時:
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>
どうもありがとうございました。
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条件が複数の配列だと無理なのでしょうか。
No.3
- 回答日時:
>SELECT sum(age) as totalage FROM member where age = '{$val}'
あっているような気もしますが・・・
ageがint型になっていないとか?
>エラーになってしまいました
具体的なエラーメッセージを提示してもらわないとなんとも言えません
No.1
- 回答日時:
まず、冒頭部分が間違っていると思います。
フォームの構造が分からないので、フォーム以外の値も $hairetu に代入されてしまいますが、とりあえず下記のようにしてください。
---------------------------
$i = 0;
foreach($_POST as $val) {
$hairetu[$i] = $val;
$i++;
}
どうもありがとうございました。
お陰さまで$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条件が複数の配列だと無理なのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Visual Basic(VBA) VBAで大量データの処理 3 2022/11/15 21:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
mysql データ更新
-
検索結果にリンクを生成
-
接続ができません
-
phpとmysqlを使っています。
-
LIMIT で条件を満たしているの...
-
バージョン3.23.53からアップグ...
-
phpMyAdminについて
-
PHP+MySQL 接続できません
-
Float型の時の計算結果がおかしい
-
ADOのバージョンを確認する方法
-
MYSQL
-
PHP+ApacheでMySQLに接続できな...
-
SQLのVARCHARとVARCHAR2の違い
-
MYSQLで日本語が入力できない
-
”MySQL”以前は実行できたのです...
-
ページング実装で2ページ目以...
-
phpMyAdimnとコマンドラインで...
-
MySQLとEclipseの接続方法について
-
ODP.NETのバージョン確認
-
MySQLでエラーがでて前に進めま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォームから送信した値とMySQL...
-
PHPにてSQLから取得したデータ...
-
mysql sqlエラー
-
mysqlで作ったテーブルをphpで...
-
pdfファイルの管理システム
-
MySQLからのデータをページに1...
-
PHPでMySQLを使った検索のプロ...
-
mysql データ更新
-
プレースホルダを使った複数カ...
-
検索機能
-
MySQLでの順位付けについて
-
データを一括で処理する方法に...
-
PHPでMySQLを使った検索のプロ...
-
PDOでDB ページング
-
配列の要素でmysqlに問い合わせ
-
mysql+php リストボックスにつ...
-
MySQLでデータ表示
-
mysqlの置換について2
-
PHP+MYSQLで検索画面を作成し...
-
PHP&MYSQLでの検索システムにつ...
おすすめ情報