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

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

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

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

Q&A

解決済

1回答

1772閲覧

PHP+MYSQLを用いた掲示板の投稿内容の編集を入力フォームから送られてきた編集番号を基に実行したいです

allfree

総合スコア3

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

0グッド

0クリップ

投稿2020/10/01 09:01

編集2020/10/01 09:04

前提・実現したいこと

PHPとMYSQLを用いて、掲示板の投稿内容の編集を行いたい
以下のやり方で編集機能を行いたいです

①入力フォームから編集番号を送信
②入力フォームから送られた編集番号がDB内にあるbang(カラム名)と一致した場合、入力フォームにその情報を表示
③入力フォームで内容を編集し、そのまま送信すると編集完了

というやり方で編集をしたいです。

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

エラーメッセージは表示されていませんが、②の登録されている情報が入力フォームに表示されません。そのため、③も実行できていません。
ただ、投稿内容の表示・新規投稿・削除は行えています。

下記はコードとphpmyadminのテーブルとカラム名です

### 該当のソースコード //request.php(ここでsureshow.phpに表示されている投稿の編集・削除を行う) <?php //DBの接続 require_once("date/db_info.php"); //DBの絞り込み $s=new PDO("mysql:host=$server;dbname=$DBNM",$user,$password); //編集番号選択 if(!empty($_POST["editNo"]) && !empty($_POST["editpass"])){ $id = $_POST["editNo"]; $editpass = $_POST["editpass"]; $sql = "SELECT FROM post2"; $stmt = $s->query($sql); $results = $stmt->fetchAll(); foreach ($results as $row){ //編集番号がDB内にあるならば、名前とメッセージを表示する if($row['bang'] == $id){ $editname = $row['nama']; $editcomment = $row['mess']; $pass = $row['pass']; $editnumber = $row['bang']; } } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset= "utf-8"> <title>削除・編集ページ</title> <link rel="stylesheet" href="style_css/style.css"> </head> <body> <div style="color:purple;font-size:35px"> 削除・編集ページへようこそ! </div> <br> print<<< eot1 <hr> <div style="font-size:18pt"> 削除・編集を行いたい方は下記の入力フォームを記入してください </div> <form method="POST" action="request.php"> 〇削除したい方はこちら<br> <input type="text" name="deleteNo" placeholder="削除対象番号"> <input id=pass type="pass" name="delpass" placeholder="パスワード"> <input type="submit" name="delete" value="削除" /><br><br> </form> <form method="POST" action="request.php"> 〇編集したい方は番号を入力してください<br> <input type = "text" name = "editNo" placeholder = "編集対象番号"> <input id="pass" type = "text" name = "editpass" placeholder = "パスワード"> <input type = "submit" name = "edit" value = "編集"><br><br> </form> <form method="POST" action="request.php"> 〇編集したい投稿番号・名前・コメント<br> <input type = "text" name = "name" value = "<?php if(!empty($pass)){echo $editname;}?>" placeholder = "<?php if(empty($pass)){echo "名前";}?>"> <input type = "text" name = "comment" value = "<?php if(!empty($pass)){echo $editcomment;}?>" placeholder = "<?php if(empty($pass)){echo "コメント";}?>"> <input type = "text" name = "password" value ="<?php if(!empty($pass)){echo $pass;}?>" placeholder = "<?php if(empty($pass)){echo "パスワード";}?>"> <input type = "hidden" name = "edit-number" value = "<?php if(!empty($pass)){echo $editnumber;}?>" > <input type = "submit" name = "btn"value = "送信"><br><br> </form> eot1; <h2>スレ一覧は<a href="main.php">こちら</a></h2> </body> </html> <?php //削除番号がセットされた時 if (isset($_POST['delete'])) { if (empty($_POST["delteNo"])) { //投稿番号が入力されていなかった場合 echo "削除したい投稿番号を入力してください"; } //削除番号を受け取り、テストテーブルから一致する番号を削除 $delnum =($_POST["deleteNo"]); $delete = $s->query("DELETE FROM `post2` WHERE `post2`.`bang` = $delnum"); } //編集実行機能 if(!empty($_POST["edit-number"]) and empty($_POST["edit"])){ $id = $_POST["edit-number"]; $name = $_POST["name"]; $comment = $_POST["comment"]; $date = date("Y/m/d H:i:s"); $sql = 'update post2 set nama=:$name,mess=:$comment,date=:$date where bang=:$id'; $stmt = $s->prepare($sql); $stmt->bindParam(':nama', $name, PDO::PARAM_STR); $stmt->bindParam(':mess', $comment, PDO::PARAM_STR); $stmt->bindParam(':date', $date, PDO::PARAM_STR); $stmt->bindParam(':bang', $id, PDO::PARAM_INT); $stmt->execute(); } ?> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー--------------------------------------------------------------------- //sureshow.php(DB内の投稿内容を表示する) <?php //DBの接続 require_once("date/db_info.php"); //DBの絞り込み $s=new PDO("mysql:host=$server;dbname=$DBNM",$user,$password); //スレ番号の取得 $gu_d=$_GET["gu"]; //$gu_dに番号以外が含まれていたら、処理しない if(preg_match("/[^0-9]/",$gu_d)){ print <<<eot1 不正な値が入力されています<br> <a href="main.php">スレ一覧に戻る</a> eot1; //処理を行う }elseif(preg_match("/[0-9]/",$gu_d)){ //名前とメッセージをそれぞれ取得する $na_d=isset($_GET["na"])?htmlspecialchars($_GET["na"]):null; //名前を取得 $me_d=isset($_GET["me"])?htmlspecialchars($_GET["me"]):null; //IPアドレスを取得する $ip=getenv("REMOTO_ADDR"); //postからスレ番号を取得し、guと一致する番号のスレを選択し、表示する $re=$s->query("SELECT sure FROM post WHERE num=$gu_d"); $kekka=$re->fetch(); //$sure_comでスレ内容を表す $sure_com="[".$gu_d."".$kekka[0]."]"; //スレタイトルの書き出し部分 print <<<eot2 <!DOCTYPE html> <html lang="ja"> <head> <meta charset= "utf-8"> <title> $sure_com スレッド</title> <link rel="stylesheet" href="style_css/style.css"> </head> <body> <div style="color:purple;font-size:35px"> $sure_com スレッド </div> <br> <div style="font-size:18pt">$sure_com のメッセージ</div> eot2; //名前が入力されていれば、post2にレコードを挿入 if($na_d<>""){ $s->query("INSERT INTO post2 VALUES (0,'$na_d','$me_d',now(),$gu_d,'$ip')"); } print "<hr>"; //日時順にレスを表示 $re=$s->query("SELECT * FROM post2 WHERE num=$gu_d ORDER BY date"); $i=1; while($kekka=$re->fetch()){ print "$i($kekka[0]):$kekka[1]:$kekka[3]<br>"; print nl2br($kekka[2]); print "<br><br>"; $i++; } print<<<eot3 <hr> <div style="font-size:18pt"> $sure_com にメッセージを書くときはここにどうぞ </div> <form method="GET" action="sureshow.php"> 〇名前 <input type="text" name="na"><br> 〇メッセージ<br> <textarea name="me" rows="10" cols="70"></textarea> <input type="hidden" name="gu" value="$gu_d"><br> <input type="submit" value="送信"><br><br> </form> <form method="POST" action="sureshow.php"> 〇編集したい方はこちら<br> <input type="text" name="editNo" placeholder="編集した投稿番号"> <input id="pass" name="editpass" placeholder="パスワード"> <input type="submit" name="edit" value="編集" /><br><br><br> </form> <h4>スレの削除・編集を行いたい方は<a href="request.php">こちらから</a></h4> <hr> <h3><a href="main.php">スレ一覧に戻ります</a></h3> </body> </html> eot3; //$gu_dに数字以外にも、数字も含まれていない時の処理 }else{ print "スレを選択してください。<br>"; print "<a href='main.php'>ここをクリックしてレス一覧へお戻りください</a>"; } ?> **ボールドテキスト** ```テーブル名とカラム名 **post2** # 名前 データ型 照合順序 1 bang 主 int(11) AUTO_INCREMENT 2 nama  varchar(30) utf8mb4_general_ci 3 mess  text     utf8mb4_general_ci 4 date  datetime 5 num  int(11) 6 IP   varchar(20) utf8mb4_general_ci 7 pass  char(10) utf8mb4_general_ci

試したこと

編集のコードを見直したり、ウェブで色々なサイトを参考にしたのですが、実行できませんでした。何がどこがいけないのか分からなくなってしまいました

補足情報(FW/ツールのバージョンなど)

XAMPP 7.4.10
phpmyadmin
を使用しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

SELECTでpost2から何を抽出したいか選択しないと何も取ってきてくれないと思います。
それと、取りたいデータが1つならforeachで回す必要ないかもです。
var_dumpとかを使ってどんな値が取れているか確認してみるのが良いですね。

投稿2020/10/01 09:22

cacao86

総合スコア97

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

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

allfree

2020/10/02 12:38

cacao86様 ご回答ありがとうございます。返信が遅れてしまい、すみません。 cacao86様のアドバイスの通り、SELECTで取り出したいデータのnama mess pass bang を取り出すように書き換え、その後にこのカラムを受け取る変数をvar_dumpを使って確認してみたところ、編集番号(仮に2番だとしたらその内容)の内容がしっかりと各々取れていました。 しかし、どうしても入力フォームにはその取得できたデータが表示されません。foreachは上記の様に4つのデータを取りたいので、そのまま記述しています。 差し支えなければ、もう少しお付き合いいただけないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問