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

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

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

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

PHP

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

Q&A

解決済

1回答

2475閲覧

2つのテーブルを結合し、inputタグの中にデータを入れたい

MH00214

総合スコア53

MySQL

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

PHP

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

0グッド

0クリップ

投稿2016/04/25 14:53

###前提・実現したいこと
PHPとMySQLを使って、ユーザーが登録した情報が編集できるような仕組みを作っています。
DB、テーブルの構成は下記になります。
DB名:moneyanddatasample
テーブル①moneyandplace
id,placename,lat,lng
テーブル②placedata
id,usemoney,place(テーブル①との結合のためのキー),nowdate,flag

流れとしては
①データを編集するためのページにいく手前の段階で、登録したデータ一覧を表示するページを作る(sort.phpというファイル)
②登録したデータ一覧の各々のリンクをクリックするとそのデータの編集ページにいくことができる(editdata.phpというファイル)
③inputタグの中にデータを吐き出し、内容を編集できるようにする
④更新するボタンを押してデータ更新
という流れにしたいと思っています。

###発生している問題・エラーメッセージ
発生している問題は以下の通りです。
①では、②の編集ページへ飛ばすためのリンクを表示することに成功しましたが、②の編集ページでinputタグにデータを入れる時に、テーブル①にあるplacenameをinputタグに入れることができません。

①のページのソースコードは↓になります

PHP

1<?php 2 3//DBへ接続 4$pdo = new PDO('mysql:dbname=moneydatasample;host=localhost','root',''); 5//文字コードを指定 6$stmtlist = $pdo->query('SET NAMES utf8'); 7//データ登録SQL作成 8$stmtlist = $pdo->prepare("SELECT moneyandplace.id,placedata.placename, moneyandplace.usemoney, moneyandplace.nowdate, moneyandplace.flag FROM placedata INNER JOIN moneyandplace ON placedata.id = moneyandplace.place"); 9 10//SQL実行 11$flaglist = $stmtlist->execute(); 12 13$view = ''; 14 15$link =''; 16 17//エラー処理 18if($flaglist == false){ 19 $view = "SQLエラー"; 20}else{ 21 while ($result = $stmtlist->fetch(PDO::FETCH_ASSOC)) { 22 23 $link .= '<li><a href="editdata.php?id='.$result['id'].'">'.$result['placename'].'<span>|</span>' 24 .$result['usemoney'].'<span>|</span>'.$result['nowdate'].'<span>|</span>'.$result['flag'].'</a></li><br>'; 25 } 26} 27 28?> 29<!DOCTYPE html> 30<html lang="ja"> 31<head> 32 <meta charset="UTF-8"> 33 <title>仕分けページ</title> 34 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> 35 <script src="./js/sort.js"></script> 36</head> 37<body> 38 39<ul> 40 <?php echo $link; ?> 41</ul> 42 43</body> 44</html>

②のページのソースコードは↓になります

PHP

1<?php 2 3$id = $_GET['id']; 4//DBへ接続 5$pdo = new PDO('mysql:dbname=moneydatasample;host=localhost','root',''); 6//文字コードを指定 7$stmtlist = $pdo->query('SET NAMES utf8'); 8//データ登録SQL作成 9// $stmtlist = $pdo->prepare("SELECT moneyandplace.id,placedata.placename, moneyandplace.usemoney, moneyandplace.nowdate, moneyandplace.flag FROM placedata INNER JOIN moneyandplace ON placedata.id = moneyandplace.place WHERE id=$id"); 10$stmtlist = $pdo->prepare("SELECT * FROM moneyandplace WHERE id=$id"); 11// $stmtlist = $pdo->prepare("SELECT * FROM placedata WHERE id=$id"); 12 13 14//SQL実行 15$flaglist = $stmtlist->execute(); 16 17$view = ''; 18 19$editdata =''; 20 21//エラー処理 22if($flaglist == false){ 23 $view = "SQLエラー"; 24}else{ 25 26 while($result = $stmtlist->fetch(PDO::FETCH_ASSOC)){ 27 $id = $result["id"]; 28 $placename = $result["place"]; 29 $usemoney = $result["usemoney"]; 30 $nowdate = $result["nowdate"]; 31 $flag = $result["flag"]; 32 // $view .= '<p><a href="detail.php?id='.$result['id'].'">'.$result['name'].'</a></p>'; 33 } 34} 35 36?> 37<!DOCTYPE html> 38<html lang="ja"> 39<head> 40 <meta charset="UTF-8"> 41 <title>仕分けページ</title> 42 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> 43 <script src="./js/sort.js"></script> 44</head> 45<body> 46 <form action="dataupdate.php" method="post"> 47 <label>id:<input type="text" name="id" value="<?=$id?>"></label><br> 48 <label>地点名:<input type="text" name="placename" value="<?=$placename?>"></label><br> 49 <label>使った金額:<input type="text" name="usemoney" value="<?=$usemoney?>"></label><br> 50 <label>買い物時刻:<input type="text" name="nowdate" value="<?=$nowdate?>"></label><br> 51 <label>無駄遣いフラグ:<input type="text" name="flag" value="<?=$flag?>"></label><br> 52 </form> 53 54</body> 55</html>

②のソースコードで

PHP

1<label>地点名:<input type="text" name="placename" value="<?=$placename?>"></label><br>

と書いてある部分と、その上にあるSELECT文が原因で、本来placenameをいれたいところにplaceの数字が入ってしまっているのはわかるのですが、こういう状況の場合、テーブルを結合して、placenameをinputタグに入れるような形になるのでしょうか?

②のコードの中にコメントアウトで

PHP

1// $stmtlist = $pdo->prepare("SELECT moneyandplace.id,placedata.placename, moneyandplace.usemoney, moneyandplace.nowdate, moneyandplace.flag FROM placedata INNER JOIN moneyandplace ON placedata.id = moneyandplace.place WHERE id=$id");

と書いたところがテーブルを結合してplacenameを取り出そうとしたところだったんですが、idのタグ以外、inputタグの中に

<br /><b>Notice</b>: Undefined variable: placename in <b>/Applications/XAMPP/xamppfiles/htdocs/editdata.php</b> on line <b>50</b><br /> <br /><b>Notice</b>: Undefined variable: usemoney in <b>/Applications/XAMPP/xamppfiles/htdocs/editdata.php</b> on line <b>50</b><br /> <br /><b>Notice</b>: Undefined variable: nowdate in <b>/Applications/XAMPP/xamppfiles/htdocs/editdata.php</b> on line <b>50</b><br /> <br /><b>Notice</b>: Undefined variable: flag in <b>/Applications/XAMPP/xamppfiles/htdocs/editdata.php</b> on line <b>50</b><br />

というエラーが返ってきてしまいました。

WEHRE句でidを指定しているのがそもそもの間違いなのかな…。と思いつつも解決策が分かりません。

詳しい方いらっしゃいましたら教えていただけませんでしょうか。

宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

PHP

1$stmtlist = $pdo->prepare("SELECT moneyandplace.id,placedata.placename, moneyandplace.usemoney, moneyandplace.nowdate, moneyandplace.flag FROM placedata INNER JOIN moneyandplace ON placedata.id = moneyandplace.place WHERE moneyandplace.id=$id");

moneyandplaceテーブル と placedataテーブルで同じカラム名(id)がありますよね。
それを上記のように WHERE 条件の記述に明示してあげるといいのでは?

投稿2016/04/25 16:11

takasima20

総合スコア7458

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

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

MH00214

2016/04/25 16:20

ありがとうございます! 実行してみましたところ、うまく動作しました! id=$idと、なにも考えずに資料をコピペしてしまっていました。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問