PHP實(shí)現(xiàn)對(duì)文本數(shù)據(jù)庫(kù)的常用操作方法實(shí)例演示
PHP可以實(shí)現(xiàn)對(duì)文本數(shù)據(jù)庫(kù)的數(shù)據(jù)的顯示、加入、修改、刪除、查詢等五大基本操作。
我們以一個(gè)留言本程序?yàn)槔?,?jiǎn)述一下PHP實(shí)現(xiàn)對(duì)文本數(shù)據(jù)庫(kù)的數(shù)據(jù)顯示、加入、修改、刪除、查詢五大基本操作的方法。
此文本數(shù)據(jù)庫(kù)共有字段10個(gè):客戶IP、發(fā)言時(shí)間、客戶名、客戶EMAIL、客戶主頁(yè)地址、留言表情圖片名、客戶QQ、客戶形象圖片、留言內(nèi)容、管理員回復(fù)內(nèi)容。
1、加入數(shù)據(jù)程序:
$date=date("Y-m-d H:i:s");//取得系統(tǒng)時(shí)間
$ip = $HTTP_SERVER_VARS[REMOTE_ADDR]; //取得發(fā)言的IP地址
$text=encode($gb_text);//去掉留言內(nèi)容后面的空格.
$fp=fopen("gb.dat","a");//以只寫模式打開(kāi)gb.dat文本文件,文件指針指向文件尾部.
$str=$ip."|".$date."|".$gb_name."|".$gb_email."|".$gb_home."|".$face."|".$gb_qq."|".$head."|".$text."|".$reply." ";//將所有留言的數(shù)據(jù)賦予變量$str,"|"的目的是用來(lái)今后作數(shù)據(jù)分割時(shí)的數(shù)據(jù)間隔符號(hào)。
fwrite($fp,$str);//將數(shù)據(jù)寫入文件
fclose($fp);//關(guān)閉文件
showmessage("留言成功!","index.php","3");//留言成功,3秒后自動(dòng)返回主界面。
其中的$gb_name 、$gb_email、$gb_home、$face、$gb_qq、$head、$gb_text、$reply是由發(fā)言表單傳過(guò)來(lái)的數(shù)據(jù)。
2、顯示數(shù)據(jù)程序:
<?
if (file_exists("gb.dat")){//檢測(cè)文件是否存在
$array=file("gb.dat");//將文件全部?jī)?nèi)容讀入到數(shù)組$array
$arr=array_reverse($array);//將$array里的數(shù)據(jù)安行翻轉(zhuǎn)排列(即最后一行當(dāng)?shù)谝恍?,依此類推)讀入數(shù)組$arr的每一個(gè)單元($arr[0]...)。
$num=count($array);//獲取數(shù)組$array里的信息數(shù)(一行為一條信息)
if ($num>0){//如果信息數(shù)大于零(即文本數(shù)據(jù)庫(kù)不為空)
$total=ceil($num/$pagesize);//計(jì)算總頁(yè)數(shù)(取最大整數(shù),即凡有小數(shù)點(diǎn)都進(jìn)一取整,$pagesize為預(yù)設(shè)的每頁(yè)顯示的信息數(shù))
if($page<1){//如果當(dāng)前頁(yè)面數(shù)碼號(hào)小于1
$page=1;//則賦值為1
}
$number=($page-1)*$pagesize;//計(jì)算當(dāng)前所顯示第一個(gè)留言的數(shù)碼號(hào)(數(shù)碼號(hào)從零開(kāi)始,主要是達(dá)到與數(shù)組單元號(hào)對(duì)應(yīng)的目的)
for($i=0;$i<=$pagesize-1;$i++){//進(jìn)入循環(huán)
$row=explode("|",$arr[$number]);//以"|"作為分割符,分割數(shù)組$arr中每第$number個(gè)單元的數(shù)據(jù),并將這些數(shù)據(jù)賦予數(shù)組$rom
list($ip,$datetime,$name,$email,$home,$face,$qq,$head,$text,$reply)=$row;//將數(shù)組$row里的單元數(shù)據(jù)按順序賦予括號(hào)里的變量
?>
<img src=<? echo $head ?> >//顯示客戶形象圖片
<br>
<font color="#0099CC">昵稱【<? echo $name ?><font size="2">】<br>//顯示客戶名
發(fā)表于:<? echo $datetime ?>//顯示留言發(fā)表時(shí)間
<br>
<img src=<? echo $face ?>>//顯示客戶留言表情圖片
<? echo $name ?>說(shuō):<? echo $text; ?>//顯示客戶留言內(nèi)容
<br>
<? echo $reply ?>//顯示回復(fù)內(nèi)容
<br>
<a href="<? echo $home ?>" rel="external nofollow" target="_blank">訪問(wèn)<? echo $name ?>的主頁(yè)</a>//客戶主頁(yè)的超連接
<a href="mailto:<? echo $email ?>" rel="external nofollow" >給<? echo $name ?>發(fā)信</a>//客戶E-MAIL的連接
<? echo $name ?>的QQ號(hào)碼是<? echo $qq ?>//顯示客戶的QQ號(hào)碼
<? echo $name ?>的IP地址為<? echo $ip ?>" //顯示客戶的IP地址
<a href="reply.php?time=<? echo $datetime ?>" rel="external nofollow" >回復(fù)</a>//留言回復(fù)的連接語(yǔ)句
<a href="del.php?time=<? echo $datetime ?>" rel="external nofollow" >刪除</a>//留言刪除的語(yǔ)句(以客戶留言時(shí)間$datetime作為刪除標(biāo)識(shí))
<br>
<?
if ($number == $num-1)//如果數(shù)組的單元號(hào)等于總留言數(shù)減一(因?yàn)閱卧?hào)以零開(kāi)始的,所以這意味著這是最后一條留言)
{
break;//跳出循環(huán)
}
$number = $number + 1; //數(shù)組單元號(hào)加1
}//循環(huán)結(jié)束符
}
if ($page <> 1)//如果當(dāng)前頁(yè)面數(shù)碼號(hào)不等于1
{
$back = $page - 1;//當(dāng)前頁(yè)面數(shù)碼號(hào)減1,并將此值賦予變量$back
echo "<a href=index.php?page=1>第一頁(yè)</a>";//顯示第一頁(yè)的連接
echo " <a href=index.php?page=$back>上一頁(yè)</a>" ;當(dāng)前頁(yè)面數(shù)碼號(hào)等于$back,并顯示其連接
}
if ($page <> $total)//如果當(dāng)前頁(yè)面數(shù)碼號(hào)不等于總頁(yè)數(shù)號(hào)(最后一頁(yè)數(shù)碼號(hào))
{
$next = $page + 1;//當(dāng)前頁(yè)面數(shù)碼號(hào)加1并賦予變量$next
echo " <a href=index.php?page=$next>下一頁(yè)</a>" ;//顯示下一頁(yè)連接
echo " <a href=index.php?page=$total>最后一頁(yè)</a>"; 顯示最后一頁(yè)連接
}
echo "頁(yè)數(shù):$page / $total";//顯示當(dāng)前頁(yè)面數(shù)碼號(hào)和顯示最后一頁(yè)數(shù)碼號(hào)
echo "共有 $num 條留言";//顯示留言數(shù)信息
}
else {
echo "<center>當(dāng)前沒(méi)有任何留言!</center>";//如果文件內(nèi)容為空則顯示的信息
}
else {
echo "<center>數(shù)據(jù)文件丟失,請(qǐng)聯(lián)系管理員!或發(fā)布留言重新建立數(shù)據(jù)文件!</center>";//如果文件不存在顯示的信息
}
3、數(shù)據(jù)修改程序:
$list=file("gb.dat");//讀取整個(gè)gb.dat文件到數(shù)組$list,數(shù)組每一個(gè)元素為一條留言($list[0]是第一條留言的數(shù)據(jù)、$list[1]是第一條留言的數(shù)據(jù).....
$n=count($list);//計(jì)算$list內(nèi)容里的留言總數(shù),并賦予變量$n
if ($n>0){ //如果留言數(shù)大于0
$fp=fopen("gb.dat","w");//則以只寫模式打開(kāi)文件gb.dat
$gb_reply=encode($gb_reply);
for ($i=0;$i<$n;$i++) {//進(jìn)入循環(huán)
if(eregi($ttime,$list[$i])){//將送來(lái)發(fā)留言時(shí)間$ttime與數(shù)組單元$list里內(nèi)容進(jìn)行字串匹配比較
$f=explode("|",$list[$i]);//如果找到匹配,就以"|"作為分隔符,切開(kāi)留言信息$list[$i](第$i條留言),并將這些數(shù)據(jù)賦予數(shù)組$f
$f[9]=$gb_reply;//將$f[9](留言信息最后一條數(shù)據(jù))用$gb_reply(回復(fù)內(nèi)容)代替。
$list[$i]=$f[0]."|".$f[1]."|".$f[2]."|".$f[3]."|".$f[4]."|".$f[5]."|".$f[6]."|".$f[7]."|".$f[8]."|".$f[9]." "; //將數(shù)組單元$list[$i]的內(nèi)容用數(shù)組$f加上分隔符"|"代替(其中$f[9]是修改了的新數(shù)據(jù))。
break;//跳出循環(huán)
}
}//循環(huán)結(jié)束符
}
FOR($i=0;$i<=$n;$i++){//進(jìn)入循環(huán)
fwrite($fp,$list[$i]);//將數(shù)組$list的每個(gè)單元為一行,寫入文件gb.dat
}//循環(huán)結(jié)束符
fclose($fp);//關(guān)閉文件
showmessage("回復(fù)成功!","index.php");//回復(fù)成功,自動(dòng)返回主界面。
4、數(shù)據(jù)刪除程序:
$list=file("gb.dat");//讀取整個(gè)gb.dat文件到數(shù)組$list,數(shù)組每一個(gè)元素為一條留言($list[0]是第一條留言的數(shù)據(jù)、$list[1]是第一條留言的數(shù)據(jù).....
$n=count($list);//計(jì)算$list內(nèi)容里的留言總數(shù),并賦予變量$n
if ($n>0){//如果留言數(shù)大于0
$fp=fopen("gb.dat","w");//則以只寫模式打開(kāi)文件gb.dat
for ($i=0;$i<$n;$i++) {//進(jìn)入循環(huán)
if(eregi($ttime,$list[$i])){//將發(fā)送過(guò)來(lái)發(fā)留言時(shí)間$ttime與數(shù)組$list[$i]里的字串進(jìn)行匹配比較
$list[$i]="";//如果匹配成功,則將$list[$i]清空(達(dá)到刪除的目的)
break;//跳出循環(huán)
}
}//循環(huán)結(jié)束符
FOR($i=0;$i<=$n;$i++){//進(jìn)入循環(huán)
fwrite($fp,$list[$i]);//將數(shù)組$list的每個(gè)單元為一行,寫入文件gb.dat
} //循環(huán)結(jié)束符
fclose($fp);//關(guān)閉文件
showmessage("刪除成功!","index.php");//刪除成功,自動(dòng)返回主界面。
}
5、數(shù)據(jù)查詢程序:
<form action="search.php" method="post">
<font color="#0099CC" size="2">搜索關(guān)鍵字:
<input name="found" type="text" id="found" style="background-color:#FFFFFF; color:#8888AA; border: 1 double #3399CC" size="12">
<input name="submit" type="image" src="image/search.gif" alt="留言搜索">
</font></td>
</tr>
</table>
</form>
////////////////////////////////上面是搜索表單語(yǔ)句段
<?
$id=0;
$list=file("gb.dat");//讀取整個(gè)gb.dat文件到數(shù)組$list,數(shù)組每一個(gè)元素為一條留言($list[0]是第一條留言的數(shù)據(jù)、$list[1]是第一條留言的數(shù)據(jù).....
$n=count($list);//計(jì)算$list內(nèi)容里的留言總數(shù),并賦予變量$n
$found=trim($found);
if (!$found){ //如果$found為假
echo "<center>您沒(méi)有輸入任何關(guān)鍵字!</center>";//作相關(guān)顯示
}
else {
if($n>0){//如果留言數(shù)大于0
for ($i=0;$i<$n;$i++) {//進(jìn)入循環(huán)
if(eregi($found,$list[$i])){//輸入的關(guān)鍵字與數(shù)組$list[$i]里的字串進(jìn)行匹配比較
$row=explode("|",$list[$i]); $id=1; //如果找到匹配,就以"|"作為分隔符,切開(kāi)留言信息$list[$i](第$i條留言),并將這些數(shù)據(jù)賦予數(shù)組$row.并將變量$id賦予1,以便作為是否找到匹配的判斷。
list($ip,$datetime,$name,$email,$home,$face,$qq,$head,$text,$reply)=$row;//將數(shù)組$row里的單元數(shù)據(jù)按順序賦予括號(hào)里的變量
?>
<img src=<? echo $head ?> >//顯示客戶形象圖片
<br>
<font color="#0099CC">昵稱【<? echo $name ?><font size="2">】<br>//顯示客戶名
發(fā)表于:<? echo $datetime ?>//顯示留言發(fā)表時(shí)間
<br>
<img src=<? echo $face ?>>//顯示客戶留言表情圖片
<? echo $name ?>說(shuō):<? echo $text; ?>//顯示客戶
- python處理PHP數(shù)組文本文件實(shí)例
- php一維二維數(shù)組鍵排序方法實(shí)例總結(jié)
- php獲取隨機(jī)數(shù)組列表的方法
- php合并數(shù)組中相同元素的方法
- PHP獲取數(shù)組中重復(fù)最多的元素的實(shí)現(xiàn)方法
- php使用session二維數(shù)組實(shí)例
- php中count獲取多維數(shù)組長(zhǎng)度的方法
- PHP函數(shù)實(shí)現(xiàn)分頁(yè)含文本分頁(yè)和數(shù)字分頁(yè)
- PHP封裝分頁(yè)函數(shù)實(shí)現(xiàn)文本分頁(yè)和數(shù)字分頁(yè)
- php數(shù)組保存文本與文本反編成數(shù)組實(shí)例
相關(guān)文章
完美解決php 導(dǎo)出excle的.csv格式的數(shù)據(jù)時(shí)亂碼問(wèn)題
下面小編就為大家?guī)?lái)一篇完美解決php 導(dǎo)出excle的.csv格式的數(shù)據(jù)時(shí)亂碼問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
php實(shí)現(xiàn)以只讀方式打開(kāi)文件的方法
這篇文章主要介紹了php實(shí)現(xiàn)以只讀方式打開(kāi)文件的方法,實(shí)例分析了php中fopen函數(shù)的功能及使用技巧,需要的朋友可以參考下2015-03-03
關(guān)于PHP5和PHP7中數(shù)組實(shí)現(xiàn)方式的比較總結(jié)
PHP7比PHP5性能提升了兩倍,全面一致的64位支持,以前的許多致命錯(cuò)誤,現(xiàn)在改成拋出異常,下面這篇文章主要給大家介紹了關(guān)于PHP5和PHP7中數(shù)組實(shí)現(xiàn)方式比較的相關(guān)資料,需要的朋友可以參考下2021-09-09

