質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

3566閲覧

phpでデータベースから条件に一致する値をすべて取得したい

sasamichan

総合スコア9

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/01/27 04:11

編集2020/01/27 04:21

現在セレクトボックスで選択した値にあったデータをデータベースから取得し
テキストボックスに反映できるようにしたく、ajaxを使って非同期で取得しようとしているのですが
条件に合ったデータ全て取得したいのに一行しか取得ができず困っております。

phpmyAdminで実行したところ、そこでは正しく抽出できるのですが
phpから取得しようとするとどうしても一行しかとってきてくれません…。
sqlを見直したりしましたがわからず、アドバイスやヒントなどいただけたら幸いです。

| id | no | name | purpose | price |
|m_saitou| 1 |てすと |  出勤 | 200 |
|m_saitou| 2 |てすと | 面談 | 300 |
| s_ueda | 1 | test |   出勤 | 250 |
| s_ueda | 2 | test | 現場 | 300 |
|m_saitou| 1 | テスト| 現場 | 400 |

php

1$db = new database(); 2 3if(isset($_POST["staff"]) && isset($_POST["select"])){ 4 $Id = urldecode($_POST["staff"]); 5 $name = urldecode($_POST["select"]); 6 7 $sql = "SELECT purpose,price FROM pattern WHERE id = '".$Id."' AND name = '".$name."' AND ORDER BY no ASC"; 8 $res = $db->query($sql); 9 $row = mysqli_fetch_array($res); 10 11 while($row = mysqli_fetch_array($res)){ 12 $pattern_data["purpose"] = $row["purpose"]; 13 $pattern_data["price"] = $row["price"]; 14 } 15 16 $jsondata = json_encode($pattern_data, JSON_UNESCAPED_UNICODE); 17 echo $jsondata; 18 }

javascript

1function patternInput(staffId){ 2 3var selectNm = document.getElementById("patternSelect").value; 4 5alert(staffId); 6$.ajax({ 7 type: 'POST', 8 url:'ajax.php', 9 data:{ "select":selectNm, 10 "staff":staffId } 11}).done(function(data) { 12 //通信が成功した時の処理 13 document.getElementById("dekita").value = data; 14}).fail(function(jqXHR,textStatus, errorThrown) { 15 //通信が失敗した時の処理 16 console.log("NG:" + textStatus.status);xhr.statusText 17 console.log("NG:" +errorThrown.statusText) 18 document.getElementById("dekita").value = jqXHR.status; 19}); 20}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

php

1 while($row = mysqli_fetch_array($res)){ 2 $pattern_data["purpose"] = $row["purpose"]; 3 $pattern_data["price"] = $row["price"]; 4 }

これ、何度whileループを繰り返しても、同じ場所に書き込まれるから、
最後の書き込みのデータしかjsonになっていないと思います。

php

1 while($row = mysqli_fetch_array($res)){ 2 $pattern_data[] = ['purpose'=>$row["purpose"],'price'=>$row["price"]]; 3 }

ならどうでしょう?

投稿2020/01/27 04:25

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sasamichan

2020/01/27 05:01

無事できました!ありがとうございます、助かりました…。 同じ場所に書き込まれてたんですね、まだまだ勉強頑張ります!
退会済みユーザー

退会済みユーザー

2020/01/27 05:07

まぁ、あと、SQLインジェクションの脆弱性の改善もヨロシクね
sasamichan

2020/01/27 05:12

はい、ありがとうございます!調べて改善します。
guest

0

【注意】 質問文のコードはSQLインジェクションの脆弱性が含まれています

SQL文を手打ちで作成するのではなく、
mysqli_prepareを咬ませるだけでかなり安全になるのでこの実装が完了したら盛り込みましょう。


さて本題です。

最初からSELECT purpose,priceという風に必要最小限のカラムを狙い撃ちにしているので
mysqli_fetch_allを使えば簡単でしょう。

php

1$db = new database(); 2 3if(isset($_POST["staff"]) && isset($_POST["select"])){ 4 $Id = urldecode($_POST["staff"]); 5 $name = urldecode($_POST["select"]); 6 7 // TODO: このSQLの記述はSQLインジェクションを含んでいるので後で修正する 8 $sql = "SELECT purpose,price FROM pattern WHERE id = '".$Id."' AND name = '".$name."' AND ORDER BY no ASC"; 9 $res = $db->query($sql); 10 $pattern_data = mysqli_fetch_all($res, MYSQLI_ASSOC); 11 $json = json_encode($pattern_data, JSON_UNESCAPED_UNICODE); 12 echo $json; 13}

未検証ですので動作を確認してみてください。
かなりシンプルになったと思います。

投稿2020/01/27 04:50

編集2020/01/27 04:56
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sasamichan

2020/01/27 05:03

回答ありがとうございます! SQLインジェクションは初めて聞きました…。 独学で進めていたため助かります! 一旦m6uさんのですすめていきますがmiyabi-sunさんのも試させていただきます、 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問