前提・実現したいこと
データベースを使った掲示板を作っています
編集判断用フォーム$karaがからの場合通常投稿でid 名前 コメント 時間を表示
削除フォームに該当id パスワード入力で削除
編集フォームに該当id パスワード入力で投稿フォームおよび編集判断用フォーム$karaにidを表示、文字を入力しなおし投稿するとidが該当する1文の名前、コメント差し替え(編集)という動きをしたいです
発生している問題・エラーメッセージ
名前、コメントのみを表示、削除、編集するコードを書いたら成功したのですが、時間とパスワード機能を付けたら通常投稿もできなくなってしまいました
### 該当のソースコード <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>51</title> </head> <body> <?php //データベースへの接続 $dsn = 'mysql:dbname=******;host=localhost'; $user = '**-******'; $password = '*******'; $pdo = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); //テーブル作成 $sql = "CREATE TABLE IF NOT EXISTS AAA" ." (" . "id INT AUTO_INCREMENT PRIMARY KEY," . "name char(32)" . "comment TEXT" . "date DATE" . "password TEXT" .");"; $stmt = $pdo->query($sql); //データ挿入 $sql = $pdo -> prepare("INSERT INTO AAA (name, comment, date, pass) VALUES (:name, :comment :date, :pass,)"); $sql -> bindParam(':name', $name, PDO::PARAM_STR); $sql -> bindParam(':comment', $comment, PDO::PARAM_STR); $sql -> bindParam(':date', $comment, PDO::PARAM_STR); $sql -> bindParam(':password', $comment, PDO::PARAM_STR); //name comment passが埋まっていて、編集判断用の$karaが空いていたら if (!empty($_POST['name']) && (!empty($_POST['comment']))&& (!empty($_POST['pass']))&& (empty($_POST['kara']))){ $name = ($_POST["name"]); $comment = ($_POST["comment"]); $pass = ($_POST["pass"]); $date = date("Y/m/d H:i:s"); $sql -> execute(); } //削除機能 if((!empty($_POST['delete'])) && (!empty($_POST['dpass']))){//deleteフォームが埋まっていたら $id = ($_POST["delete"]); $dpass = ($_POST["dpass"]); $sql = 'SELECT * FROM AAA WHERE id=:id '; //idが一致する行を抜き出し $stmt = $pdo->prepare($sql); // ←差し替えるパラメータを含めて記述したSQLを準備し、 $stmt->bindParam(':id', $id, PDO::PARAM_INT); // ←その差し替えるパラメータの値を指定してから、 $stmt->execute(); // ←SQLを実行する。 $results = $stmt->fetchAll(); foreach ($results as $row){ if($row['id'] == $id && $row['pass'] ==$dpass ){ //idが一致する行のidとpassが削除フォームと一致したら $sql = 'delete from AAA where id=:id'; $stmt = $pdo->prepare($sql); $stmt->bindParam(':id', $id, PDO::PARAM_INT); $stmt->execute(); } } } //編集準備 if(!empty($_POST['edit'])&&(!empty($_POST['edipass']))){ //編集フォームが埋まっていたら $id = ($_POST["edit"]); $edipass = ($_POST["edipass"]); $sql = 'SELECT * FROM AAA WHERE id=:id'; //idが一致する行を抜き出し $stmt = $pdo->prepare($sql); // ←差し替えるパラメータを含めて記述したSQLを準備し、 $stmt->bindParam(':id', $id, PDO::PARAM_INT); // ←その差し替えるパラメータの値を指定してから、 $stmt->execute(); // ←SQLを実行する。 $results = $stmt->fetchAll(); foreach ($results as $row2){ //編集 if(!empty($_POST['kara'])){ //編集判断フォームが埋まっていたら $id = ($_POST["kara"]); if($row2['id'] == $id && $row2['pass'] ==$edipass){ //idが一致する行のidとpassが編集フォームと一致したら $name = ($_POST["name"]); $comment = ($_POST["comment"]); $sql = 'UPDATE AAA SET name=:name,comment=:comment WHERE id=:id'; $stmt = $pdo->prepare($sql); $stmt->bindParam(':name', $name, PDO::PARAM_STR); $stmt->bindParam(':comment', $comment, PDO::PARAM_STR); $stmt->bindParam(':id', $id, PDO::PARAM_INT); $stmt->execute(); } } } } //表示 $sql = 'SELECT * FROM AAA'; $stmt = $pdo->query($sql); $results = $stmt->fetchAll(); foreach ($results as $row3){ //$rowの中にはテーブルのカラム名が入る echo $row3['id'].','; echo $row3['name'].','; echo $row3['comment'].','; echo $row3['date'].','; echo "<hr>"; } ?> <!--変数をvalueに入れて投稿フォーム記述--> <form action="" method="post"> <input type="text" name="name" placeholder="名前" value="<?php echo $row2['name'];?>"></br> <input type="text" name="comment" placeholder="コメント" value="<?php echo $row2['comment'];?>"></br> <input type="text" name="pass" placeholder="パスワード"> <input type="submit" name="" value="投稿"></br> <!--編集判断材料text あとで隠す--> <input type="text" name="kara" value="<?php echo $row2['id'];?>"> </form></br> <!-- 削除フォームと編集フォーム--> <form action="" method="post"> <input type="text" name="delete" placeholder="削除対象番号"></br> <input type="text" name="dpass" placeholder="パスワード"> <input type="submit" name="" value="削除"></br> </form></br> <form action="" method="post"> <input type="text" name="edit" placeholder="編集対象番号"></br> <input type="text" name="epass" placeholder="パスワード"> <input type="submit" name="" value="編集"></br> </form></br> </body> </html>
試したこと
一度名前コメントのみを表示した場合はうまくいったので時間かパスワード機能が問題かと思いif文を中心に間違いを探したのですがうまくいかなくて困っています
このコードを見ておかしく感じた点をどんどん教えていただきたいです
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/09 12:35