后给出用户电话的
程序:
----------------------------------------------------
<?
if(isset($userid)){
$data=dbmopen("path","r");
if(dbmexists($data,$userid))echo $no=dbmfetch($data,$userid);
else echo "UserID Error!";
dbmclose($data);
}else{
?>
请输入您的用户名:
<form action=<?echo$PHP_SELF;?>
<input type="text" name="userid">
<input type="submit" name="submit"></form><?}?>
----------------------------------------------------
五、用DBM做有序数据库:
因为DBM没有对数据进行排序,所以对于一些按一定顺序输出的程序(如刚才的
程序改为显示所有用户的电话)则比较棘手,需要人为排序,下面笔者给出两种方法:
1、排序数据法:在这种方法里我们专门用一个key所对应的值来记录顺序,那个key我们人为命名为sort,sort对应值如下:
data1''s key|data2''s key|data3''s key|..|data n''s key
其中data n''s dey的长度需要一定(笔者使用的是时间方法,如下
程序可以生成key:)
----------------------------------------------------
function getkey(){
$date=date("ymdHis");
return $date;
}
----------------------------------------------------
这样用getkey()可以得到一个类似001203114950的12位key,而每个key就对应它自己的值(在这里用户的电话);而用substr($sort,$i*13,12)就可以读出第i个用户的key,下面是显示列表的代码:
----------------------------------------------------
<?
//首先要知道有多少个用户,可以专门开一个num来记录
$data=dbmopen("path","r"); //打开数据库
$sort=dbmfetch($data,"sort"); //读取sort
for($i=0;$i<$totaluser;$i++){
$key=substr($sort,$i*13,12); //安顺序取得key
$telno=dbmfetch($data,$key); //读出key对应的value
echo $i+1." User''s TelNO is ".$telno."<br>";
}
dbmclose($data);
?>
----------------------------------------------------
2、数组排序法:在这里感谢无伤兄,是他让笔者想起用数组来排序的。数组排序的基本原理是将整个DBM数据库的每条key读入数组,然后根据每个key的大小使用usort()等函数排序然后输出。
因为是对key的大小排序,所以key的长度没有什么限制,只要保证后加入的key大于先加入的key就可以实现先显示后加入的人,这里用time()来作为key。
下面是列表代码:
----------------------------------------------------
$data=dbmopen("path","r"); //打开数据库
$i=1;
for($key=dbmfirstkey($data);$key;$key=dbmnextkey($data,$key)){
$sort[$i]=$key;
$i++;
} //遍历取得所有的key
usort($sort); //安大小排序
for($i=0;$i<count($sort);$i++)
echo $i+1." User''s TelNO is ".dbmfetch($data,$sort[$i])."<br>";
dbmclose($data);
----------------------------------------------------
以上两种方法在运行时占用内存(用于排序)第一种比第二种要大一点,不过对于运算量来讲,第一种方法则要小于第二种,至于想用哪种方法就随你意了(如果你兴趣,可以试试两者的CPU占用率)。
笔者在经过了N次(N>50)实验后完成了这篇文章仅以此献给穷苦的仍在用txt的朋友们相信也不是所有看CN的人都有自己的主机!如果有什么不明白的,来这里看看:www.zphp.com。
笔者不是什么高手,不过因为几乎找不到在PHP上使用DBM数据库的资料(包括英文
资料,不过Perl方面的却不少)。