【问题标题】:PHP MySQL Linking Posts to UsersPHP MySQL 将帖子链接到用户
【发布时间】:2013-07-09 16:10:28
【问题描述】:

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

表单,使用旧的 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

}

?>

【问题讨论】:

  • 你试过什么?发布您当前的架构和您拥有的任何代码。这个问题太模糊了,无法在这里获得任何真正的帮助。
  • 上面的问题是我不知道如何以不安全的形式显示帖子的会话作者。

标签: php mysql


【解决方案1】:

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

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

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

  2. 您使用唯一标识符。

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

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

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

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

【讨论】:

  • 该字段是否仍被隐藏,但包含插入的user_id 字段,而不是$_SESSION 值?
  • 换句话说,我仍然会发送用户帐户名称和表单的其余部分(标题、正文等)
  • 正如我在回答末尾所写的,您不需要表单来在页面之间传递会话数据。另外,如上所述,您不需要帐户名,只需要用户 ID。当用户注册时,其余数据将存储在 users 表中。
  • 仍然有一个问题,一旦提交,我就无法让用户名出现在博文中,但是我知道如何加入表。
  • 请将其作为一个单独的问题发布,并附上所有相关代码以及您可能收到的任何错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 2020-05-15
相关资源
最近更新 更多