无法对我的网络应用发表评论

时间:2018-01-30 05:14:17

标签: php

我正在开发一个类似CMS的小项目,用户发布的所有帖子都显示在我已命名为 news_feed.php 的页面上。页面 news_feed.php 如下所示:

<?php
require '../includes/header.php'; //It contains the header of the page.

function get($property){
  require '../includes/backbone.php'; //It contains the server information
  $connection = mysqli_connect($server_name, $database_username, $database_password, $database_name);
  $sql = "SELECT * FROM users WHERE id = '" . $_SESSION["id"] . "'";
  $result = mysqli_query($connection, $sql);
  while($row = mysqli_fetch_assoc($result)){
    $outcome = $row[$property];
  }
  return $outcome;
}




function showPosts($date, $author, $type, $body, $comments, $id) {
  ?>
  <div class="post">
    <div class="poster"><a href="user.php/<?php echo $author ?>"> <b id="author"><?php echo $author . " posted a new " . $type . ""; ?></a></b> <b id="date"> <?php echo $date ?> </b></div>
    <div class="body"><p><?php echo $body ?></p></div>
    <?php
    if($type === "query"){
        enableComment();
        if(isset($_POST["postComment"]) && !empty($_POST["comment"])){
        postComment(get("full_name"), date("h:ma"), $_POST["comment"], $id);
    }
    }
    ?>
    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
     <button id="showComments" name="showComments"><i class="fa fa-sort-desc"></i> Show comments</button>
      </form>
    <div class="comments">
      <?php
      if(isset($_POST["showComments"])){
        echo $comments;
      }
      ?>
    </div>
  </div>

<?php
function enableComment() {
  ?>
  <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
  <input name="comment" type="text" placeholder="Wanna Help?" id="comment">
  <button name="postComment" type="submit" id="commentButton"><i class="fa fa-paper-plane"></i></button>
    </form>
    <?php
}


function postComment($author, $time, $comment, $id){
  require '../includes/backbone.php'; //Server Info!!!
  $connection = mysqli_connect($server_name, $database_username, $database_password, $database_name);
  $sql = "UPDATE posts SET comments = \"'" . $author . "' -> '". $comment . "' @ '".$time . "'\" WHERE id = ". $id. "";
  mysqli_query($connection, $sql);
}

require '../includes/backbone.php'; //Server Info!
$connection = mysqli_connect($server_name, $database_username, $database_password, $database_name);
$sql = "SELECT * FROM posts";
$result = mysqli_query($connection, $sql);
while($row = mysqli_fetch_assoc($result)){
    showPosts($row["posted_date"], $row["author"], $row["type"], $row["body"], $row["comments"], $row["id"]); //Main function to run
}

?>

一切正常,所有帖子都会显示,如果帖子的类型是查询,则会显示评论框和评论按钮。唯一不起作用的是:每当我尝试评论帖子时,评论也会被评论到所有其他帖子。 id被循环播放,评论会被评论到所有帖子。 我尝试过很多东西:

  • 使用break语句,但它会破坏整个过程并且不会显示任何内容。
  • 使用exit();但它终止了整体 程序
  • 点击按钮然后发表评论后获取ID 评论。

但是,没有任何东西可行。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

您正在循环浏览所有评论,如果您的评论表单中有http帖子,则您要为每个帖子发布评论:

当前流程的伪代码:

loop through all posts:
    if post comment form submitted:
        post comment (user name, date, comment, post id).

(参见你的主循环(从帖子中选择*),每次迭代都会调用showPosts和postComment。)

要解决此问题,您可以将帖子ID添加到评论表单中(以获得正确的关联),并从您的show posts函数中删除评论处理 - 在其他地方处理。

您正在混合职能部门,这使得遵循代码变得困难。清楚地将评论发布和处理代码与显示代码的评论分开。

您还将原始未过滤值插入数据库。请使用准备好的陈述。

我无法理解您的评论与帖子的关系。你的postComment函数使用SQL UPDATE,而不是INSERT,你是否每个帖子都有一条评论?如果要为每个帖子添加多个注释,可能需要创建单独的注释表。