###前提・実現したいこと
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を指定しているのがそもそもの間違いなのかな…。と思いつつも解決策が分かりません。
詳しい方いらっしゃいましたら教えていただけませんでしょうか。
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/25 16:20