PHP MySQL将帖子链接到用户

时间:2013-07-09 16:10:28

标签: php mysql

我决定为这个话题开一个新问题,因为我一直有这个问题。我的博客有一个mysql数据库,表格posts包含一个post_user字段。每个用户都有一个表单,可以将帖子提交给公共博客。一旦他们提交了此表单,并附上标题和正文,当它在博客上发布时应该说by Username。我的想法是,我可以使用post_user信息在表单提交时将用户名保存到数据库中的$_SESSION,但我不确定如何执行此操作。任何帮助将不胜感激。

表单,以旧的UNSECURE方式进入会话作者,请注意我只在表单中包含会话数据以显示我想在博客文章中显示的内容,我不知道如何做到这一点其他方式因此我的问题:

<form action="" method="post">
<p>
    <input type="hidden" name="user" id="user" value="<?php echo $_SESSION['user']['username'] ?>" readonly />
</p>
<p>
    <input type="hidden" name="userid" id="userid" value="<?php echo $_SESSION['user']['id'] ?>" readonly />
</p>
<p>
    <label for="title">Title: </label>
    <input type="text" name="title" id="title" />
</p>
<p>
    <textarea name="body" rows="20" cols="60"></textarea>
</p>
<p>
    <input type="submit" value="Add Post" />
</p>
</form>

发布条目的代码:     

$posts = get_posts();
foreach($posts as $post)
{
    ?>

    <h2><a href ="blog_read.php?pid=<?php echo $post['id']; ?>"><?php echo $post['title']; ?></a></h2>
    <h4>By <font color="#FF6347"><?php echo $post['user']; ?></a></font> on <?php echo $post['date']; ?></h4> 
    <h4><?php echo $post['total_comments']; ?> comments, last comment <?php echo $post['last_comment']; ?>
    <hr />

    <p><?php echo $post['preview']; ?></p>
    <?php

}

?>

1 个答案:

答案 0 :(得分:4)

您不应该在posts表上保存用户名。您应该有两个单独的表:一个用于帖子,一个用于用户,这些表通过user_id字段a.k.a foreign key链接。

这是关系数据库(如MySQL)运行的方式。这有几个目的:

  1. 在一对多关系的情况下,您可以避免重复,这正是您的情况:一个用户可以发布多个帖子。

  2. 您使用唯一标识符。

  3. 更好地组织信息,而不是将数据混合在一起。

  4. 在检索数据时将表绑定在一起的方法是使用JOIN语句,该语句通过公共user_id字段链接两个表。强烈建议将此字段设为索引,这将显着加快数据检索速度。 (想想通过扫描每一页,找到一本书中的某个单词或句子,并使用,以及索引查找章节之间的区别)

    总而言之,您的id超全局数组中应该有一个$_SESSION键,然后在提交后将其插入user_id字段。

    至于您的问题,您不需要使用隐藏的输入字段发送会话数据,因为即使在提交后也可以使用 - 毕竟这是会话的全部内容。那么为什么要将它转换为$ _POST并公开公开呢?