【问题标题】:PHP Comment Code HelpPHP 注释代码帮助
【发布时间】:2009-11-25 20:15:00
【问题描述】:

我正在编写我的第一个博客。在各种教程和其他论坛的帮助下,我设法收集了一个半工作代码。

现在我有一个代码来获取并显示评论,但问题是协调哪些 cmets 去哪个帖子。我目前的设置是我的所有帖子都是 HTML 文件,并且 cmets 存储在数据库中。我还有一个表单,它为每个帖子创建一个具有唯一帖子 ID 和标题的新行。

我现在的基本数据库设置如下:1 个数据库,2 个表。一个 post 表和一个 cmets 表。在 cmets 表中,我有通用名称、网站、评论等,我还有一个唯一的 ID,它会为每个评论自动递增。然后我有一个 post_id 应该与指定的帖子匹配。

在 post 表上,我只有两个字段:entry_id 和 title。标题是我手动设置的,entry_id 是自动递增的。注意:条目本身不存储在数据库中。

所以我现在的问题是如何为cmets的每一页设置post_id,以及如何将entry_id与实际的post关联起来。我希望这不会太令人困惑。非常感谢您的帮助!

-iMaster

【问题讨论】:

  • 正如 Ian 所说,可能需要进行重构。请记住,如果您希望编辑标题,则使用 id 存储标题最终会出现非常大的问题。据我所知,它可能会破坏条目 ID 和标题之间以及您实际存储条目数据的位置之间的链中的链接。
  • @Tchalvak:你到底是什么意思?标题和内容都只存储一次,所以这里不应该有任何完整性问题...
  • 哦,我刚想到你可能是在谈论以标题作为文件名存储帖子?

标签: php mysql database comments blogs


【解决方案1】:

我认为您应该考虑重构代码以将帖子存储在数据库中。

从那里,您将有一个页面 (http://mysite/showpost.php?post_id=5) 显示您的帖子 (psuedo-code'ish):

<?php

// establish database connection here

// Simple SQL injection prevention:
foreach ($_REQUEST as $key => $value)
{
  $_REQUEST[$key] = mysql_real_escape_string($value);
}

// Get the appropriate post from the posts table.
$query = "SELECT post FROM posts WHERE post_id={$_REQUEST['post_id']}";
$result = mysql_query($query);
$row = mysql_fetch_assoc($query);

echo $row['posts'];

// Get the appropriate comments from the comments table.
$query = "SELECT comment FROM comments WHERE post_id={$_REQUEST['post_id']}";
$result = mysql_query($query);

while ($row = mysql_fetch_assoc($result))
{
  echo "Comment: {$row['comment']}";
}

// close connections, etc.    

?>

我的 PHP 非常生锈,但这应该能让您对完成所需的数据结构和代码有一个很好的了解。

【讨论】:

  • ahem 至少是一个警告,您显然应该注意 SQL 注入问题...
  • PS - 注意 SQL 注入问题。
  • 除了 SQL 注入之外,我已经编写 php 代码多年,但从未在字符串中看到用于插值的花括号。凉爽的!现在,当我想使用数组时,我不必连接字符串。爱所以每天都学点新东西! +1! (答案也很好)
  • 拜伦,可能想刷一下=P
  • @OP:检查这个问题,例如你应该注意的漏洞(不仅仅是 SQL 注入):stackoverflow.com/questions/1783137/…
【解决方案2】:

非常适合您学习“自己动手”并获得您想要的东西并在此过程中学到一些东西。

您应该使用与文章 ID 匹配的外键为 cmets 创建一个表。

然后在显示您的 cmets 时,执行查询以获取与该文章 ID 关联的所有 cmets。

【讨论】:

  • 我喜欢你的想法,因为这是我之前尝试过的。让我望而生畏的问题是,无论如何设置条目 ID(由 cmets 上的帖子 ID 引用的 ID)而不进行硬编码?我该怎么做?如果这是一个“愚蠢的问题”,请原谅我,但我是 PHP 新手(你可能知道)
【解决方案3】:

您应该遵循 Ian 的建议并重构您的代码以使用表格。否则,您将需要在创建帖子 html 时对一些 PHP 进行硬编码。

喜欢

$actualPostId = 1234; // you get this from the database
file_put_contents ($filename, "<?php \$postID= $actualPostId;?> $rest_of_html");

【讨论】:

    【解决方案4】:

    如果我没看错,我认为您只需将entry_id 作为隐藏字段添加到评论表单中,当有人发表评论时,在插入评论表时将其包含为post_id .我想那么你有表格之间的缺失链接。

    【讨论】:

    • 这是一种解决方案,也是一种有效的解决方案。理想情况下,虽然我希望为我自动设置,而不是每次都手动设置。
    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多