我正在开发一个类似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被循环播放,评论会被评论到所有帖子。 我尝试过很多东西:
但是,没有任何东西可行。请帮我解决这个问题。
答案 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,你是否每个帖子都有一条评论?如果要为每个帖子添加多个注释,可能需要创建单独的注释表。