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

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

ただいまの
回答率

90.47%

  • PHP

    20856questions

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

  • MySQL

    6021questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 747

MasanariHori

score 13

前提・実現したいこと

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 

//DBへ接続
$pdo = new PDO('mysql:dbname=moneydatasample;host=localhost','root','');
//文字コードを指定
$stmtlist = $pdo->query('SET NAMES utf8');
//データ登録SQL作成
$stmtlist = $pdo->prepare("SELECT moneyandplace.id,placedata.placename, moneyandplace.usemoney, moneyandplace.nowdate, moneyandplace.flag FROM placedata INNER JOIN moneyandplace ON placedata.id = moneyandplace.place");

//SQL実行
$flaglist = $stmtlist->execute();

$view = '';

$link ='';

//エラー処理
if($flaglist == false){
  $view = "SQLエラー";
}else{
  while ($result = $stmtlist->fetch(PDO::FETCH_ASSOC)) {

    $link .= '<li><a href="editdata.php?id='.$result['id'].'">'.$result['placename'].'<span>|</span>'
            .$result['usemoney'].'<span>|</span>'.$result['nowdate'].'<span>|</span>'.$result['flag'].'</a></li><br>';
  }
}

?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>仕分けページ</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
    <script src="./js/sort.js"></script>
</head>
<body>

<ul>
    <?php echo $link; ?>
</ul>

</body>
</html>

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

<?php 

$id = $_GET['id'];
//DBへ接続
$pdo = new PDO('mysql:dbname=moneydatasample;host=localhost','root','');
//文字コードを指定
$stmtlist = $pdo->query('SET NAMES utf8');
//データ登録SQL作成
// $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");
$stmtlist = $pdo->prepare("SELECT * FROM moneyandplace WHERE id=$id");
// $stmtlist = $pdo->prepare("SELECT * FROM placedata WHERE id=$id");


//SQL実行
$flaglist = $stmtlist->execute();

$view = '';

$editdata ='';

//エラー処理
if($flaglist == false){
  $view = "SQLエラー";
}else{

    while($result = $stmtlist->fetch(PDO::FETCH_ASSOC)){
        $id = $result["id"];
        $placename = $result["place"];
        $usemoney = $result["usemoney"];
        $nowdate = $result["nowdate"];
        $flag = $result["flag"];
    // $view .= '<p><a href="detail.php?id='.$result['id'].'">'.$result['name'].'</a></p>';
    }
}

?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>仕分けページ</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
    <script src="./js/sort.js"></script>
</head>
<body>
    <form action="dataupdate.php" method="post">
        <label>id:<input type="text" name="id" value="<?=$id?>"></label><br>
        <label>地点名:<input type="text" name="placename" value="<?=$placename?>"></label><br>
        <label>使った金額:<input type="text" name="usemoney" value="<?=$usemoney?>"></label><br>
        <label>買い物時刻:<input type="text" name="nowdate" value="<?=$nowdate?>"></label><br>
        <label>無駄遣いフラグ:<input type="text" name="flag" value="<?=$flag?>"></label><br>
    </form>

</body>
</html>


②のソースコードで

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

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

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

// $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を指定しているのがそもそもの間違いなのかな…。と思いつつも解決策が分かりません。

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

宜しくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+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/26 01:20

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

    キャンセル

関連した質問

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

  • PHP

    20856questions

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

  • MySQL

    6021questions

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