ホームページ >バックエンド開発 >PHPチュートリアル >Smarty と Ajax を組み合わせて非更新ゲストブックの例を実装しました

Smarty と Ajax を組み合わせて非更新ゲストブックの例を実装しました

WBOY
WBOYオリジナル
2016-07-29 08:35:55902ブラウズ

看了标题你也许要说,留言本,很基本的东东啊!谁不会啊,还要用Smarty,这不找累吗?别急,我要表达的是一种编程的思想和结构,而不是证明我做的东西多有意义,通过它相信对初学者学习Smarty和ajax有些启发。原本用ajax做的,可惜始终调试不成功,只好用手写JS来弄了,不过不要紧,还是有一定价值的。站点结构大家下了源代码自己看,代码不长,应该不会看烦^_^,听我慢慢道来。
     现在都PHP5了OO(面向对象)很流行了都,这里也不错过,首先来看下我们用OO来实现数据库操作和连接:
[php]
/**************************
页面:dbclass.php
作者:辉老大
功能:定义数据库操作类
**************************/
php
/**************************
页面:dbclass.php
作者:辉老大
功能:定义数据库操作类
**************************/
class db
{
//创建构造函数,作用:数据库连接并选择相应数据库
public function __construct
(){
require(
'config.inc.php'
);
mysql_connect($dbhost,$dbuser,$dbpassword) or die("error!"
);
mysql_query("SET NAMES 'GBK'"
);
mysql_select_db($dbname
);
}
//执行SQL语句函数
public function query($sql
){
return
mysql_query($sql
);
}
//取得结果集数组函数
public function loop_query($result
){
return
mysql_fetch_array($result
);
}
//创建析构函数,作用:关闭数据库连接
public function __destruct
(){
return
mysql_close
();
}
}
?> 
这个类有什么特点呢?首先介绍下__construct()是构造函数,啥是构造函数?通俗点讲就是类被实例化后就自动执行的函数,__destruct()是啥?是析构函数,它的作用就是在没有任何方法指向这个对象时,便自动销毁对象,里面一般包含一些收尾的操作,比如关闭文件,关闭数据库连接之类的方法,看到这你是不是明白一些了?没错!在类实例化的时候自动执行带有数据库连接方法的构造函数,在实例销毁的时候执行关闭数据库连接的析构函数,对于一些基本数据操作我们只要new一个$db对象,然后$db->query()...是不是很方便,当然,这只是一个简单的例子,你还可以继续扩展。来看看 config.inc.php里面是什么:
很容易对不对,感兴趣就接着看吧^_^,来看下模板文件:

php
/*************************
页面:config.inc.php
作者:辉老大
功能:数据库参数变量设定
$dbhost:主机名
$dbuser:连接帐户
$dbpassword:连接密码
$dbname:数据库名
*************************/
$dbhost = "localhost"
;
$dbuser = "root"
;
$dbpassword = "7529639"
;
$dbname = "testdb"
;
?>
 



<{$title}>





<{*这里显示留言内容*}>
<{section name=loop loop=$bookinfo}><{*循环显示留言*}>
用户名:<{$bookinfo[loop].username}> 内容:<{$bookinfo[loop].comment}>


<{/section}>





< ;td width="80" height="30" align="center">ユーザー名:

"
"
" " ;td height="120">



php
/* ***************************************** タイトル:Smarty と Ajax 掲示板を組み合わせた
著者:leehui1983(Hui Boss)
ページ名:index.php
終了日:2006-12-17
************************ * ****************/

require('./libs/Smarty.class.php ');
//smarty クラス ライブラリが含まれています
require('./inc/ dbclass.php');
//データベースオペレーションクラスが含まれています
$db = new db();
//データベースオペレーションインスタンスを生成します
$smarty = new Smarty();
//smarty オブジェクトをインスタンス化します
$smarty->template_dir = "./テンプレート"; //テンプレートディレクトリを設定します
$smarty->compile_dir="./templates_c"; //コンパイルディレクトリを設定します
$ Smarty
->
キャッシュ= false/ /キャッシュ方法を設定します /******************** *************************** ********** 左右の境界文字、デフォルトは {} ですが、実際のアプリケーションでは JavaScript と競合しやすいため、<{}> などに設定することをお勧めします。
************************************************ ** ****/
$smarty->left_delimiter = "<{"

$smarty-> right_delimiter = "}>"
;
); //Smarty によって表示される最初の ページメッセージコンテンツを設定します"select * from bookinfo order by id desc"); while($rs=
$db
->loop_query
($rt )){ $配列 []=array("ユーザー名"
=>$rs
['ユーザー名'],"コメント"=&g t; $rs[ 'コメント'

]);
} $smarty->assign("bookinfo", $array ); 設定解除($array);
//配列変数を破棄

$smarty
->display("index.t pl"); // ./templates の下にあるindex.tpl テンプレートをコンパイルして表示します
?>
ページの例にはまだ多くのコメントがあります。Smarty マニュアルを参照してくださいこれはとても簡単です! !あはは~~~~それでは、ajax を紹介します。ここでは、基本的な開発フレームワークを使用して ajax を実装します。ajax についての知識については、非常に人気のあるオンラインの電子チュートリアル Ajax Development Briefvar http_request=false を参照することをお勧めします。 ;
function send_request(url){//初期化、処理関数、リクエストを送信する関数を指定します http_request=false;//XMLHttpRequest オブジェクトの初期化を開始します
if(window.XMLHttpRequest){//Mozilla ブラウザ
http_request=new XMLHttpRequest( ); if(http_request.overrideMimeType){//MIME カテゴリを設定 http_request.overrideMimeType("text/xml"); }}else if(window.ActiveXObject){///IE ブラウザ try{ http_request= new ActiveXObject("Msxml2.XMLHttp"); }catch(e){ try{ http_request=new ActiveXobject("Microsoft.XMLHttp"); }catch(e){} }
}if(!http_request ) {//例外、オブジェクト インスタンスの作成に失敗しました window.alert("Failed to create XMLHttp object!");
return false;
}http_request.>//リクエスト メソッド、URL、およびリクエストを実行するかどうかを決定します。次のコードを同期的に http_request .open("GET",url,true);
http_request.send(null);
} //返された情報を処理する関数 function processrequest(){
if(http_request.readyState== 4){// 判定オブジェクトのステータス
if(http_request.status==200){// 情報が正常に返されたので、情報の処理を開始します
document.getElementById(reobj).innerHTML=http_request.responseText;
}
else {//ページは正常ではありません
alert( "リクエストしたページは正常ではありません! ");
}
}
}
function send(obj){
var f=document.book;
var username=f.username.value;
var comment=f.comment.value;
if(username== ""||comment==""){
document.getElementById(obj).innerHTML="すべて入力してください。";
return false;
}
else{
send_request('checkbookinfo.php?username='+username+'&comment='+comment);
reobj=obj;
}
}
これが方法です「公開」ボタンをクリックすると、データはサーバーによって非同期に処理され、非同期更新は JS を通じて整理され、メッセージを送信した後、従来のページがジャンプするのを待つことなく、すぐにメッセージを確認できるようになります。では、データはどこに送信されて処理されるのでしょうか? ここを見てください:
php
/******************************************
タイトル: Smarty と Ajax 掲示板の組み合わせの例
著者:leehui1983(フイボス) ページ名:checkbookinfo.php 終了日:2006-12-17
************************** * **************/


header

(
"Content-type : text/html;charset=GBK" );//中国語の文字化けを回避するための出力エンコーディング
include(
'./inc/dbclass.php'
); //データベース操作クラスを含みます
$ db
=new
db();//データベース操作インスタンスを生成します
$sql
=
"insert into bookinfovalues( 0,'". $コメント."','".$ユーザー名."')";
$db
- >
query ($ sql);
$querysql
=
"select * from bookinfo order by id desc";
$結果
=
$db-> query($querysql); while(
$rows
=
$db-&g t;loop_query ( $result)){ //リアルタイム更新のためにメッセージリストを印刷します //$arr.="
ユーザー名: {$rows['ユーザー名']} コンテンツ: {$ rows['comment']}

";
echo
' ユーザー名: '
.$rows['ユーザー名'].' コンテンツ: ' .$rows [ 'コメント'].'

'; }

//echo $arr;
?>
そうですね、最初にデータを挿入します。一般的に、更新されたデータは JS を通じて整理および表示されます。AJAX は非常に優れています。基本的には以上です。iframe を追加すると何が変わるでしょうか。チャット ルームを更新する必要はありません。自分の能力を使って外観を実現します。この例では、OO、AJAX、SMARTY を使用しています。皆さんに気に入っていただければ幸いです。転載する場合は、著作権を明記してください。最後に、これが効果画像です~~~~

上記では、Smarty と Ajax を組み合わせて非リフレッシュ ゲストブックを実装する例を、関連する内容も含めて紹介しました。PHP チュートリアルに興味のある友人の参考になれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。