$link = @mysql_connect($db_host,$db_user,$db_pass) or die('unable to establish a db connection'); mysql_query("set names 'utf8'"); mysql_select_db($db_database,$link); 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="http://www.gravatar.com/avatar/'.md5($d['email']).'?size=50&default='.urlencode($url).'" /> '.$link_close.' </div> <div class="name">'.$link_open.$d['name'].$link_close.'</div> <div class="date" title="added at '.date('h:i on 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; } } $comments = array(); $result = mysql_query("select * from comments order by id asc"); while($row = mysql_fetch_assoc($result)) { $comments[] = new comment($row); } ?> <!doctype html public "-//w3c//dtd xhtml 1.0 strict//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=gb2312" /> <title>simple ajax commenting system | tutorialzine demo</title> <link rel="stylesheet" type="text/css教程" href="styles.css" /> </head> <body> <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> <script type="text/網頁特效" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript" src="script.js"></script> </body> </html> |