PHP對文本數據庫的基本操作方法
PHP實現對文本數據庫的數據顯示、加入、修改、刪除、查詢五大基本操作的方法 我用一個留言本程序作為例子,闡述PHP實現對文本數據庫的數據顯示、加入、修改、刪除、查詢五大基本操作的方法。 此文本數據庫共有字段10個:客戶IP、發言時間、客戶名、客戶EMAIL、客戶主頁地址、留言表情圖片名、客戶QQ、客戶形象圖片、留言內容、管理員回復內容。
1、加入數據程序段。
$date=date('Y-m-d H:i:s');//取得系統時間 $ip = $HTTP_SERVER_VARS[REMOTE_ADDR]; //取得發言的IP地址 $text=encode($gb_text);//去掉留言內容后面的空格. $fp=fopen('gb.dat','a');//以只寫模式打開gb.dat文本文件,文件指針指向文件尾部. $str=$ip.' '.$date.' '.$gb_name.' '.$gb_email.' '.$gb_home.' '.$face.' '.$gb_qq.' '.$head.' '.$text.' '.$reply.'n';//將所有留言的數據賦予變量$str,' '的目的是用來今后作數據分割時的數據間隔符號。 fwrite($fp,$str);//將數據寫入文件 fclose($fp);//關閉文件 showmessage('留言成功!','index.php','3');//留言成功,3秒后自動返回主界面。 其中的$gb_name 、$gb_email、$gb_home、$face、$gb_qq、$head、$gb_text、$reply是由發言表單傳過來的數據。
2、數據顯示程序段
<? if (file_exists('gb.dat')){//檢測文件是否存在 $array=file('gb.dat');//將文件全部內容讀入到數組$array $arr=array_reverse($array);//將$array里的數據安行翻轉排列(即最后一行當第一行,依此類推)讀入數組$arr的每一個單元($arr[0]...)。 $num=count($array);//獲取數組$array里的信息數(一行為一條信息) if ($num>0){//如果信息數大于零(即文本數據庫不為空) $total=ceil($num/$pagesize);//計算總頁數(取最大整數,即凡有小數點都進一取整,$pagesize為預設的每頁顯示的信息數) if($page<1){//如果當前頁面數碼號小于1 $page=1;//則賦值為1 } $number=($page-1)*$pagesize;//計算當前所顯示第一個留言的數碼號(數碼號從零開始,主要是達到與數組單元號對應的目的) for($i=0;$i<=$pagesize-1;$i++){//進入循環 $row=explode(' ',$arr[$number]);//以' '作為分割符,分割數組$arr中每第$number個單元的數據,并將這些數據賦予數組$rom list($ip,$datetime,$name,$email,$home,$face,$qq,$head,$text,$reply)=$row;//將數組$row里的單元數據按順序賦予括號里的變量 ?> <img src=<? echo $head ?> >//顯示客戶形象圖片 <br> <font color='#0099CC'>昵稱【<? echo $name ?><font size='2'>】<br>//顯示客戶名 發表于:<? echo $datetime ?>//顯示留言發表時間 <br> <img src=<? echo $face ?>>//顯示客戶留言表情圖片 <? echo $name ?>說:<? echo $text; ?>//顯示客戶留言內容 <br> <? echo $reply ?>//顯示回復內容 <br> <a href='http://www.aoyou183.cn/bcjs/<? echo $home ?>' target='_blank'>訪問<? echo $name ?>的主頁</a>//客戶主頁的超連接 <a href='mailto:<? echo $email ?>'>給<? echo $name ?>發信</a>//客戶E-MAIL的連接 <? echo $name ?>的QQ號碼是<? echo $qq ?>//顯示客戶的QQ號碼 <? echo $name ?>的IP地址為<? echo $ip ?>' //顯示客戶的IP地址 <a href='http://www.aoyou183.cn/bcjs/reply.php?time=<? echo $datetime ?>'>回復</a>//留言回復的連接語句 <a href='http://www.aoyou183.cn/bcjs/del.php?time=<? echo $datetime ?>'>刪除</a>//留言刪除的語句(以客戶留言時間$datetime作為刪除標識) <br> <? if ($number == $num-1)//如果數組的單元號等于總留言數減一(因為單元號以零開始的,所以這意味著這是最后一條留言) { break;//跳出循環 } $number = $number + 1; //數組單元號加1 }//循環結束符 } if ($page <> 1)//如果當前頁面數碼號不等于1 { $back = $page - 1;//當前頁面數碼號減1,并將此值賦予變量$back echo '<a href=index.php?page=1>第一頁</a>';//顯示第一頁的連接 echo ' <a href=index.php?page=$back>上一頁</a>' ;當前頁面數碼號等于$back,并顯示其連接 } if ($page <> $total)//如果當前頁面數碼號不等于總頁數號(最后一頁數碼號) { $next = $page + 1;//當前頁面數碼號加1并賦予變量$next echo ' <a href=index.php?page=$next>下一頁</a>' ;//顯示下一頁連接 echo ' <a href=index.php?page=$total>最后一頁</a>'; 顯示最后一頁連接 } echo '頁數:$page / $total';//顯示當前頁面數碼號和顯示最后一頁數碼號 echo '共有 $num 條留言';//顯示留言數信息 } else { echo '<center>當前沒有任何留言!</center>';//如果文件內容為空則顯示的信息 } else { echo '<center>數據文件丟失,請聯系管理員!或發布留言重新建立數據文件!</center>';//如果文件不存在顯示的信息 }
3、數據修改程序段
$list=file('gb.dat');//讀取整個gb.dat文件到數組$list,數組每一個元素為一條留言($list[0]是第一條留言的數據、$list[1]是第一條留言的數據..... $n=count($list);//計算$list內容里的留言總數,并賦予變量$n if ($n>0){ //如果留言數大于0$fp=fopen('gb.dat','w');//則以只寫模式打開文件gb.dat $gb_reply=encode($gb_reply); for ($i=0;$i<$n;$i++) {//進入循環 if(eregi($ttime,$list[$i])){//將送來發留言時間$ttime與數組單元$list里內容進行字串匹配比較 $f=explode(' ',$list[$i]);//如果找到匹配,就以' '作為分隔符,切開留言信息$list[$i](第$i條留言),并將這些數據賦予數組$f $f[9]=$gb_reply;//將$f[9](留言信息最后一條數據)用$gb_reply(回復內容)代替。 $list[$i]=$f[0].' '.$f[1].' '.$f[2].' '.$f[3].' '.$f[4].' '.$f[5].' '.$f[6].' '.$f[7].' '.$f[8].' '.$f[9].'n'; //將數組單元$list[$i]的內容用數組$f加上分隔符' '代替(其中$f[9]是修改了的新數據)。 break;//跳出循環 } }//循環結束符 } FOR($i=0;$i<=$n;$i++){//進入循環 fwrite($fp,$list[$i]);//將數組$list的每個單元為一行,寫入文件gb.dat }//循環結束符 fclose($fp);//關閉文件 showmessage('回復成功!','index.php');//回復成功,自動返回主界面。
4、數據刪除程序段
$list=file('gb.dat');//讀取整個gb.dat文件到數組$list,數組每一個元素為一條留言($list[0]是第一條留言的數據、$list[1]是第一條留言的數據..... $n=count($list);//計算$list內容里的留言總數,并賦予變量$n if ($n>0){//如果留言數大于0 $fp=fopen('gb.dat','w');//則以只寫模式打開文件gb.dat for ($i=0;$i<$n;$i++) {//進入循環 if(eregi($ttime,$list[$i])){//將發送過來發留言時間$ttime與數組$list[$i]里的字串進行匹配比較 $list[$i]='';//如果匹配成功,則將$list[$i]清空(達到刪除的目的) break;//跳出循環 } }//循環結束符 FOR($i=0;$i<=$n;$i++){//進入循環 fwrite($fp,$list[$i]);//將數組$list的每個單元為一行,寫入文件gb.dat } //循環結束符 fclose($fp);//關閉文件 showmessage('刪除成功!','index.php');//刪除成功,自動返回主界面。 }
5、數據查詢程序段
<form action='search.php' method='post'> <font color='#0099CC' size='2'>搜索關鍵字: <input name='found' type='text' size='12'> <input name='submit' type='image' src='http://www.aoyou183.cn/bcjs/image/search.gif' alt='留言搜索'> </font></td></tr> </table> </form> ////////////////////////////////上面是搜索表單語句段 <? $id=0; $list=file('gb.dat');//讀取整個gb.dat文件到數組$list,數組每一個元素為一條留言($list[0]是第一條留言的數據、$list[1]是第一條留言的數據..... $n=count($list);//計算$list內容里的留言總數,并賦予變量$n $found=trim($found); if (!$found){ //如果$found為假 echo '<center>您沒有輸入任何關鍵字!</center>';//作相關顯示 } else { if($n>0){//如果留言數大于0 for ($i=0;$i<$n;$i++) {//進入循環 if(eregi($found,$list[$i])){//輸入的關鍵字與數組$list[$i]里的字串進行匹配比較 $row=explode(' ',$list[$i]); $id=1; //如果找到匹配,就以' '作為分隔符,切開留言信息$list[$i](第$i條留言),并將這些數據賦予數組$row.并將變量$id賦予1,以便作為是否找到匹配的判斷。 list($ip,$datetime,$name,$email,$home,$face,$qq,$head,$text,$reply)=$row;//將數組$row里的單元數據按順序賦予括號里的變量 ?> <img src=<? echo $head ?> >//顯示客戶形象圖片 <br> <font color='#0099CC'>昵稱【<? echo $name ?><font size='2'>】<br>//顯示客戶名 發表于:<? echo $datetime ?>//顯示留言發表時間 <br> <img src=<? echo $face ?>>//顯示客戶留言表情圖片 <? echo $name ?>說:<? echo $text; ?>//顯示客戶留言內容 <br> <? echo $reply ?>//顯示回復內容 <br> <a href='http://www.aoyou183.cn/bcjs/<? echo $home ?>' target='_blank'>訪問<? echo $name ?>的主頁</a>//客戶主頁的超連接 <a href='mailto:<? echo $email ?>'>給<? echo $name ?>發信</a>//客戶E-MAIL的連接 <? echo $name ?>的QQ號碼是<? echo $qq ?>//顯示客戶的QQ號碼 <? echo $name ?>的IP地址為<? echo $ip ?>' //顯示客戶的IP地址 <a href='http://www.aoyou183.cn/bcjs/reply.php?time=<? echo $datetime ?>'>回復</a>//留言回復的連接語句 <a href='http://www.aoyou183.cn/bcjs/del.php?time=<? echo $datetime ?>'>刪除</a>//留言刪除的語句(以客戶留言時間$datetime作為刪除標識) <br> <? } }//循環結束符 }} if($id==0){ echo '<center>沒有找到與關鍵字匹配的留言!</center>';}//如果$id=0則表示沒找到匹配,顯示相關提示 ?>