- 作(zuò)者:admin
- 發表時(shí)間(jiān):2013-07-02 14:17:24
- 來(lái)源:未知
在上(shàng)一篇文章中,我講解了如何用jQuery實現輸入表單的實時(shí)字數(shù)統計(jì)和(hé)Ajax提交數(shù)據到後台的功能。本文将重要介紹後台是如何處理(lǐ)前台提交的數(shù)據,并返回結果的。
先還(hái)是要說明(míng)本例的業務流程:
1、前端用戶輸入內(nèi)容,并對輸入的內(nèi)容字數(shù)進行(xíng)實時(shí)統計(jì)。
2、用戶提交數(shù)據,jQuery實現通(tōng)過Ajax向後台發送數(shù)據。
3、後台PHP接收提交表單的數(shù)據,并對數(shù)據進行(xíng)必要的安全過濾。
4、後台PHP連接Mysql數(shù)據庫,并将提交過來(lái)的表單數(shù)據寫入到相應的數(shù)據表中。
5、後台向返回成功結果數(shù)據內(nèi)容,并通(tōng)過Ajax将返回的數(shù)據內(nèi)容插入到前端頁面中。
上(shàng)述1、2步在前篇文章:jQuery篇已講解了,本文将完成剩餘的散步。
數(shù)據表
首先我們要準備一個(gè)數(shù)據表,表結構如下:
CREATE TABLE `say` ( `id` int(11) NOT NULL auto_increment, `userid` int(11) NOT NULL default '0', `content` varchar(200) NOT NULL, `addtime` int(10) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
注意,本例中将時(shí)間(jiān)字段:addtime的類型設置為(wèi)int,是為(wèi)了後續的時(shí)間(jiān)處理(lǐ)方便,在很(hěn)多(duō)應用中(如Discuz論壇)都是将時(shí)間(jiān)類型轉成數(shù)字型。
時(shí)間(jiān)軸處理(lǐ)函數(shù)和(hé)格式化輸出列表函數(shù):
時(shí)間(jiān)軸處理(lǐ)函數(shù),就是把時(shí)間(jiān)轉換成我們看到的諸如“5分鍾前”,“昨天 10:21”等形式,詳細使用可(kě)以查看之前我寫過的文章:PHP實現時(shí)間(jiān)軸函數(shù),代碼如下:
/*時(shí)間(jiān)轉換函數(shù)*/ function tranTime($time) { $rtime = date("m-d H:i",$time); $htime = date("H:i",$time); $time = time() - $time; if ($time < 60) { $str = '剛剛'; } elseif ($time < 60 * 60) { $min = floor($time/60); $str = $min.'分鍾前'; } elseif ($time < 60 * 60 * 24) { $h = floor($time/(60*60)); $str = $h.'小(xiǎo)時(shí)前 '.$htime; } elseif ($time < 60 * 60 * 24 * 3) { $d = floor($time/(60*60*24)); if($d==1) $str = '昨天 '.$rtime; else $str = '前天 '.$rtime; } else { $str = $rtime; } return $str; }
格式化輸出函數(shù)是将得(de)到的用戶信息和(hé)發布內(nèi)容及時(shí)間(jiān)按照一定的格式輸出到前端頁面的函數(shù),代碼如下:
function formatSay($say,$dt,$uid){ $say=htmlspecialchars(stripslashes($say)); return''; }demo_'.$uid.' '. preg_replace('/((?:http|https|ftp):\/\/(?:[A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+): ?(\d+)?\/?[^\s\"\']+)/i','$1',$say).'
'.tranTime($dt).'
将以上(shàng)兩個(gè)函數(shù)都放入function.php中,準備随時(shí)被調用。
submit.php處理(lǐ)表單數(shù)據
在上(shàng)篇文章中,我們知道(dào)jQuery将前端獲得(de)的數(shù)據以POST方式,通(tōng)過Ajax提交給了後台的submit.php。那(nà)麽submit就是要完成後續的所有(yǒu)一攤子任務。請(qǐng)看代碼:
require_once('connect.php'); //數(shù)據庫連接文件 require_once('function.php'); //函數(shù)調用文件 $txt=stripslashes($_POST['saytxt']); //獲取提交的數(shù)據 $txt=mysql_real_escape_string(strip_tags($txt),$link); //過濾HTML标簽,并轉義特殊字符 if(mb_strlen($txt)<1 || mb_strlen($txt)>140) die("0"); //判斷輸入字符數(shù)是否符合要求 $time=time(); //獲取當前時(shí)間(jiān) $userid=rand(0,4); //插入數(shù)據到數(shù)據表中 $query=mysql_query("insert into say(userid,content,addtime)values('$userid','$txt','$time')"); if(mysql_affected_rows($link)!=1) die("0"); echo formatSay($txt,$time,$userid); //調用函數(shù)輸出結果
注意,本例中為(wèi)了演示,将用戶ID(userid)進行(xíng)随機處理(lǐ),實際的應用是獲取當前用戶的ID。另外數(shù)據庫連接文件,大(dà)家(jiā)可(kě)以自己寫一個(gè),在我提供的下載的DEMO裏也有(yǒu)這個(gè)文件。
最後要回到前端頁面index.php來(lái)。index.php主要除了提供輸入的入口,還(hái)要承接後台處理(lǐ)返回的結果,并且要将數(shù)據庫裏已有(yǒu)的數(shù)據顯示出來(lái)。代碼如下:
140說說你(nǐ)正在做(zuò)什麽...
至此,本例從前端交互到後台處理(lǐ)程序,全部完成,有(yǒu)興趣的同學最好親自動手,才能從中學到樂趣。