0

我决定为这个主题打开一个新问题,因为我一直遇到问题。我的博客有一个 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

}

?>
4

1 回答 1

4

您不应该将用户名保存在帖子表中。您应该有两个单独的表:一个用于帖子,一个用于用户,它们通过user_id字段链接,也就是foreign key.

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

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

  2. 您使用唯一标识符。

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

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

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

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

于 2013-07-09T16:25:30.120 回答