我有两个表-一个存储文章内容,另一个存储文章注释
我用来显示这些的功能是:

function list_articles() {
    include('core/db/db_connection.php');
    $sql = "SELECT blog.content_id, blog.title, blog.content, blog.posted_by, blog.date, article_comments.comments, article_comments.comment_by
            FROM blog LEFT OUTER JOIN article_comments
            ON blog.content_id = article_comments.blog_id
            WHERE blog.content != ''
            ORDER BY blog.content_id DESC";
    $result = mysqli_query($dbCon, $sql);

    $previous_blog_id = 0;

    while ($row = mysqli_fetch_array($result)) {
        if ($previous_blog_id != $row['content_id']) {
            echo "<h5 class='posted_by'>Posted by {$row['posted_by']} on {$row['date']}</h5>
                <h1 class='content_headers'>{$row['title']}</h1>
                <article>{$row['content']}</article>
                <hr class='artline'>";
            $previous_blog_id = $row['content_id'];
        }
        if (!empty($row['comment_by']) && !empty($row['comments'])) {
             echo "<div class='commented_by'>Posted by: {$row['comment_by']} </div>
                   <div class='comments'>Comments: {$row['comments']}</div>
                   <hr class='artline2'>";
        }
    }
}

我使用下面的命令在文章评论表中插入评论:
function insert_comments($comments, $comment_by, $blog_id) {
    include('core/db/db_connection.php');
    $comment_by = sanitize($comment_by);
    $comments = sanitize($comments);
    $sql = "INSERT INTO article_comments (comments, comment_by, blog_id)
            VALUES ('$comments', '$comment_by', '$blog_id')";
    mysqli_query($dbCon, $sql);
}

这是可行的-它可以插入,但是我不知道如何在用户提交帖子时将$blog_id变量作为目标…以下是我使用的表格
<?php echo list_articles();
    if (!empty($_POST)) {
        insert_comments($_POST['comments'], $_POST['username'], 11);
        }
?>
<form method='post' action='' class='comments_form'>
    <input type='text' name='username' placeholder='your name... *' id='name'>
    <textarea name='comments' id='textarea' placeholder='your comment... *' cols='30' rows='6'></textarea>
    <input type='submit' name='submit' id='post' value='post'>
</form>

我敢打赌你注意到我手动插入了11作为最后一个变量的参数。此链接指向我的文章评论表中的blog_id11(外键)。它显示的评论很好。
是否有任何方法可以在不需要手动插入数字的情况下锁定$blog\u id?类似于我如何使用$_POST['comments']将$comments变量作为目标?
另外,即使我可以瞄准这个目标,我如何知道用户评论的是哪个帖子?我应该让他们在下拉列表中选择吗?看起来很尴尬。但这是我唯一能想到的解决办法。
编辑:我试图在隐藏字段中锁定博客ID:
function list_articles() {
    include('core/db/db_connection.php');
    $sql = "SELECT blog.content_id, blog.title, blog.content, blog.posted_by, blog.date, article_comments.comments, article_comments.comment_by
            FROM blog LEFT OUTER JOIN article_comments
            ON blog.content_id = article_comments.blog_id
            WHERE blog.content != ''
            ORDER BY blog.content_id DESC";
    $result = mysqli_query($dbCon, $sql);

    $previous_blog_id = 0;

    while ($row = mysqli_fetch_array($result)) {
        if ($previous_blog_id != $row['content_id']) {
            echo "<h5 class='posted_by'>Posted by {$row['posted_by']} on {$row['date']}</h5>
                <h1 class='content_headers'>{$row['title']}</h1>
                <article>{$row['content']}</article>
                <hr class='artline'>";
            $previous_blog_id = $row['content_id'];
        }
        if (!empty($row['comment_by']) && !empty($row['comments'])) {
             echo "<div class='commented_by'>Posted by: {$row['comment_by']} </div>
                   <div class='comments'>Comment: {$row['comments']}</div>
                   <hr class='artline2'>";
        }
        $sql2 = "SELECT FROM article_comments VALUES blog_id";
        $result2 = mysqli_query($dbCon, $sql2);
        while ($row = mysqli_fetch_assoc($result2)) {
            echo "  <form method='post' action='' class='comments_form'>
                        <input type='text' name='username' placeholder='your name... *' id='name'>
                        <textarea name='comments' id='textarea' placeholder='your comment... *' cols='30' rows='6'></textarea>
                        <input type='hidden' name=blog_id' value='{$row['blog_id']}'>
                        <input type='submit' name='submit' id='post' value='post'>
                    </form>";
        }
    }
}

sql2和result2部分是导致错误的语句
编辑2:
我认为$sql2不是正确的方法。代码现在可以正常工作了,但我回到原点1。对于每个评论,插入的文章都是重复的。
<form method='post' action='' class='comments_form'>
    <input type='text' name='username' placeholder='your name... *' id='name'>
    <textarea name='comments' id='textarea' placeholder='your comment... *' cols='30' rows='6'></textarea>
    <input type='hidden' name=blog_id' value='{$row['blog_id']}'>
    <input type='submit' name='submit' id='post' value='post'>
</form>";

有没有办法在($row=mysqli_fetch_array($result)){}时不调用blog_id作为目标?或者至少,不要在第二个while循环中调用它?
我发布的第一段代码得到了以下结果:
Article title: LOREM IPSUM
Content: LOREM IPSUM DOLOR SIT AMET....
--------------------------------------
Name: DSK
Comment: Great article!
--------------------------------------
Name: DSK
Comment: Great article! - 2nd comment

-- BEGIN SECOND ARTICLE ON WEBPAGE

Article title: LOREM IPSUM 2nd article
Content: LOREM IPSUM DOLOR SIT AMET....
--------------------------------------
Name: User0
Comment: Great article!
--------------------------------------
Name: User1
Comment: Great article! - 2nd comment
--------------------------------------
Name: User2
Comment: Great article! - 3rd comment
--------------------------------------

这正是我要找的。但是,我只能通过phpmyadmin接口插入注释,手动选择外键(blog_id)。
我希望能够通过表格得到相同的结果:
Article title: LOREM IPSUM
Content: LOREM IPSUM DOLOR SIT AMET....
-------------------------------------- //comments
Name: DSK
Comment: Great article!
--------------------------------------
Name: DSK
Comment: Great article! - 2nd comment
-------------------------------------- // end comments

|-------------------------------------| // comments form
|Name: New User                       |
|Comment: New comment !               |
|                                     |
|-------------------------------------|
[Submit]

当用户提交表单时,他的姓名和评论将提交到数据库的article_comments表中。此外,外键(blog\u id)应该链接到现有文章(它确实链接到)。我只需要在我的工作中找到一个目标。
这有什么意义吗?…

最佳答案

也许您可以在表单中使用隐藏的表单元素:

<input type="hidden" name="blog_id" value="<?PHP echo $id;?>">

然后在提交时,您可以使用$_post[“blog_id”]
如果我正确地理解了你的问题,那就是。

关于php - 识别和连接表之间的ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32025777/

10-16 14:50