我想为每篇文章添加评论,所以在我的“foreach”循环中我为每篇文章添加了评论,但“设置评论”功能适用于所有艺术

Posted

技术标签:

【中文标题】我想为每篇文章添加评论,所以在我的“foreach”循环中我为每篇文章添加了评论,但“设置评论”功能适用于所有艺术【英文标题】:i want to add commenting to each article, so inside my"foreach"cycle I added commenting to each article, but "set a comment" function runs to all art 【发布时间】:2021-08-04 23:57:07 【问题描述】:

这是制作文章窗口的代码

        <?php $articles_qr = mysqli_query($connection, "SELECT * FROM `articles` ");
    $articles = array();
    while ( $art = mysqli_fetch_assoc($articles_qr))
                    
                        $articles[] = $art;
                    

 ?>
            <?php foreach ($articles as $art)
                    
             ?>
    <section>
        <div class="containerstuff">

            <div class="stuffpic">
            <img src="<?php echo "../static/imagespages/",$art['image'] ?>"  class="pico">

            </div>
            <div class="article">
                <h1><?php
                        echo $art['title']
                    ?>
                </h1>
                <?php
                        echo $art['text'];
                        echo $art['id']
                    ?>

            </div>
            </div>

        <div class="scrollmenu">

            <?php include "../includes/comments.php";?>

    </section>
        <?php
         ?>

这就是代码 cmets 窗口

        <?php
date_default_timezone_set(timezone_identifier);
include_once '../comments.ink.php'

?>
<div class="containercom">

                <img src="#" class="commpic">
                <p class="comment"></p>
            </div>


            <div class="blockcom">



                <form class='form' method='POST' action="<?php echo setComments($connection)?>">

                    <div class='form__group'>

                        <input type='hidden' name='page_id' value="<?php echo $art['id']?>" >

                        <input type='hidden' name='uid' value='Anonymous'>
                        <input type='hidden' name='pubdate' value="<?php echo date('Y-m-d H:i:s')?>" >
                        <textarea name='text' class='form__control' placeholder ='Введите комментарий...' required=''></textarea>

                    </div>
                        <div class='form__group'>
                            <input type='submit' class='form__control2' name='commentSubmit'></input>
                        </div>
                    </div>
                </form>

这就是 INSERT 函数的代码

<?php

        static $firstTime = true;
function setComments($connection) 
    if(isset($_POST['commentSubmit']))
        $idcom = $_POST['page_id'];
        $uid = $_POST['uid'];
        $pubdate = $_POST['pubdate'];
        $text = $_POST['text'];

        $sql =
        "INSERT INTO `comments` (page_id, uid, pubdate, text)
        VALUES ('$idcom', '$uid', '$pubdate', '$text')";

        $result = $connection->query($sql);
        $firstTime = false;

    


那么我怎样才能只插入一篇文章(所以当我现在添加它时,出现的 cmets 与我在数据库中的文章数量一样多)

【问题讨论】:

警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough! 【参考方案1】:

我认为你应该使用 ajax 来附加一个新的评论,这是广泛使用的解决方案,你的做法会变得难以处理。

【讨论】:

【参考方案2】:

我还没有找到解决办法,所以我选择了另一种方式。

对于每篇文章,我放置了一个按钮来发布评论,该评论会将用户发送到包含这篇文章的页面,对于“href”的这个按钮,我编写了 php 代码 (href = "comments.php?id=&lt;?php echo $art['id']"?&gt;),对于这个页面,我使用 $_GET仅选择此 ID 的文章。然后我只是把我写的 cmets-function 放在那里,所以它现在可以正常工作了,因为函数只适用于 1 个参数

【讨论】:

以上是关于我想为每篇文章添加评论,所以在我的“foreach”循环中我为每篇文章添加了评论,但“设置评论”功能适用于所有艺术的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中添加对评论的回复?

在一个查询中为每篇文章选择文章 + 多条评论

Django 管理员定制

为每 2、5、8、11 等类元素添加边距

我想为我的应用程序添加在线功能。我该怎么做?

Datagrip 评论标题热键