RELATEED CONSULTING
相關咨詢
選擇下列産品馬上(shàng)在線溝通(tōng)
服務時(shí)間(jiān):9:00-18:00
你(nǐ)可(kě)能遇到了下面的問題
關閉右側工具欄
PHP+Mysql+jQuery實現發布微博程序--PHP篇
  • 作(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

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ò)什麽...

查看演示DEMO

至此,本例從前端交互到後台處理(lǐ)程序,全部完成,有(yǒu)興趣的同學最好親自動手,才能從中學到樂趣。