这篇文章是自己从国外网站翻译过来并加了些注释的
<?php // 文件存放目录 $dbm = dbmopen( "guestbook", "c"); // 这个目录必须有写入的权限 // 文件头 $field_separator = ":" ; $fields = array ( "topic", "talker", "email","body");
//显示单条记录 function print_one_record($w_mykey,$w_fields) {
global $fields;
if( $w_mykey)print( "<H3>Modify Record</H3>\n");
print( "<FORM NAME=entdetails ACTION=\"$PHP_SELF\" METHOD=\"POST\">\n");
print( "<TABLE BORDER=\"0\" CELLSPACING=\"1\" CELLPADDING=\"0\">\n");
/* 假如没有定义主键的话的话,则。。。*/
if ( $w_mykey )
print( "<TR><TH><B>Key</B></TH>\n<TH>".
"<INPUT NAME=\"mykey\" TYPE=\"HIDDEN\" VALUE=\"$w_mykey\"><B>".
"$w_mykey</B></TH></TR>\n"); else
print( "<TR><TH><B>Key</B></TH>\n<TD>".
"<INPUT NAME=\"mykey\" TYPE=\"TEXT\" VALUE=\"\" SIZE=35>".
"</TD>\n</TR>\n"); for ($I=0;$I < count($fields) ; $I++) {
print( "<TR>\n".
"<TH>$fields[$I]</TH>\n".
"<TD>".
"<INPUT NAME=\"$fields[$I]\" TYPE=\"TEXT\" VALUE=\"");
if ($w_fields[$I] != "")
print ( "$w_fields[$I]");
else
print ( "");
print( "\" SIZE=35></TD>\n".
"</TR>\n");
}
print( "<TR><TD COLSPAN=\"2\">");
print( "<INPUT TYPE=\"RESET\" NAME=\"reset\" VALUE=\"Clear\">\n");
if ( !$w_mykey ) {
print( "<INPUT TYPE=\"SUBMIT\" NAME=\"sub\" VALUE=\"Add\">\n");
} else {
print( "<INPUT TYPE=\"SUBMIT\" NAME=\"del\" VALUE=\"Delete\">\n");
print( "<INPUT TYPE=\"SUBMIT\" NAME=\"sub\" VALUE=\"Update\">\n");
}
print ( "</TD></TR></TABLE></FORM>\n");
return;
} function verify_data(&$w_mykey,&$w_fields){
/* 发现错误时报告给用户 */
global $field_separator;
global $fields;
chop($w_mykey); ereg_replace( "\n", "",$w_mykey); ereg_replace($field_separator, " ",$w_mykey);
for ($I=0;$I < count($fields) ; $I++) {
chop($w_fields[$I]);ereg_replace( "\n", "",$w_fields[$I]); ereg_replace($field_separator, " ",$w_fields[$I]);
}
// 自定义检查错误例程
if ( $w_mykey == "") {
$err = 1;
echo "ERROR : Key cannot be null\n"; }
return $err; }
/* 开始时显示所有记录 */
function print_front_page($mydbm) {
/* may be some header here? */
global $field_separator;
global $fields;
print( "<small><I>Click on # to edit/delete.</I></small>\n");
print( "<TABLE WIDTH=\"100%\" BORDER=\"0\" CELLSPACING=\"1\"".
"CELLPADDING=\"0\">\n");
print( "<TR><TH><B>#</B></TH><TH><B>Key</B></TH>\n"); for ($I=0;$I < count($fields) ; $I++)
print( "<TH><B>$fields[$I]</B></TH>\n");
print( "</TR>\n");
$mykey = dbmfirstkey($mydbm);
$recno=0;
while ($mykey) {
$record[$mykey]=dbmfetch($mydbm,$mykey);
$mykey = dbmnextkey($mydbm,$mykey);
}
if ( count($record) > 0 ) {
asort($record);
for(reset($record);$mykey=key($record); next($record)){
$recno++;
$w_fields= explode($field_separator,$record[$mykey]);
print( "<TR><TH><A HREF=\"$PHP_SELF?mykey=$mykey\"><B>$recno</B></A></TH>\n");
print( "<TD><B>$mykey</B></TH>\n");
for ($I=0;$I < count($fields) ; $I++)
print( "<TD> $w_fields[$I] </TD>\n");
print( "</TR>\n");
} }
print( "</TABLE>\n");
print( "<A NAME=\"addit\"></A><BR><BR><BR><H3>Add Record</H3>\n"); print_one_record( "", ""); return; }
// 主程序段 // 限制页面有效时间
header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header( "Last-Modified: " . Gmdate( "D, d M Y H:I:s") . "GMT"); header( "Cache-Control: no-cache, must-revalidate"); header( "Pragma: no-cache");
/*
* 如果不存在主键则只显示增加表单 * 如果存在主键则显示记录和增加记录表单
* 如果是动作是增加/删除数据则回到第一页 */
$to_print_frontpage = 1;
if ( $del ) $action = "delete";
if ( $sub == "Add" ) $action = "add";
if ( $sub == "Update" ) $action = "update";
if( $mykey ) {
for ($I=0;$I < count($fields) ; $I++)
$w_fields[$I] = ${$fields[$I]};
if( $action== "update") {
/* 修改数据 */
if (0==verify_data($mykey,$w_fields)) {
$record=implode($field_separator,$w_fields);
dbmreplace($dbm,$mykey,$record);
} else {
print_one_record($mykey,$w_fields);
$to_print_frontpage=0;
}
} elseif ( $action== "delete") {
/* 删除数据 */
if (dbmdelete($dbm,$mykey)){
print( "<B>Record for $mykey could not be deleted</B>\n");
}
} elseif ( $action== "add") {
/* 插入数据 */
/* 最好先校验数据*/
if (0==verify_data($mykey,$w_fields)) {
$record=implode($field_separator,$w_fields);
if (1==dbminsert($dbm,$mykey,$record)){
print( "<B>Key $mykey already exists with these values</B>\n");
$record=dbmfetch($dbm,$mykey);
$w_fields= explode($field_separator,$record);
print_one_record($mykey,$w_fields);
$to_print_frontpage=0;
}
} else {
print_one_record($mykey,$w_fields);
$to_print_frontpage=0;
}
} else {
/* 没有任何操作,则显示所有记录 */
$record=dbmfetch($dbm,$mykey);
$w_fields= explode($field_separator,$record);
print_one_record($mykey,$w_fields);
$to_print_frontpage=0;
}
}
if( $to_print_frontpage==1 )print_front_page($dbm); dbmclose($dbm); ?> |
|