/*
/ Output the comments one by one:
*/
foreach($comments as $c){
echo $c->markup();
}
?>
Add a Comment
简单的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]
// 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]
/*
/ Output the comments one by one:
*/
foreach($comments as $c){
echo $c->markup();
}
?>
Add a Comment
submit.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]
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 = '';
$link_close = '';
}
// 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 '
';
}
パブリック静的関数 validate(&$arr)
{
/*
/ このメソッドは、AJAX 経由で送信されたデータを検証するために使用されます。
/
/ データが有効かどうかに応じて true/false を返し、
に値を入力します。/
でパラメータとして渡される $arr 配列 (上のアンパサンドに注目してください)/ 有効な入力データまたはエラー メッセージ。
*/
$errors = array();
$data = array();
// PHP 5.2.0 で導入された filter_input 関数を使用する
if(!($data['email'] = filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL)))
{
$errors['email'] = '有効な電子メールを入力してください。';
}
if(!($data['url'] = filter_input(INPUT_POST,'url',FILTER_VALIDATE_URL)))
{
// URL フィールドに有効な URL が入力されていない場合、
// URL がまったく入力されなかったかのように動作します:
$url = '';
}
// カスタム コールバック関数でフィルターを使用する:
if(!($data['body'] = filter_input(INPUT_POST,'body',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))
{
$errors['body'] = 'コメント本文を入力してください。';
}
if(!($data['name'] = filter_input(INPUT_POST,'name',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))
{
$errors['name'] = '名前を入力してください。';
}
if(!empty($errors)){
// エラーがある場合は、$errors 配列を $arr にコピーします:
$arr = $errors;
false を返します。
}
// データが有効な場合は、すべてのデータをサニタイズして $arr にコピーします:
foreach($data as $k=>$v){
$arr[$k] = mysql_real_escape_string($v);
}
// メールが小文字であることを確認してください:
$arr['email'] = strto lower(trim($arr['email']));
true を返します。
}
プライベート静的関数 validate_text($str)
{
/*
/ このメソッドは FILTER_CALLBACK として内部的に使用されます
*/
if(mb_strlen($str,'utf8')<1)
false を返します。
// すべての HTML 特殊文字 (<、>、"、& .. など) をエンコードし、変換します
//
に改行文字を入力します。タグ:
$str = nl2br(htmlspecialchars($str));
// 残った改行文字を削除します
$str = str_replace(array(chr(10),chr(13)),'',$str);
$str を返す;
}
}
?>
以上は、ajax 認証に関する完全なコードであり、大php の公開者にお役立てください。
'.$link_open.'
'.$link_close.'
'.$d['body'].'