PHP代码注释帮助

4
我正在编写我的第一篇博客。通过各种教程和论坛的帮助,我已经成功地收集了一个半工作的代码。
目前,我有一个可以获取和显示评论的代码,但问题在于如何协调哪些评论适用于哪些文章。我当前的设置是所有文章都是HTML文件,而评论存储在数据库中。我还有一个表单,为每篇文章创建一个具有唯一帖子ID和标题的新行。
我的基本数据库设置如下:1个数据库,2个表。一个文章表和一个评论表。在评论表中,我有一般名称、网站、评论等,并且我还有一个自动递增的唯一ID,用于每个评论。然后我有一个post_id,应该与指定的文章相匹配。
在文章表上,我只有两个字段:entry_id和title。标题由我手动设置,entry_id是自动递增的。注意:文章本身不存储在数据库中。
因此,我目前的问题是如何为每个评论页面设置post_id,并将entry_id与实际文章关联起来。希望这不太令人困惑。非常感谢您的任何帮助!
-iMaster

正如Ian所说,可能需要进行重构。请记住,如果您希望编辑标题,将标题与ID一起存储将会变得非常棘手。据我所知,这可能会在条目ID和标题以及实际存储条目数据的任何位置之间破坏您的链接链。 - Kzqai
1
@Tchalvak:您到底是什么意思?标题和内容都只存储一次,因此这里不应该有任何完整性问题... - Franz
哦,我突然想到你可能是在说把帖子以标题作为文件名存储的问题? - Franz
4个回答

7

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

然后,你可以有一个页面(http://mysite/showpost.php?post_id=5),用于显示你的帖子(伪代码):

<?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很生疏,但这应该能给你一个很好的数据结构和代码实现你想要的功能的想法。


5
至少需要提醒你明显要注意SQL注入问题... - Franz
7
请注意防范SQL注入问题。 - Ian P
2
除了SQL注入之外,我已经编写PHP多年了,从未在字符串内看到花括号用于插值。太棒了!现在当我想要使用数组时,就不必连接字符串了。喜欢SO,每天都能学到新东西!+1!(回答也很好) - Byron Whitlock
@OP:请查看此问题,以获取您应该注意的漏洞示例(不仅限于SQL注入):https://dev59.com/2XI-5IYBdhLWcg3wlpUM - Carlos Lima
iMaster - 一步一个脚印。先让它正常工作,然后再研究带有mod_rewrite的MVC框架(如果您没有使用apache,则使用类似的框架)。这将使您能够使用漂亮的URL,例如http://mysite/posts/1。 - Ian P
显示剩余2条评论

1

很好,你学会了“自己动手”并且能够得到你想要的东西,同时还能学到一些知识。

你应该创建一个评论表,其中包含与文章ID匹配的外键。

然后,在显示评论时,查询所有与该文章ID相关联的评论。


我喜欢你在这里的想法,因为这是我以前尝试过的东西。困扰我的问题是,有没有办法设置条目ID(在评论中由帖子ID引用的那个)而不是硬编码它?我该怎么做呢?如果这是一个“愚蠢的问题”,请原谅我,因为我是PHP新手(正如你可能已经注意到的那样)。 - williamg

0
你应该遵循Ian的建议,重构你的代码以使用表格。否则,当你创建帖子HTML时,你将需要硬编码一些PHP。
就像这样:
$actualPostId = 1234; // you get this from the database
file_put_contents ($filename, "<?php \$postID= $actualPostId;?> $rest_of_html");

0

如果我理解问题正确的话,我认为您只需要将entry_id添加到评论表单中作为隐藏字段,当有人发布评论时,在插入评论表时将其包含为post_id。我认为这样您就可以在表之间建立缺失的链接了。


那是一个解决方案,也是有效的。不过理想情况下,我希望这可以自动设置,而不是每次都需要手动设置。 - williamg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接