【问题标题】:Adding a comment system to my website [closed]向我的网站添加评论系统[关闭]
【发布时间】:2011-05-23 16:40:57
【问题描述】:

大家好,我正在尝试为我在主页上发布的新闻添加某种类型的评论系统到我的网站。我想做的是让任何人评论它(他们不需要登录)。评论提交表单只需要名称和评论。 最简单的方法是什么?让它在新闻帖子上显示当前有多少 cmets 也很好。我不需要任何花哨的东西。 谢谢!

【问题讨论】:

  • 无需登录 = 大量评论垃圾邮件。无论您采用哪种解决方案,我都建议您将验证码或类似的东西加入其中。
  • @eykanal 我有这样一个带有 cmets 的网站。根本没有登录,也没有垃圾邮件。事实上,登录本身并不提供任何垃圾邮件防御。如果您在向其他网站发送垃圾邮件时遇到问题,您可以在 stackoverflow 上提问并在几秒钟内获得解决方案
  • 所以,坐下来,用你喜欢的方式写下来。没什么大不了的
  • 大多数垃圾邮件发送者依赖于常见评论系统的脚本。如果您正在编写自己的文章,他们将需要一段时间才能找到您。然而,他们最终还是找到了我。当我发现这一点时,我稍微修改了我的系统,更改了评论提交的名称/方法,同时保持旧系统完好无损,但什么也没做。垃圾邮件发送者继续攻击旧系统一段时间,然后停止。这是几年前的事了。如果我遇到问题,我想今天我会使用 Akismet 或实施一些审核/登录系统,但我不会从一开始就担心。
  • 垃圾邮件最终会找到您的网站,当他们这样做时,将是一场血洗。

标签: php jquery html css comments


【解决方案1】:

如果你不想编写自己的评论系统,可以使用http://disqus.com/

【讨论】:

    【解决方案2】:

    有很多方法可以做到这一点......我试着给你一个简单的想法(不使用模式或复杂的方法):

    1) 创建一个包含 cmets 的数据库表,我建议这些字段:

    id (integer)
    news_id (fk to id of the news) 
    date (i.e. Timestamp)
    name (varchar(30... or less))
    message (text)  
    

    2) 在您的前端页面中添加一个由 4 个字段组成的表单: 新闻ID:不言自明 名称:输入文本字段 消息:文本区域 验证码:(为了避免机器人完成)我建议你recaptcha

    <form action="add_comment.php" method="POST">
      <label for="name">Your Name:</label>
      <input type="text" id="name" name="name" />
    
      <label for="name">Your Comment:</label>
      <textarea id="comment" name="comment"></textarea>
    
      <input type="hidden" name="news_id" value="<?php echo $news_id?>"/>
      <input type="submit" value="Ok" name="save"/>
    </form>
    

    这个表单在 POST 中将数据发送到需要执行这些步骤的 add_comment.php:

    2.A)检查$_POST数据是否存在

    if(isset($_POST["save"])) 
    

    最好检查数据的来源(确保来自您的网站)。

    2.B) 如果 $_POST 数据存在,检查必填字段并将错误存储在某个结构中:

    if( (trim($_POST["name"]) == "") and (strlen($_POST["name"]) < 5) ){
      $name_error = true;
    }
    

    2.C) 如果没有错误,将数据保存到数据库中: - 打开数据库连接 - 组装查询。不要忘记将每个变量括在引号中并通过 mysql_real_escape_string 运行它(或使用准备好的语句) - 运行此查询
    - 重定向到当前页面

    2.D) 如果有错误,请使用 get &error=1 中的变量重定向到主页。 在您的主页中检查此变量是否设置为定义是否需要打印一些错误消息。 (最好留在同一页面并显示错误以及填写输入的数据(avoid xss scripting))

    3) 管理您的主页添加脚本以从数据库中选择评论,这里有一些步骤:

    3.A) 对于您打印的每条新闻,获取 id(或用于在 db 中存储新闻的唯一键)。

    3.B) 像这样执行一个简单的选择查询来获取该新闻的所有评论:

    $query = "SELECT name,message from comments where id_news = '{$_newsid}' order by date DESC";
    

    3C) 对于您通过此查询获得的每条评论,您可以通过以下方式打印数据:

    <?php foreach($query_fetched_results as $comment):?>
    <p class='name'><?php echo $comment['name'];?></p>
    <p class='comment_body'><?php echo $comment['message'];?></p>
    <?php endforeach;?>
    

    4) 检查评论数量非常简单,在点 3B 对从查询中获得的数据进行计数。

    【讨论】:

    • 谢谢上校弹片!第2点表格中的隐藏字段是不可缺少的!也感谢您添加的任何其他信息!
    【解决方案3】:

    这很简单php guest book tutorial。我知道它不完全是你要求的,但它非常相似。自定义它以满足您的需要。 PS:我真的会考虑 eykanal 写的内容。 您需要为文章 ID、页面 ID 等添加一列...

    跟进:

    正如每个人都提到的那样,这个示例/教程并不是最安全/设计正确的作品,它只是为了向您展示复杂程度并让您了解您正在从事的工作。读完之后,我还会读一些关于 php/mysql 注入漏洞和简单的数据库设计原则的内容

    【讨论】:

    • 写这个“教程”的那个智障家伙是谁?
    • 谢谢,我很惊讶人们在这个网站上回复你的速度如此之快。我一定会试试这个方法!
    • @MJ93:在你的实现中一定要小心 SQL 注入攻击。
    • @Col。 Shrapnel:我知道,它有很多缺陷并且违反了大多数数据库设计规则,但是在某个时候处于 MJ93 的位置,它帮助我开始了。
    【解决方案4】:

    除了处理垃圾邮件之外,这相当简单。这是第一次进行的很好的学习练习。

    要保存 cmets...

    在您的 HTML 中,您可以使用评论字段创建一个表单。使用 POST 提交表单。

    在您的 PHP 中,从 $_POST 中读取字段并检查它们的有效性 - 名称长度为 x 个字符,而不是空白等。通过 mysql_real_escape_string() 从用户处运行您的数据并将其放在一个 INSERT 查询字符串中.运行查询。这里有一个关键的想法——不要相信用户的输入——用你能想到的每一种方式检查它。 Stack Overflow 上有很多关于这个主题的帮助。

    要显示 cmets...

    运行 SELECT 查询以查找与您的帖子对应的 ID。将名称和 cmets 输出到字符串(使用 strip_tags() 从 cmets 中删除不需要的 HTML),根据需要引入您自己的布局 HTML。当您将每个评论输出到您的字符串时,您可以轻松地计算 cmets。然后将格式化后的 cmets 输出到页面中。

    在此过程中需要考虑很多选项 - 您要允许某些 HTML 吗?您如何处理不可避免的垃圾邮件?您是否正在线程化 cmets,允许头像、重力、电子邮件地址、海报的 URL 等?您是通过某些系统发布帖子还是只是建立页面?

    编辑:更正了我对 mysql_real_escape_string() 的建议。感谢 Shrapnel 上校指出我的错误。

    【讨论】:

    • 通过 mysql_real_escape_string 运行整个查询?
    • 哦,那是愚蠢的。我会解决的。
    • 其实mysql_real_escape_string与用户输入无关。这是数据库的东西。即使根本没有用户输入,也应该这样做。它就像某种格式,一种语法规则。 SQL 语法。而 mysql_real_escape_string 对你毫无帮助。 它只在引号内起作用。
    【解决方案5】:

    你可以使用IntenseDebate

    特点:

    评论线程

    改善内部对话 评论区直接回复 个人评论。缩进 回复如下各种 对话易于管理。

    通过电子邮件回复

    回应和调节 cmets 通过电子邮件轻松,即使您在 走。只是因为你远离你的 电脑不代表对话 停止。

    电子邮件通知

    评论者收到电子邮件警报时, 发布对他们评论的回应, 将它们直接链接到响应。 添加通过电子邮件回复,以及 订阅所有 cmets 的选项 让辩论随之而来!

    激烈的辩论特色

    电子邮件通知

    评论者收到电子邮件警报时, 发布对他们评论的回应, 将它们直接链接到响应。 添加通过电子邮件回复,以及 订阅所有 cmets 的选项 让辩论随之而来!

    评论者个人资料

    评论者个人资料让您和您的 读者彼此了解更多。 观看对话转到新的 一旦你和你的读者达到 能够互相认识。别 忘了,他们的通用配置文件可以 可在任何网站上使用 激烈辩论!

    审核/黑名单

    IntenseDebate 提供了一些真正的 铁杆审核选项。定制 您的设置以按关键字进行审核, 链接数量,评论者电子邮件, 和/或 IP 地址。

    声誉积分和评论投票

    您的读者将开始构建他们的 评论者创建时的声誉 一个 IntenseDebate 帐户。他们的 信誉评分基于 数量,更重要的是 质量,他们制造的 cmets 使用 IntenseDebate 在所有网站上进行。 将优质的cmets带到 最前沿。

    插件 API

    我们已经开放了我们的代码 开发者介绍自己的 创作进入辩论。这些 增强功能包括 Seesmic 视频 cmets, PollDaddy 民意调查, YouTube 视频、笑脸等。感兴趣的 在建立自己的定制? 查看我们的插件 API。

    OpenID

    您的读者可以轻松发布 cmets 使用他们的 OpenID。他们可以把他们的 OpenID 到他们的 IntenseDebate 个人资料 所以他们不必担心 记住另一组登录 凭据。

    小部件

    我们已经构建了一些基于 根据您的反馈。您可以显示您的 博客的评论统计,最新 cmets 在您的博客上制作,您最 热门帖子,最新 你制作的cmets,甚至是谁制作的 最激烈的辩论者是。

    推特

    让您的评论者可以选择 当他们同时发送一条推文 发表评论。这是一个很好的方式 让您的评论者传播信息 关于您的网站并吸引新流量 和 cmets!

    Facebook 连接

    展开辩论,让任何人 一个 Facebook 帐户在上发布 cmets 您的网站与我们的 Facebook Connect 整合!

    RSS 阅读器和跟踪

    RSS 阅读器让生活变得简单。那是 为什么我们集成了 IntenseDebate cmets 与谷歌阅读器和 Bloglines(有更多的 RSS 阅读器 方式)以便您可以阅读和发布 cmets 直接来自您的 RSS 阅读器。

    【讨论】:

      【解决方案6】:

      不推荐将 cmets 存储在文本文件中的基本 PHP 表单:

      a) 将以下代码复制并粘贴到您要显示评论表单的“php 文件”中。

      b) 在您拥有“php 文件”的同一文件夹中创建一个文件“cmets.txt”。

      <?php
      $name = $_POST['name'];
      $comment = $_POST['comment'];
      
      if ($_POST)
          {
          $handle = fopen("comments.txt", "a");
          fwrite($handle, $name . ":<br/>" . $comment . "<br/>");
          fclose($handle);
          }
      
      ?>
      
      <form method="post">
      Name:<input type="text" name="name"><br/>
      Comment:<textarea name="comment"></textarea><br/>
      <input type="submit" name="submit" value="Post">
      </form>
      
      <?php include "comments.txt"; ?>
      

      【讨论】:

        猜你喜欢
        • 2020-12-27
        • 2011-07-09
        • 2012-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-29
        • 1970-01-01
        相关资源
        最近更新 更多