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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

解決済

MySQL+PHPでデータの取得方法について

kaya_miyoshi
kaya_miyoshi

総合スコア23

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

2回答

0評価

0クリップ

174閲覧

投稿2018/11/10 21:25

編集2018/11/10 23:44

下記コードで(MySQL8.0、PHP7、Windows 10、sampledb にはデータを格納済み)、

<?php header("Content-Type: text/html; charset=UTF-8"); //データベース接続 $server = "localhost"; $userName = "testuser"; $password = "testuser"; $dbName = "sampledb"; $mysqli = new mysqli($server, $userName, $password, $dbName); $result = $mysqli->query("create table if not exists sample (id integer primary key, name text, age integer)"); /**************/ /* データ取得 */ /**************/ if (isset($_GET["func"]) && $_GET["func"] == "get_data") { $stmt = $mysqli->query("select * from sample"); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); $json = json_encode($rows); echo $json; exit(); /*********************************/ /* データ更新(削除、変更、追加)*/ /*********************************/ } else if (isset($_POST["func"]) && $_POST["func"] == "upd_data") { // データ受取 $delid = $_POST["delid"]; $delid = json_decode($delid, true); $upddata = $_POST["upddata"]; $upddata = json_decode($upddata, true); $insdata = $_POST["insdata"]; $insdata = json_decode($insdata, true); // トランザクション開始 $db->beginTransaction(); // データ削除 if ($delid) { for ($i=0; $i<count($delid); $i++) { $sql = "DELETE FROM sample WHERE id=?"; $stmt = $db->prepare($sql); $stmt->execute(array($delid[$i]["id"])); } } // データ変更 if ($upddata) { for ($i=0; $i<count($upddata); $i++) { $sql = "UPDATE sample SET name=?, age=? WHERE id=?"; $stmt = $db->prepare($sql); $stmt->execute(array($upddata[$i]["name"], $upddata[$i]["age"], $upddata[$i]["id"])); } } // データ追加 if ($insdata) { for ($i=0; $i<count($insdata); $i++) { $sql = "INSERT INTO sample (name, age) VALUES (?, ?)"; $stmt = $db->prepare($sql); $stmt->execute(array($insdata[$i]["name"], $insdata[$i]["age"])); } } // トランザクション終了 $db->commit(); exit(); } $db = null; ?> <html> <center> <head> <script type="text/javascript"> var Ajax = new XMLHttpRequest(); // 削除対象IDを格納する配列 var delid = []; // 変更データを格納する配列 var upddata = []; // 新規登録データを格納する配列 var insdata = []; window.onload = getSample; /************/ /* 一覧表示 */ /************/ function getSample() { var rows, row, i, out; var url = "sample.php" + "?dummy=" + new Date().getTime() + "&func=" + "get_data"; Ajax.open("GET", url, true); Ajax.send(null); Ajax.onreadystatechange = function() { if (Ajax.readyState == 4 && Ajax.status == 200) { out = '<table border="1" id="sampletb">'; out += '<tr>'; out += '<th>削除</th>'; out += '<th>ID</th>'; out += '<th>氏名</th>'; out += '<th>年齢</th>'; out += '</tr>'; var res = Ajax.responseText; if (res) { rows = JSON.parse(res); for (i in rows) { out += '<tr>'; out += '<td><input type="checkbox" id="'+i+':0" onClick="delCheck(this);"></td>'; out += '<td><input type="text" id="'+i+':1" value='+rows[i]["id"]+' disabled></td>'; out += '<td><input type="text" id="'+i+':2" value="'+rows[i]["name"]+'" onChange="updCheck(this)";></td>'; out += '<td><input type="text" id="'+i+':3" value="'+rows[i]["age"]+'" onChange="updCheck(this)";></td>'; out += '</tr>'; } } out += '</table>'; out += '<p>'; out += '<button type="button" onClick="addRow();">'+"行追加"+'</button>'; out += '<button type="button" onClick="Upd();">'+"更新"+'</button>'; out += '</p>'; document.getElementById("result").innerHTML = out; } } } /**********/ /* 行追加 */ /**********/ function addRow() { var el = document.getElementById('sampletb'); var i = el.rows.length; var insertRow = el.insertRow(i); var insertCell0 = insertRow.insertCell(0); var insertCell1 = insertRow.insertCell(1); var insertCell2 = insertRow.insertCell(2); var insertCell3 = insertRow.insertCell(3); insertRow.style.backgroundColor = 'blue'; // 1:insid, 2:name, 3:age insertCell0.innerHTML = '<td><input type="checkbox"></td>'; insertCell1.innerHTML = '<input type="text" id="'+i+':1" value="'+i+'" style="width:20px;">'; insertCell2.innerHTML = '<input type="text" id="'+i+':2" value="" onChange="insCheck(this)";>'; insertCell3.innerHTML = '<input type="text" id="'+i+':3" value="" onChange="insCheck(this)";>'; } /************/ /* 新規登録 */ /************/ function insCheck(e) { var index = e.id.indexOf(":"); var row = e.id.substring(0, index); var insid = document.getElementById(row+':1').value; var name = document.getElementById(row+':2').value; var age = document.getElementById(row+':3').value; // 最初の登録処理 if (insdata.length == 0) { insdata.push({"insid":insid, "name":name, "age":age}); return; } // 2件目以降の登録処理 // 重複がある場合の登録処理 for (var i=0; i<insdata.length; i++) { if (insdata[i]["insid"] == insid) { // 配列から除外 insdata.splice(i, 1); // 配列に追加 insdata.push({"insid":insid, "name":name, "age":age}); return; } } // 重複がない場合の登録処理 insdata.push({"insid":insid, "name":name, "age":age}); } /********/ /* 変更 */ /********/ function updCheck(e) { e.parentNode.style.backgroundColor = 'yellow'; var row = e.id.substr(0, e.id.indexOf(":")); var tid = document.getElementById(row+':1').value; var name = document.getElementById(row+':2').value; var age = document.getElementById(row+':3').value; // 最初の変更処理 if (upddata.length == 0) { upddata.push({"id":tid, "name":name, "age":age}); return; } // 2件目以降の変更処理 // 重複がある場合の変更処理 for (var i=0; i<upddata.length; i++) { if (upddata[i]["id"] == tid) { // 配列から除外 upddata.splice(i, 1); // 配列に追加 upddata.push({"id":tid, "name":name, "age":age}); return; } } // 重複がない場合の変更処理 upddata.push({"id":tid, "name":name, "age":age}); } /********/ /* 削除 */ /********/ function delCheck(e) { var tid = document.getElementById(e.id.replace(':0',':1')).value; // チェック入れたとき if (e.checked == true) { e.parentNode.parentNode.style.backgroundColor = 'red'; delid.push({"id":tid}); // チェック外したとき } else if (e.checked == false) { e.parentNode.parentNode.style.backgroundColor = ''; for (var i=0; i<delid.length; i++) { if (delid[i]["id"] == tid) { delid.splice(i, 1); } } } } /************/ /* 更新処理 */ /************/ function Upd() { delid2 = JSON.stringify(delid); upddata2 = JSON.stringify(upddata); insdata2 = JSON.stringify(insdata); url = "sample.php"; Ajax.open("POST", url, true); Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); Ajax.send("func=" + "upd_data" + "&delid=" + delid2 + "&upddata=" + upddata2 + "&insdata=" + insdata2); Ajax.onreadystatechange = function() { if (Ajax.readyState == 4 && Ajax.status == 200) { getSample(); // 配列初期化 delid.length=0; upddata.length=0; insdata.length=0; } } } </script> </head> <body> <div id="result"></div> </body> </center> </html>

ー 問題点 ー

・(isset($_GET["func"]))、($_GET["func"] == "get_data") の両方とも FALSE を返す。

・fetchAll() を使うと Call to undefined method mysqli_result::fetchAll() のエラーになる。

データ取得をうまくするにはどうすればよいでしょうか?

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

m.ts10806

2018/11/10 23:32

このphpへはどういうurlでアクセスしているのでしょうか。または入力フォームなどからのアクセスであればそちらのhtmlもご提示ください
kaya_miyoshi

2018/11/10 23:47

ソースを追加しました。function getSample() で var url = "sample.php" + "?dummy=" + new Date().getTime() + "&func=" + "get_data"; としています。html も載せています。
m.ts10806

2018/11/11 00:07

同一ファイルなのでしょうか別ファイルなのでしょうか。別ファイルなのであればわけていただきたく。同じファイルに対してajaxというのはあまり考えられません。
退会済みユーザー

退会済みユーザー

2018/11/13 04:46

2つのファイル(phpファイルとhtmlファイル)に分けました。
m.ts10806

2018/11/13 05:10

複数アカウントですか?名前からどういう事情があるかわかりませんが、よくないですね。この質問をどう取り扱うんでしょうか。
退会済みユーザー

退会済みユーザー

2018/11/13 05:30

ログインし直したときに間違ってSNSアカウントで登録ボタンを押してしまったためです。この質問はこのまま続け、解決すれば新しいアカウントのみで質問するようになると思います。不正などの意図は全くないです。
kaya_miyoshi

2018/11/13 07:41 編集

2つのファイル(phpファイルとhtmlファイル)に分けました。ログインし直したときに間違ってSNSアカウントで登録ボタンを押してしまいました。この質問は前のアカウントが使えるようになったため続けられます。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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