简单实用方便的ajax评论完整代码

简单的ajax评论完整代码
数据库结构CREATE TABLE `comments` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(128) collate utf8_unicode_ci NOT NULL default ”,
`url` varchar(255) collate utf8_unicode_ci NOT NULL default ”,
`email` varchar(255) collate utf8_unicode_ci NOT NULL default ”,
`body` text collate utf8_unicode_ci NOT NULL,
`dt` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;
演示
PHP
[php][/php] view plaincopy

  1. <?php
  2. // Error reporting:
  3. error_reporting(E_ALL^E_NOTICE);
  4. include “conn.php”;
  5. include “comment.class.php”;
  6. /* (PS:^_^不错的php学习交流群:276167802,验证:csl,有兴趣的话可以加入进来一起讨论)
  7. /   Select all the comments and populate the $comments array with objects
  8. */
  9. $comments = array();
  10. $result = mysql_query(“SELECT * FROM comments ORDER BY id ASC”);
  11. while($row = mysql_fetch_assoc($result))
  12. {
  13. $comments[] = new Comment($row);
  14. }
  15. ?>
PHP
[php][/php] view plaincopy

  1. <div id=”main”>
  2. <?php
  3. /*
  4. /   Output the comments one by one:
  5. */
  6. foreach($comments as $c){
  7. echo $c->markup();
  8. }
  9. ?>
  10. <div id=”addCommentContainer”>
  11. <p>Add a Comment</p>
  12. <form id=”addCommentForm” method=”post” action=””>
  13. <div>
  14. <label for=”name”>Your Name</label>
  15. <input type=”text” name=”name” id=”name” />
  16. <label for=”email”>Your Email</label>
  17. <input type=”text” name=”email” id=”email” />
  18. <label for=”url”>Website (not required)</label>
  19. <input type=”text” name=”url” id=”url” />
  20. <label for=”body”>Comment Body</label>
  21. <textarea name=”body” id=”body” cols=”20″ rows=”5″></textarea>
  22. <input type=”submit” id=”submit” value=”Submit” />
  23. </div>
  24. </form>
  25. </div>
  26. </div>
  27. submit.php
PHP
[php][/php] view plaincopy

  1. <?php
  2. // Error reporting:
  3. error_reporting(E_ALL^E_NOTICE);
  4. include “conn.php”;
  5. include “comment.class.php”;
  6. /*
  7. /   This array is going to be populated with either
  8. /   the data that was sent to the script, or the
  9. /   error messages.
  10. /*/
  11. $arr = array();
  12. $validates = Comment::validate($arr);
  13. if($validates)
  14. {
  15. /* Everything is OK, insert to database: */
  16. mysql_query(”   INSERT INTO comments(name,url,email,body)
  17. VALUES (
  18. ‘”.$arr[‘name’].”‘,
  19. ‘”.$arr[‘url’].”‘,
  20. ‘”.$arr[’email’].”‘,
  21. ‘”.$arr[‘body’].”‘
  22. )”);
  23. $arr[‘dt’] = date(‘r’,time());
  24. $arr[‘id’] = mysql_insert_id();
  25. /*
  26. /   The data in $arr is escaped for the mysql query,
  27. /   but we need the unescaped variables, so we apply,
  28. /   stripslashes to all the elements in the array:
  29. /*/
  30. $arr = array_map(‘stripslashes’,$arr);
  31. $insertedComment = new Comment($arr);
  32. /* Outputting the markup of the just-inserted comment: */
  33. echo json_encode(array(‘status’=>1,’html’=>$insertedComment->markup()));
  34. }
  35. else
  36. {
  37. /* Outputtng the error messages */
  38. echo ‘{“status”:0,”errors”:’.json_encode($arr).’}’;
  39. }
  40. ?>
  41. comment.class.php
PHP
[php][/php] view plaincopy

  1. <?php
  2. class Comment
  3. {
  4. private $data = array();
  5. public function __construct($row)
  6. {
  7. /*
  8. /   The constructor
  9. */
  10. $this->data = $row;
  11. }
  12. public function markup()
  13. {
  14. /*
  15. /   This method outputs the XHTML markup of the comment
  16. */
  17. // Setting up an alias, so we don’t have to write $this->data every time:
  18. $d = &$this->data;
  19. $link_open = ”;
  20. $link_close = ”;
  21. if($d[‘url’]){
  22. // If the person has entered a URL when adding a comment,
  23. // define opening and closing hyperlink tags
  24. $link_open = ‘<a href=”‘.$d[‘url’].'”>’;
  25. $link_close =  ‘</a>’;
  26. }
  27. // Converting the time to a UNIX timestamp:
  28. $d[‘dt’] = strtotime($d[‘dt’]);
  29. // Needed for the default gravatar image:
  30. $url = ‘http://’.dirname($_SERVER[‘SERVER_NAME’].$_SERVER[“REQUEST_URI”]).’/img/default_avatar.gif’;
  31. return ‘
  32. <div class=”comment”>
  33. <div class=”avatar”>
  34. ‘.$link_open.’
  35. <img src=”” />
  36. ‘.$link_close.’
  37. </div>
  38. <div class=”name”>’.$link_open.$d[‘name’].$link_close.'</div>
  39. <div class=”date” title=”Added at ‘.date(‘H:i \o\n d M Y’,$d[‘dt’]).'”>’.date(‘d M Y’,$d[‘dt’]).'</div>
  40. <p>’.$d[‘body’].'</p>
  41. </div>
  42. ‘;
  43. }
  44. public static function validate(&$arr)
  45. {
  46. /*
  47. /   This method is used to validate the data sent via AJAX.
  48. /
  49. /   It return true/false depending on whether the data is valid, and populates
  50. /   the $arr array passed as a paremter (notice the ampersand above) with
  51. /   either the valid input data, or the error messages.
  52. */
  53. $errors = array();
  54. $data   = array();
  55. // Using the filter_input function introduced in PHP 5.2.0
  56. if(!($data[’email’] = filter_input(INPUT_POST,’email’,FILTER_VALIDATE_EMAIL)))
  57. {
  58. $errors[’email’] = ‘Please enter a valid Email.’;
  59. }
  60. if(!($data[‘url’] = filter_input(INPUT_POST,’url’,FILTER_VALIDATE_URL)))
  61. {
  62. // If the URL field was not populated with a valid URL,
  63. // act as if no URL was entered at all:
  64. $url = ”;
  65. }
  66. // Using the filter with a custom callback function:
  67. if(!($data[‘body’] = filter_input(INPUT_POST,’body’,FILTER_CALLBACK,array(‘options’=>’Comment::validate_text’))))
  68. {
  69. $errors[‘body’] = ‘Please enter a comment body.’;
  70. }
  71. if(!($data[‘name’] = filter_input(INPUT_POST,’name’,FILTER_CALLBACK,array(‘options’=>’Comment::validate_text’))))
  72. {
  73. $errors[‘name’] = ‘Please enter a name.’;
  74. }
  75. if(!empty($errors)){
  76. // If there are errors, copy the $errors array to $arr:
  77. $arr = $errors;
  78. return false;
  79. }
  80. // If the data is valid, sanitize all the data and copy it to $arr:
  81. foreach($data as $k=>$v){
  82. $arr[$k] = mysql_real_escape_string($v);
  83. }
  84. // Ensure that the email is lower case:
  85. $arr[’email’] = strtolower(trim($arr[’email’]));
  86. return true;
  87. }
  88. private static function validate_text($str)
  89. {
  90. /*
  91. /   This method is used internally as a FILTER_CALLBACK
  92. */
  93. if(mb_strlen($str,’utf8′)<1)
  94. return false;
  95. // Encode all html special characters (<, >, “, & .. etc) and convert
  96. // the new line characters to <br> tags:
  97. $str = nl2br(htmlspecialchars($str));
  98. // Remove the new line characters that are left
  99. $str = str_replace(array(chr(10),chr(13)),”,$str);
  100. return $str;
  101. }
  102. }
  103. ?>

以上是本文关于ajax评论的完整代码,希望本文对广大php开发者有所帮助,感谢阅读本文。

标签