簡單實用方便的ajax評論完整代碼

來源:互聯網
上載者:User
簡單的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  // Error reporting:  error_reporting(E_ALL^E_NOTICE);  include "conn.php";  include "comment.class.php";  /* (PS:^_^不錯的php學習交流群:276167802,驗證:csl,有興趣的話可以加入進來一起討論) /   Select all the comments and populate the $comments array with objects */  $comments = array();  $result = mysql_query("SELECT * FROM comments ORDER BY id ASC");  while($row = mysql_fetch_assoc($result))  {  $comments[] = new Comment($row);  }  ?>   PHP [php]  <div id="main">  <?php  /* /   Output the comments one by one: */  foreach($comments as $c){  echo $c->markup();  }  ?>  <div id="addCommentContainer">  <p>Add a Comment</p>  <form id="addCommentForm" method="post" action="">  <div>  <label for="name">Your Name</label>  <input type="text" name="name" id="name" />  <label for="email">Your Email</label>  <input type="text" name="email" id="email" />  <label for="url">Website (not required)</label>  <input type="text" name="url" id="url" />  <label for="body">Comment Body</label>  <textarea name="body" id="body" cols="20" rows="5"></textarea>  <input type="submit" id="submit" value="Submit" />  </div>  </form>  </div>  </div>  submit.php   PHP [php]  <?php  // Error reporting:  error_reporting(E_ALL^E_NOTICE);  include "conn.php";  include "comment.class.php";  /* /   This array is going to be populated with either /   the data that was sent to the script, or the /   error messages. /*/  $arr = array();  $validates = Comment::validate($arr);  if($validates)  {  /* Everything is OK, insert to database: */  mysql_query("   INSERT INTO comments(name,url,email,body)  VALUES (  '".$arr['name']."',  '".$arr['url']."',  '".$arr['email']."',  '".$arr['body']."'  )");  $arr['dt'] = date('r',time());  $arr['id'] = mysql_insert_id();  /* /   The data in $arr is escaped for the mysql query, /   but we need the unescaped variables, so we apply, /   stripslashes to all the elements in the array: /*/  $arr = array_map('stripslashes',$arr);  $insertedComment = new Comment($arr);  /* Outputting the markup of the just-inserted comment: */  echo json_encode(array('status'=>1,'html'=>$insertedComment->markup()));  }  else  {  /* Outputtng the error messages */  echo '{"status":0,"errors":'.json_encode($arr).'}';  }  ?>  comment.class.php   PHP [php] <?php  class Comment  {  private $data = array();  public function __construct($row)  {  /* /   The constructor */  $this->data = $row;  }  public function markup()  {  /* /   This method outputs the XHTML markup of the comment */  // Setting up an alias, so we don't have to write $this->data every time:  $d = &$this->data;  $link_open = '';  $link_close = '';  if($d['url']){  // If the person has entered a URL when adding a comment,  // define opening and closing hyperlink tags  $link_open = '<a href="'.$d['url'].'">';  $link_close =  '</a>';  }  // Converting the time to a UNIX timestamp:  $d['dt'] = strtotime($d['dt']);  // Needed for the default gravatar image:  $url = 'http://'.dirname($_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]).'/img/default_avatar.gif';  return '  <div class="comment">  <div class="avatar">  '.$link_open.'  <img src="" />  '.$link_close.'  </div>  <div class="name">'.$link_open.$d['name'].$link_close.'</div>  <div class="date" title="Added at '.date('H:i \o\n d M Y',$d['dt']).'">'.date('d M Y',$d['dt']).'</div>  <p>'.$d['body'].'</p>  </div>  ';  }  public static function validate(&$arr)  {  /* /   This method is used to validate the data sent via AJAX. / /   It return true/false depending on whether the data is valid, and populates /   the $arr array passed as a paremter (notice the ampersand above) with /   either the valid input data, or the error messages. */  $errors = array();  $data   = array();  // Using the filter_input function introduced in PHP 5.2.0  if(!($data['email'] = filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL)))  {  $errors['email'] = 'Please enter a valid Email.';  }  if(!($data['url'] = filter_input(INPUT_POST,'url',FILTER_VALIDATE_URL)))  {  // If the URL field was not populated with a valid URL,  // act as if no URL was entered at all:  $url = '';  }  // Using the filter with a custom callback function:  if(!($data['body'] = filter_input(INPUT_POST,'body',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))  {  $errors['body'] = 'Please enter a comment body.';  }  if(!($data['name'] = filter_input(INPUT_POST,'name',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))  {  $errors['name'] = 'Please enter a name.';  }  if(!empty($errors)){  // If there are errors, copy the $errors array to $arr:  $arr = $errors;  return false;  }  // If the data is valid, sanitize all the data and copy it to $arr:  foreach($data as $k=>$v){  $arr[$k] = mysql_real_escape_string($v);  }  // Ensure that the email is lower case:  $arr['email'] = strtolower(trim($arr['email']));  return true;  }  private static function validate_text($str)  {  /* /   This method is used internally as a FILTER_CALLBACK */  if(mb_strlen($str,'utf8')<1)  return false;  // Encode all html special characters (<, >, ", & .. etc) and convert  // the new line characters to <br> tags:  $str = nl2br(htmlspecialchars($str));  // Remove the new line characters that are left  $str = str_replace(array(chr(10),chr(13)),'',$str);  return $str;  }  }  ?>   以上是本文關於ajax評論的完整代碼,希望本文對廣大php開發人員有所協助,感謝閱讀本文。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.