知识屋:更实用的电脑技术知识网站
所在位置:首页 > 编程技术 > PHP编程

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

发布时间:2014-09-05 10:23:12作者:知识屋

简单的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开发者有所帮助,感谢阅读本文。
 
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜