网页制作实现评论comment功能

从网上找到一个能实现简单comment功能的教程,有See Demo可以提前预览效果,而且作者也很贴心地在网页下方公布了完整的code, 所以我最终决定使用这个教程。

网址:http://talkerscode.com/webtricks/simple-instant-comment-system-using-ajax.php

这个实时评论功能使用到Ajax、PHP 和 MySQL 三部分知识。在前一个有关 XAMPP 的教程的基础上,我对 PHP 和 MySQL 有了一点了解,至于 Ajax 我是完全不了解,基础功不扎实导致即使拷贝下程序放到 IDE 中编译,也遇到各种各样的问题。

我不是一个会看参考书的人,我学知识都是基于自己的兴趣,然后再借助网络的力量,遇到不懂的就问
google 老师(至于为什么不问度娘?我总是找不到答案),循序渐进地把各个知识点补全。

在这样一个看似都准备好一切,只需轻点“运行”按钮,就可以看到结果的程序,我也花费了一些时间去调试。原因在我看来,有以下几点:

  • 编译环境不同
  • 文件放置路径不同
  • 语法过时,需要更新
图一

在编译过程中,我遇到了许多障碍,现在我把遇到的问题和解决方法总结下来,希望可以为使用这份教程的学友提供帮助。

问题一:comments.php 文件无法引用 comment_style.css 文件。后来发现是路径需要修改。
问题一参考资料:
https://segmentfault.com/q/1010000004438063/a-1020000004438890

问题二:缺少显示已有评论内容部分。

图二

考虑出现这样的问题,可能是由于我使用的编译环境不能完整显示代码的初衷,或者部分代码已过时,需要进一步更新。于是我选择一步步调试程序,找到问题所在。我使用的编译工具是 Brackets, 可在Extension Manager 中下载 PHP Debugger 插件。安装插件的过程参见:https://www.youtube.com/watch?v=ejbWCxpejhI
我在安装 PHP Debugger 过程中遇到了一点小麻烦,就是 php.ini 文件中缺失 xdebug 部分,因此无法对其进行修改。在大量查阅网上资料后,我认定我下载的 XAMPP 版本可能取消了 xdebug, 我试了下 XAMPP for Windows 5.6.12 版本 xdebug 可用。但是这个版本的Apache 会与 xdebug 的 port 冲突,需要响应进行修改。
问题二参考资料:
安装 xdebug
http://stackoverflow.com/questions/41368941/xdebug-configuration-missing-from-php-ini-in-xampp
https://gist.github.com/odan/1abe76d373a9cbb15bed
https://netbeans.org/kb/docs/php/configure-php-environment-windows_zh_CN.html
https://community.apachefriends.org/viewtopic.php?p=249717&sid=10911a8aaef96ea15b541060b9d47e2c
修改 Apache 配置
http://stackoverflow.com/questions/18300377/xampp-apache-error-apache-shutdown-unexpectedly

问题三:调试后发现 mysql_query() 函数没有起到查询数据库的作用,于是选择用 PDO 代替。
问题三参考资料:
http://stackoverflow.com/questions/21353448/how-to-do-mysql-query-to-pdo

问题四: 修改自闭合script标签
问题三参考资料:https://www.zhihu.com/question/36774461

问题五: 注意 $.ajax() 方法中的 URL 路径
问题五参考资料:
https://openenergymonitor.org/forum-archive/node/107.html

综上所述,我把修改好的 code 贴出来,学友们可在此基础上自由发挥!

步骤一:建立数据库存储 comment 内容,方便调取和查找。

CREATE DATABASE `testdb`;
USE `testdb`;
CREATE TABLE IF NOT EXISTS `users` (
 `id` int(8) NOT NULL AUTO_INCREMENT,
 `name` varchar(30) NOT NULL,
 `email` varchar(60) NOT NULL,
 `password` varchar(40) NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `email` (`email`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

步骤二:建立 PHP 文件,程序从这里开始运行。

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" type="text/css" href="../test/css/comment_style.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script>
        function post() {
            var comment = document.forms["myForm"]["fcomment"].value
            var name = document.forms["myForm"]["fname"].value
            if (comment && name) {
                $.ajax({
                    url: 'post_comments.php',
                    type: 'post',
                    //  dataType:'json',
                    data: {
                        user_comm: comment,
                        user_name: name
                    },
                    success: function(response) {
                        document.getElementById("all_comments").innerHTML = response + document.getElementById("all_comments").innerHTML;
                        document.getElementById("comment").value = "";
                        document.getElementById("username").value = "";
                    }
                });
            }
        }
    </script>
    <!--
<script>
function post()
    {
  var comment = document.getElementById("comment").value;
  var name = document.getElementById("username").value;
  if(comment && name)
  {
   alert("Name must be filled out");
    };
  }
</script>
-->
</head>
<body>
    <div class="col-md-12 colcol">
        <h1>Instant Comment System Using Ajax,PHP and MySQL</h1>
        <form name="myForm" method="post" action="" onsubmit="return post()">
            <textarea id="comment" name="fcomment" placeholder="Write Your Comment Here....."></textarea>
            <br>
            <input type="text" id="username" name="fname" placeholder="Your Name">
            <br>
            <input id="submit" type="submit" value="Post Comment">
        </form>
        <div id="all_comments">
            <?php
    $host="localhost";
    $username="root";
    $password="";
    $databasename="testdb";

//   $connect=mysql_connect($host,$username,$password);
//    if (!$connect) {
//    die('Not connected : ' . mysql_error());
//}
//    $db=mysql_select_db("testdb");
//    if (!$db) {
//    die ('Can\'t use testdb : ' . mysql_error());
//}     
//    $comm = mysql_query('SELECT name FROM `comments`');
      
$dbo = new PDO("mysql:host=localhost;dbname=testdb", "root", "");
// Construct a query
$query = "SELECT * FROM comments";
// Send the query
$qresult = $dbo->query($query);
while($row = $qresult->fetch(PDO::FETCH_ASSOC)) {
    //$result[] = $row;
      $name=$row['name'];
      $comment=$row['comment'];
      $time=$row['post_time'];
      ?>
                <div class="comment_div">
                    <p class="name">Posted By:
                        <?php echo $name;?>
                    </p>
                    <p class="comment">
                        <?php echo $comment;?>
                    </p>
                    <p class="time">
                        <?php echo $time;?>
                    </p>
                </div>
                <?php
}
// Free used resources
$qresult->closeCursor();
$dbo = null;
 ?>
        </div>
    </div>
</body>
</html>

步骤三:建立执行存储 comment 的 PHP 文件,便于步骤二的 $.ajax() 方法使用。

<?php
$host="localhost";
$username="root";
$password="";
$databasename="testdb";
$link = new PDO("mysql:host=localhost;dbname=testdb", "root", "");
 if (!$link) {
    die('Not connected : ' . mysql_error());
 }     
if(isset($_POST['user_comm']) && isset($_POST['user_name']) )
{
  $statement = $link->prepare("INSERT INTO comments(name, comment, post_time)VALUES(:name,:comment, CURRENT_TIMESTAMP)");
  $statement->bindParam(':name',$_POST['user_name']);
  $statement->bindParam(':comment',$_POST['user_comm']);
  $statement->execute();  
}
// Step 5: Free used resources
//$statement->closeCursor();
//$link = null;
 ?>

步骤四:创建 CSS 文件,为网页“化个妆”。

body
{
    text-align:center;
    font-family:helvetica;
    background-color:#A9D0F5;
}
h1
{
    color:blue;
    text-align:center;
    margin-top:100px;
}
textarea
{
    width:500px;
    height:100px;
    border:1px solid silver;
    border-radius:5px;
    font-size:17px;
    padding:10px;
    font-family:helvetica;
}
input[type="text"]
{
    width:500px;
    height:35px;
    border:1px solid silver;
    margin-top:10px;
    border-radius:5px;
    font-size:17px;
    padding:10px;
    font-family:helvetica;
}
input[type="submit"]
{
    width:150px;
    height:40px;
    border:none;
    background-color:#2E64FE;
    color:white;
    margin-top:10px;
    border-radius:5px;
    font-size:17px;
}
.comment_div
{
    width:500px;
    background-color:white;
    margin:auto;    
}
.comment_div .name
{
    height:30px;
    line-height:30px;
    padding:10px;
    background-color:grey;
    color:white;
    text-align:left;
   
}
.comment_div .comment
{
    padding:10px;
    text-align:left;
}
.comment_div .time
{
    font-style:italic;
    padding:10px;
    background-color:grey;
    color:white;
    text-align:left;
}

不积跬步,无以至千里,让我们一起前进!

更多内容请关注我的网站 www.emiluo.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容