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

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

ただいまの
回答率

90.47%

  • PHP

    20856questions

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

  • MySQL

    6021questions

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

PHPでのデータの更新

解決済

回答 1

投稿 編集

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

MasanariHori

score 13

前提・実現したいこと

PHP初心者です。
基本的な話で申し訳ないのですが、PHPでのデータ更新がうまくいきません。

取り組んでいる内容としては下記のコードでPHPを書いて、データを表示したあとに、生成したリンク先(detail.php?id=id番号)に飛んで、その先にデータ編集ページを作るというものです。

detail.php?id=id番号のページでは

<input type="text" name="name" value="id番号のname要素(データベースのnameの要素)">
<input type="text" name="name" value="id番号のemail要素(データベースのemailの要素)">


としてinputタグの要素内にデータを挿入したいと思っています。

発生している問題・エラーメッセージ

リンクごとにid番号が違うので、id番号を取得し、それごとにinputタグ内に入れる要素を切り替えたいのですが、それがうまくいきません。

該当のソースコード

↓データを表示するソースコード

//select.php

<?php 
//DBへ接続
$pdo = new PDO('mysql:dbname=otoiawase;host=localhost','root','');
//文字コードを指定
$stmt = $pdo->query('SET NAMES utf8');
//データ登録SQL作成
$stmt = $pdo->prepare("SELECT * FROM address_table");

//SQL実行
$flag = $stmt->execute();

$view = '';

$view2 = '';

//エラー処理
if($flag == false){
    $view = "SQLエラー";
}else{
    while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $view .= '<a href="detail.php?id='.$result['id'].'">'.$result['name'].','.$result['email'].'</a><br>';
    }
}

?>

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .samples{
            color: red;
        }
        li{
            list-style-type: none;
            text-align: left;
        }
    </style>
</head>
<body>
    <?php echo $view;?>

</body>
</html>

↓inputタグに挿入するソースコード

//途中までしかわかりません

<?php 
//DBへ接続
$pdo = new PDO('mysql:dbname=otoiawase;host=localhost','root','');
//文字コードを指定
$stmt = $pdo->query('SET NAMES utf8');
//データ登録SQL作成
$stmt = $pdo->prepare("SELECT * FROM address_table");

//SQL実行
$flag = $stmt->execute();

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

    $result = $stmt->fetchAll();
    //$resultからidの配列を取り出す
    $id = array_column($result,'id');
    //$resultからnameの配列を取り出す
    $name = array_column($result,'name');
    //$resultからemailの配列を取り出す
    $email = array_column($result,'email');

}

?>

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Document</title>

    </style>
</head>
<body>

    <form action="dataupdate.php" method="post">
    <!-- $name[0] のときはdetail.php?id=1 のinputタグに入れたい-->
    <input type="text" name="name" value="<?php echo $name[0]; ?>">
    <!-- $email[0] のときはdetail.php?id=1 のinputタグに入れたい-->
    <input type="text" name="email" value="<?php echo $email[0]; ?>">
    <input type="submit" value="更新する">
    </form>
</body>
</html>

試したこと

上記コードのようにid番号を取得して無理矢理解決しようとしましたが無理でした。
select.phpの時点でinputタグにデータを入れておいて、SESSIONでデータを入れておくのは、あまり現実的ではないかなと思っています。

詳しい方いらっしゃいましたら教えていただければ幸いです。宜しくお願い致します。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • ItoTomonori

    2016/04/08 15:56

    すいません、後半のPHPでは、何をやりたいのか?正直よくわかりません。 inputタグを生成しているコードもありませんし、while()で回しているループの意味も、理解出来ません。 もう少し、ご自身での、内部動作の確認をされてかたご質問されたほうがよろしいかと。

    キャンセル

  • MasanariHori

    2016/04/08 16:10

    申し訳ございません!間違えたコードをコピペしてしまっておりました!書き直しをさせていただきます。

    キャンセル

回答 1

checkベストアンサー

0

下のコードがdetail.phpですよね?
それにしても、SELECT文にWHERE句が無く、全部読み込んでますけど、大丈夫ですか?

$stmt = $pdo->prepare("SELECT * FROM address_table");
↓
$stmt = $pdo->prepare("SELECT * FROM address_table WHERE id=:id");
$stmt->bindParam(':id', $_GET['id']);

みたいな感じですか?
そうすると、fetchAllじゃなくて、fetchでやることになると思いますよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/08 17:26

    ご回答いただきましてありがとうございます。
    ご指摘いただきました方法で$stmtにはid=x(番号)のデータが格納されていました。

    ここからinputタグにデータを入れるには
    $result = $stmt->fetch();
    $name = array_column($result,'name');
    $email = array_column($result,'email');

    とした上で
    $nameと$emailをvalueに入れるのかと思いましたが、そもそもvar_dump($name)とvar_dump($email)に値が入っていないという状況でした。。。

    これは
    $name = array_column($result,'name');
    $email = array_column($result,'email');
    としているのが間違っているのでしょうか?

    キャンセル

  • 2016/04/08 17:31 編集

    【追記】
    すみません、分かりにくいかと思いますので、下記にソースコードを全て記載をさせていただきます。

    ご確認いただければ幸いです。

    ###ソース
    ```PHP
    <?php
    //DBへ接続
    $pdo = new PDO('mysql:dbname=otoiawase;host=localhost','root','');
    //文字コードを指定
    $stmt = $pdo->query('SET NAMES utf8');
    //データ登録SQL作成
    $stmt = $pdo->prepare("SELECT * FROM address_table WHERE id=:id");
    $stmt->bindParam(':id', $_GET['id']);
    //SQL実行
    $flag = $stmt->execute();

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

    $result = $stmt->fetch();
    // //$resultからidの配列を取り出す
    // $id = array_column($result,'id');
    // //$resultからnameの配列を取り出す
    $name = array_column($result,'name');
    // //$resultからemailの配列を取り出す
    $email = array_column($result,'email');
    // var_dump($result);
    var_dump($name);
    var_dump($email);
    }

    ?>

    <!DOCTYPE html>
    <html lang="ja">
    <head>
    <meta charset="UTF-8">
    <title>Document</title>

    </style>
    </head>
    <body>
    <form action="dataupdate.php" method="post">
    <input type="text" name="name" value="<?php echo $name; ?>">
    <input type="text" name="email" value="<?php echo $email; ?>">
    <input type="submit" value="更新する">
    </form>

    </body>
    </html>
    ```

    エラーメッセージは
    <br /><b>Notice</b>: Array to string conversion in <b>/Applications/XAMPP/xamppfiles/htdocs/class/detail.php</b> on line <b>42</b><br />Array
    <br /><b>Notice</b>: Array to string conversion in <b>/Applications/XAMPP/xamppfiles/htdocs/class/detail.php</b> on line <b>44</b><br />Array
    と出ていました。

    キャンセル

  • 2016/04/08 17:38

    いやいや、$resullt['name']と$result['email']でいいでしょ。
    var_dump($result) とやってみると分かりやすいです。

    キャンセル

  • 2016/04/08 18:58

    あ、そうか。。ものすごい基本的なところでしたね!申し訳ございません!

    無事に動作いたしました。ご丁寧にありがとうございました〜。

    データの更新もUPDATE使ってコードを書いてみます^^

    キャンセル

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • PHP

    20856questions

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

  • MySQL

    6021questions

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