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

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

ただいまの
回答率

87.34%

PHP DB掲示板削除機能について

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 288

score 0

前提・実現したいこと

パスワードを入力して一致した場合に指定した番号のデータを投稿フォームに表示し、その値を編集すること。

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

正しいパスワードを入力しても、投稿フォームに編集したい値が入力されず、編集ができない。

該当のソースコード

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

<?php
//接続省略
/*//table作成
    $sql = "CREATE TABLE IF NOT EXISTS keijiban"
    . "("
    . "id INT AUTO_INCREMENT PRIMARY KEY,"
    . "name CHAR(32),"
    . "comment VARCHAR(100),"
    . "date CHAR(100),"
    . "password INT(100)"
    . ")";
    $stmt = $pdo->query($sql);
    */
//変数に代入
    $date = date("Y/m/d/ H:i:s");
    $name = $_POST['name'];
    $comment = $_POST['comment'];
    $pass = $_POST['pass'];
//投稿機能
if(!empty($_POST['name']) && !empty($_POST['comment']) && !empty($_POST['pass'])){
    $sql = $pdo -> prepare("INSERT INTO keijiban (name, comment, date, password) VALUES (:name, :comment, :date, :password)");
    $sql -> bindParam(':name', $name, PDO::PARAM_STR);
    $sql -> bindParam(':comment', $comment, PDO::PARAM_STR);
    $sql -> bindParam(':date', $date, PDO::PARAM_STR);
    $sql -> bindParam(':password', $pass, PDO::PARAM_INT);
    $sql -> execute();
}

//削除機能
 //変数に代入
    $delete = $_POST['delete'];
    $dpass = $_POST['dpass'] ;
if(!empty($_POST['delete']) && !empty($_POST['dpass'] )) {  
    $sql = 'DELETE FROM keijiban WHERE id=:id';
    $stmt = $pdo->prepare($sql);
    $stmt->execute(array(':id' => $_POST['delete']));
    $results = $stmt->fetchAll();
    foreach ($results as $row) {
        if ($dpass == $row['password']){
            $stmt->bindParam(':id', $delete, PDO::PARAM_INT);
            $stmt->execute();
        }else{
            echo "パスワードが違います<br>";
        }
    }  
}

//編集機能
 //変数に代入
    $edit = $_POST['edit'];
    $date = date("Y/m/d/ H:i:s");
    $name = $_POST['name'];
    $comment = $_POST['comment'];
    $epass = $_POST['epass'];
if(!empty($_POST['edit']) && !empty($_POST['epass'] )) {
    $sql = 'UPDATE keijiban SET id=:id,name=:name,comment=:comment,date=:date,password=:password WHERE id=:id';
    $stmt = $pdo->prepare($sql);

    $results = $stmt->fetchAll();
    foreach($results as $row) {

      if($edit == $row['id'] && $epass == $row['password']) {
        $ename = $row['name'];
        $ecom = $row['comment'];
        $epass = $row['password'];  

        $stmt->bindParam(':name', $name, PDO::PARAM_STR);
        $stmt->bindParam(':comment', $comment, PDO::PARAM_STR);
        $stmt->bindParam(':date', $date, PDO::PARAM_STR);
        $stmt->bindParam(':password', $epass, PDO::PARAM_INT);
        $stmt->execute();

      }else{

      }
    }
    $sql = 'SELECT * FROM keijiban';
    $stmt = $pdo->query($sql);
    $stmt->execute();
  }

?>
<form action="" method="post">
  <input type="text" name="name" placeholder="名前" value="<?php if(isset($ename)){echo $ename;}?>"><br>
  <input type="text" name="comment"placeholder="コメント" value="<?php if(isset($ecom)){echo $ecom;} ?>"><br>
   <input type="text" name="pass" placeholder="パスワード"value="<?php if(isset($epass)){echo $epass;} ?>"><br>
   <input type="submit" name="submit" value='投稿'><br>

  <input type="number" name="delete" placeholder="削除対象番号"><br>
   <input type="text" name="dpass" placeholder="パスワード"><br>
   <input type="submit" name="submit" value="削除"><br>

   <input type="number" name="edit" placeholder="編集対象番号"><br>
   <input type="text" name="epass" placeholder="パスワード"><br>
   <input type="submit" name="submit" value="編集">
</form>

<?php
    $sql = 'SELECT * FROM keijiban';
    $stmt = $pdo->query($sql);
    $results = $stmt->fetchAll();
    foreach ($results as $row){
        echo $row['id'].' ';
        echo $row['name'].' ';
        echo $row['comment'].' ';
        echo $row['date'].' ';
        echo $row['password'].'<br>';
    }
?>

</body>
</html>


編集機能のどこが間違っているのか分かりません。ご教授よろしくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正の依頼

  • m.ts10806

    2021/07/13 06:27

    あと省略が多すぎます。
    いきなり使われている変数が多すぎて、そこの指摘しかできません。
    定義されてなければemptyはtrueですし。
    https://paiza.io/projects/k8iGeASmiCtw5rlMOrhnKg

    それにIF NOT EXISTSつけてるとはいえ、毎回CREATE投げるのは無駄な負荷です。

    キャンセル

  • kiyuu

    2021/07/13 21:29

    修正しましたが、編集機能がうまく行きません。

    キャンセル

  • tanat

    2021/07/13 21:52

    インターンシップの課題かと思いますが、ネット上の掲示板へのソースコード掲示や掲示板で質問することは許可されているのでしょうか?

    キャンセル

まだ回答がついていません

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

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

関連した質問

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