注释删除按钮不起作用

时间:2017-05-28 21:13:55

标签: php mysql pdo

我的评论有问题。我可以将它们插入我朋友制作的数据库中,并在正确的页面中回显它们,但删除部分不起作用。 拥有帐户的人可以删除自己的评论,管理员可以删除任何评论。但是,当我点击评论的删除按钮时,我没有做任何事情,当我再次点击它删除该页面中的每个评论时,有人可以帮忙吗?当我单击删除按钮时,我只想删除该特定注释,而不是全部删除。此外,数据库中的键是评论发布的日期。

这里的评论.php

<!DOCTYPE html>
<html>
<link rel="stylesheet" type="text/css" href="/cssfolder/comments.css">
<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Open+Sans%22%3E">
<head>
<title>Page Title</title>
</head>
<body>
<div class="comment">
<form method="post" action="">
<textarea name='message' class="area" id='message' placeholder="Leave a comment"></textarea><br/>
<br>
<input type="submit" class="commentbutton" name="comment" value="Comment">
<br>
</form>
</div>
<div class="commentcontainer">
<?php
    date_default_timezone_set('America/Curacao');
    $db = new PDO('mysql:host=localhost;dbname=id1552202_accounts', 'id1552202_thecouch', 'Fargo123');
    $url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
 $link = parse_url($url)['path'];
    $path = ltrim($link, '/');
    try {
            $zoekfilm = $db->prepare("SELECT film_id FROM Reviews WHERE path = :path");
            $zoekfilm->bindParam("path", $path);
            $zoekfilm->execute();
            $film = $zoekfilm->fetch();
            } catch(PDOException $b){
            die("Error!: " . $b->getMessage());
            } 
    $hoeveel = $db->prepare("SELECT * FROM comments WHERE film_id = :id ");
    $hoeveel->bindParam("id", $film[0]);
    $hoeveel->execute();
    $count = $hoeveel->rowCount();
    echo "<br><b>" . $count . " Comments</b><br><br>";
    if(isset($_POST['comment'])){
      if(empty($_POST['message'])){
            echo "There's no message";
          echo "<br>";
           echo "<br>";
        } else {
        if(isset($_SESSION['loggeduser'])){
        $message = $_POST['message'];
        $datum = date('YmdHis');
        $username = $_SESSION['loggeduser'][0];     
    $nospam = $db->prepare(" SELECT comment FROM comments WHERE comment = :message AND film_id = :id");
            $nospam->bindParam("message", $message);
            $nospam->bindParam("id", $film[0]);
            $nospam->execute();
            if($nospam->rowCount() === 1){
                echo "No spam please";
            } else {
            try{
            $addcomment = $db->prepare("INSERT INTO comments(Usernames, film_id, comment, date) VALUES (:username, :id , :comment, :datum )");
            $addcomment->bindParam("username", $username);
            $addcomment->bindParam("id", $film[0]);
            $addcomment->bindParam("comment", $message);
            $addcomment->bindParam("datum", $datum);
                $addcomment->execute();
            } catch(PDOException $c){
            die("Error!: " . $c->getMessage());
            }
            }
        } else {
        header("Location: /signin.php");
    }
    }
    }
    try {
    $showcomments = $db->prepare("SELECT * FROM comments WHERE film_id = :id ORDER BY date DESC");
        $showcomments->bindParam("id", $film[0]);
    $showcomments->execute();

        while($result = $showcomments->fetch(PDO::FETCH_ASSOC)){
            if(isset($_SESSION['admin'])){
            echo '<div class="commentdiv">';
   echo '<p><b>'.$result['Usernames'].'</b></p>';
    echo '<p class="tijd"><i><small>'. $result['date'] .'</small></i></p>';
   echo '<p> '.$result['comment'].'</p>';
                 echo '<br>';
            echo '<form method="post" action="">';
            echo '<input type="submit" value="Delete Comment" name="delete" class="commentbutton" style="width:200px;">';
             echo $result['date'];
            echo '<br>';
            echo '</form>';
                   $delete = $result['date'];
                            if(isset($_POST['delete'])){
                    $verwijderen = $db->prepare(" DELETE FROM comments WHERE comments.date = :datum LIMIT 1");
                    $verwijderen->bindParam("datum", $delete);
                                    $verwijderen->execute();
                                }
echo '</div>';
        } else if(isset($_SESSION['loggeduser'][0])) {
                        echo '<div class="commentdiv">';
   echo '<p><b>'.$result['Usernames'].'</b></p>';
    echo '<p class="tijd"><i><small>'. $result['date'] .'</small></i></p>';
   echo '<p> '.$result['comment'].'</p>';
        echo '<br>';
            echo '<form method="post" action="">';
            echo '<input type="submit" value="Delete Comment" name="delete" class="commentbutton" style="width:200px;">';

            echo '<br>';
            echo '</form>';
        echo '</div>';
                      $delete = $result['date'];
                                    if(isset($_POST['delete'])){
                    $verwijderen = $db->prepare(" DELETE FROM comments WHERE comments.date = :datum ");
                    $verwijderen->bindParam("datum", $delete);
                                    $verwijderen->execute();
                                }
        } else {
                        echo '<div class="commentdiv">';
   echo '<p><b>'.$result['Usernames'].'</b></p>';
    echo '<p class="tijd"><i><small>'. $result['date'] .'</small></i></p>';
   echo '<p> '.$result['comment'].'</p>';
echo '</div>';
        }
        }
} catch(PDOException $a){
            die("Error!: " . $a->getMessage());
    }
    ?>
    </div>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

该查询会删除该页面的所有评论,因为它在while循环中并且您没有提供唯一ID以确保从DB中删除正确的评论。因此,只要页面具有删除给定日期的所有注释的注释,就会重复查询。

解决方案可能是:

  • 如果还没有主要密钥,请在comments表格中添加主键
  • 将主键的值添加到删除按钮的value属性
  • 将删除查询放在 while循环
  • 之后
  • 使用从删除按钮获取的主键删除正确的注释
  • 修复代码缩进(最重要的)。

代码如下所示:

// ...
echo '<button type="submit" value="'.$result['id_comment'].'" name="delete" class="commentbutton" style="width:200px;">'.$result['date'].'</button>';
// Then outside of the loop : 
if (isset($_POST['delete']) && !empty['delete']) {
    $verwijderen = $db->prepare("DELETE FROM comments WHERE id_comment = :id_comment");
    $verwijderen->bindParam("id_comment", $_POST['delete']); // note that the $_POST['delete'] value is now the id of the comment. 
    $verwijderen->execute();
}

这必须给你这个想法。祝好运。 ; )