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

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

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

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

PHP

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

Q&A

解決済

1回答

3712閲覧

UPDATEで更新されない

hati3693

総合スコア24

MySQL

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

PHP

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

0グッド

0クリップ

投稿2018/08/04 07:18

編集2018/08/04 07:20

MySQLを使って管理画面を作る練習をしています。
INSERT,SELECT,DELETEと学習したのですがUPDATEだけうまくいってません。
複数のカラムを更新するサンプルが探せずコードがおかしいかもしれません。

前提・実現したいこと

一覧からボタンでデータの詳細画面を表示(省略)

受け取ったIDからデータを出してフォームから更新内容を送る

受け取った更新内容をデータベースに登録

##データベースnews
|ID|日付|タイトル|内容|
|:--|:--:|--:|
||||

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

エラー等は出ずに値も最後まで送られていますが更新だけできていません。

該当のソースコード

##update.php

<?php include('mysql_try.php'); //接続 ?> <?php $id = htmlspecialchars($_GET['id'], ENT_QUOTES, 'UTF-8'); echo $id; if(isset($_REQUEST['id']) && is_numeric($_REQUEST['id'])) { $id = $_REQUEST['id']; $upd = $dbh->prepare('SELECT * FROM news WHERE id=?'); $upd->execute(array($id)); $up = $upd->fetch(); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>UPDATE</title> </head> <body> <form name="update" action="updateend.php?id=<?php print($up['id']); ?>" method="post"> <div> <dl> <dt>日付</dt> <dd><input type="date" name="date" value="<?php echo $up['date']; ?>" required></dd> </dl> <dl> <dt>タイトル</dt> <dd><input type="text" name="title" value="<?php echo $up['title']; ?>" required></dd> </dl> <dl> <dt>内容</dt> <dd><textarea name="content" cols="30" rows="10" required><?php echo $up['content']; ?></textarea></dd> </dl> <input type="submit" value="送信"> <button type="button" onclick="history.back()">戻る</button> </div> </form> </body> </html>

##update_end.php

<?php include('mysql_try.php'); //接続 $stmt = $dbh->prepare('UPDATE news SET date=?, title=?, content=? WHERE id=?'); $stmt->execute(array($_POST['date'], $_POST['title'], $_POST['content'], $_POST['id'])); echo $_POST['date']; echo $_POST['title']; echo $_POST['content']; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>UPDATE_END</title> </head> <body> 変更しました。 <a href="ichiran.php"><<一覧に戻る</a> </body> </html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

チェックリスト。確認してみてください。

  1. stmt->executeはtrueかfalseを返します。trueが返ってきていますか?
  2. executeした直後にecho $stmt->rowCount();で作用した行数を取ってみてください。

0だったらWHERE句に指定したidがおかしいかも。

  1. ということで$_POST['id']もチェックしてみてください。値が入ってる?
  2. 入ってなかったらなんで入っていないか考えましょう。actionのurlに埋めてる?それって$_POSTで取れるの?

投稿2018/08/04 08:24

hope_mucci

総合スコア4447

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

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

hati3693

2018/08/06 03:02

ありがとうございます。 最後の画面のidがうまく渡せていませんでした。 SELECT * FROM テーブル名 WHERE id=? のように直接指定せず?を使う文がまだ理解できていないのでまずはそこからやり直します。 最初のページ→確認→最終画面 となった時の確認→最終へのID渡しでひっかかるのでそこも勉強しなおします。 参考になりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問