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

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

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

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

Q&A

1回答

274閲覧

データベースの更新がされないです。

fsdfsa

総合スコア11

PHP

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

0グッド

0クリップ

投稿2023/05/31 07:40

編集2023/05/31 08:11

実現したいこと

list.phpで更新ボタンを押すと、update_form.phpに遷移し、変更したい名前とメールアドレスを入力するとlist.phpに戻り、リスト一覧の名前とメールアドレスが更新されて表示されるようにしたいです。

前提

エラーは発生しませんが情報が更新されないです。

該当のソースコード

php

1//list.php 2 3<?php 4// PDO接続先の設定 5define("HOST", "localhost") 6define("DB_NAME", "task02"); 7define("USER", "root"); 8define("PASS", "root"); //MAMPの場合はパスワードのダブルクォーテーション内をrootに変更してください。 9 10// 文字化け対策 11 12$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET 'utf8'"); 13 14 15// DB(データベース)との接続開始 16$pdo = new PDO("mysql:host=".HOST.";dbname=".DB_NAME, USER, PASS, $options); 17$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 18$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 19 20$sql = "SELECT * FROM users ORDER BY id ASC;"; 21 22$stmt = $pdo->query($sql); 23 24$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 25?> 26 27<!DOCTYPE html> 28<html> 29 30 <head> 31 <meta charset="utf-8"> 32 <link rel="stylesheet" href="CSS/reset.css"> 33 <link rel="stylesheet" href="CSS/style.css"> 34 <link rel="stylesheet" href="CSS/responsive.css"> 35 <meta name="viewport" content="width=device-width,initial-scale=1"> 36 <!-- fontawesome --> 37 <link href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" rel="stylesheet"> 38 <!-- jQuery --> 39 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 40 <script src="js/base.js"></script> 41 42 <title>aaa/title> 43 </head> 44 45 <body> 46 47 <header> 48 <div class="icon"> 49 <a href="#"> 50 <img src="./img/DAWN_icon.png" alt="icon"> 51 </a> 52 </div> 53 <h1>リストの表示<br><span class="sub">-list-</span></h1> 54 55 </header> 56 <div id="content"> 57 58 <table style="border-collapse: separate"> 59 60 <tr> 61 62 <th class="id">ID</th> 63 64 <th class="name">NAME</th> 65 66 <th class="mail">MAIL</th> 67 68 <th class="up">EDIT</th> 69 70 <th class="dele">DELETE</th> 71 72 </tr> 73 74 <?php foreach ($result as $list) { ?> 75 76 <tr> 77 78 <td class="id"><?php echo htmlspecialchars($list["id"]); ?></td> 79 80 <td class="name"><?php echo htmlspecialchars($list["username"]); ?></td> 81 82 <td class="mail"><?php echo htmlspecialchars($list["mail"]); ?></td> 83 84 <td class="up"> 85 86 <a href="update_form.php?id=<?php echo $list["id"]; ?>"> 87 <i class="fas fa-file-alt"></i> 88 </a> 89 90 </td> 91 <td class="dele"> 92 <a href="delete.php?id=<?php echo htmlspecialchars($list["id"]); ?>"onclick="return confirm('このレコードを削除します。よろしいでしょうか?')"> 93 <i class="fas fa-trash-alt"></i> 94</a> 95</td> </tr> 96 97 <?php } ?> 98 <div class="create_btn"> 99 <button> 100 <a href="create_form.html"><i class="fas fa-plus-circle"> 新規登録はこちら</i></a> 101 </button> 102</div> 103 </table> 104 </div> 105 </body> 106</html> 107<form action="update.php" method="post" onsubmit="return check()" id="content"> 108 109 <h2> <span class=update_text>「ID:</span><span class="strong orange"><?php echo $id?></span><span class=update_text></span> <span> の登録情報を以下の内容に変更します。</h2> 110 111 <div class="form_input"> 112 113 <div class="username"> 114 115 <label>ユーザー名</label> 116 117 <input type="text" name="username"> 118 119 </div> 120 121 <div class="mail"> 122 123 <label>メールアドレス</label> 124 125 <input type="email" name="mail"> 126 127 </div> 128 129 <input type="hidden" name="id"> 130 131 </div> 132

php

1 2//update_form.php 3 4<?php 5 6// PDO接続先の設定 7 8define("HOST", "localhost"); 9 10define("DB_NAME", "task02"); 11 12define("USER", "root"); 13 14define("PASS", "root"); 15 16 17 18// 文字化け対策 19 20$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET 'utf8'"); 21 22// DB(データベース)との接続開始 23$pdo = new PDO("mysql:host=".HOST.";dbname=".DB_NAME, USER, PASS, $options); 24$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 25$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 26 27$id =$_GET["id"]; 28?> 29 30<!DOCTYPE html> 31 32<html> 33 34<head> 35 36 <meta charset="utf-8"> 37 38 <link rel="stylesheet" href="CSS/reset.css"> 39 40 <link rel="stylesheet" href="CSS/style.css"> 41 42 <link rel="stylesheet" href="CSS/responsive.css"> 43 44 <meta name="viewport" content="width=device-width,initial-scale=1"> 45 46 <title>aaa</title> 47 48</head> 49 50 51 52<body> 53 54 <header> 55 56 <div class="icon"> 57 58 <a href="list.php"> 59 60 <img src="./img/DAWN_icon.png" alt="icon"> 61 62 </a> 63 64 </div> 65 66 <h1>リストの更新<br><span class="sub">-update-</span></h1> 67 68 </header> 69 70 <div id="content"> 71 72 73 <form action="update.php" method="post" onsubmit="return check()" id="content"> 74 75 <h2> <span class=update_text>「ID:</span><span class="strong orange"><?php echo $id?></span><span class=update_text></span> <span> の登録情報を以下の内容に変更します。</h2> 76 77 <div class="form_input"> 78 79 <div class="username"> 80 81 <label>ユーザー名</label> 82 83 <input type="text" name="username"> 84 85 </div> 86 87 <div class="mail"> 88 89 <label>メールアドレス</label> 90 91 <input type="email" name="mail"> 92 93 </div> 94 95 96 </div> 97 98 <div class="form_btn"> 99 100 <div class="form_return_btn"> 101 102 <p class="return"><a href="list.php">リスト表に戻る</a></p> 103 104 </div> 105 106 <div class="form_create_btn"> 107 108 <input type="submit" value="新規登録"> 109 110 </div> 111 112 </div> 113 114 </form> 115 116 </div> 117 118 <script type="text/javascript"> 119 120 function check() { 121 122 if (window.confirm('登録をしてよろしいですか?')) { // 確認ダイアログを表示 123 124 // 「OK」時は送信を実行 125 126 return true; 127 128 } else { // 「キャンセル」時の処理 129 130 window.alert('登録がキャンセルされました'); // 警告ダイアログを表示 131 132 // 送信を中止 133 134 return false; 135 136 } 137 138 } 139 140 </script> 141 142</body

php

1///update.php 2 3<?php 4$name = $_POST["username"]; 5$mail = $_POST["mail"]; 6$id =$_POST["id"]; 7 8// PDO接続先の設定 9define("HOST", "localhost"); 10define("DB_NAME", "task02"); 11define("USER", "root"); 12define("PASS", "root"); 13 14// 文字化け対策 15$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET 'utf8'"); 16 17try { 18 19 $pdo = new PDO("mysql:host=" . HOST . ";dbname=" . DB_NAME, USER, PASS, $options); 20 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 21 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 22 23 $sql = "update users set username='$name', mail ='$mail' where id = '$id' "; 24 $stmt = $pdo->query($sql); 25 26 header("Location: list.php"); 27 exit; 28 29} catch (Exception $e) { 30 31 echo $e->getMessage(); 32 33} 34?> 35

試したこと

$sql = "update users set username='$name', mail ='$mail' where id = '$id' ";の見直し
idの受け渡しがうまく行っていないと思い、見直しましたが改善されないです。

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

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

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

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

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

y_waiwai

2023/05/31 07:48

なにをどういうふうにして更新しようとしたのか詳しく説明しよう。 また、それでなにがどうなって更新されない、と判断したのか説明しよう
fsdfsa

2023/05/31 08:12

コメントありがとうございます。大変失礼いたしました。 追記いたしました。
AbeTakashi

2023/05/31 09:02

SQLインジェクションというかなりやばめのセキュリティホールがあるのは別として(SQLインジェクションというワードでググってください)、$sqlの中身を実際に確認してみましたか? そのSQL文をMySQLのコンソールやphpMyAdminから叩いて検証してみたりしましたか? ここを見てる人はDBのテーブル定義もPOSTで渡ってきた値もどういうSQL文なのかも分からないので、これだけの情報だとアドバイスが出にくいと思います。まずはその辺を検証し、それでも原因が分からない場合はその検証結果も質問文に追記するようにしてください。
ak.n

2023/06/15 14:45

DB登録が空振りするときは、SQL文を間違えていることが多いです。 users というテーブルはありますか? また、users テーブルに、"username" "mail" "id" というカラムはそれぞれありますか?
guest

回答1

0

$sql = "update users set username='$name', mail ='$mail' where id = '$id' ";
だと、username='$name'という文字列で設定されないですかね?

"update users set username = '" . $name . "' , … " みたいに変数として
結合させないと想定しているものにならなないのでは・・・?と思いました。

投稿2023/07/07 01:42

tk08

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問