- <?
- /*
- This TextData Class txtTbl writen by ridge.jiang [email=mostone@hotmail.com]mostone@hotmail.com[/email] and finished in 2003.01.01
- Your can copy and use it without agreedment,It\'s free. But you can\'t use it for busness using.
- You are also wellcome to modify this code in your mind. Thank for your work and tell me.
- This class is for small information database so like classmater databse,they are less than 300 recorders.
- If your want store and opreat more than 300 recorders,It\'s recommandly to use SQL server.
- Your may acess the Instance of this Class with bellow function,there recommandly Do NOT use
- inner var and function,because that\'s unsafe.
- create()
- drop()
- open()
- close()
- eof()
- bof()
- prev()
- next()
- first()
- end()
- fieldsCount()
- getValue()
- setValue()
- display()
- location()
- recNO()
- recCount()
- del()
- append()
- */
- define ("tblPath",".\\\\");
- define ("exten",".php");
- define ("fileHead","<? echo \\"You are wellcome!\\"?".">This file only for class txtTbl");
- class txtTbl {
- var $innerName=""; //数据库名称
- var $innerCount; //数据库记录数目
- var $innerFields; //数据库字段列表数组
- var $inner_F_Count; //数据库字段数目
- var $fullName; //完整的文件名
- var $isModify = false; //当前记录是否被修改
- var $fileModify = false; //数据库是否被修改
- var $innerRecorders; //数据库记录数组
- var $curLine; //当前记录号
- var $curArray; //当前行数组
- var $stringDel; //保存被删除记录
- var $sprt1; //数据库记录间的分隔符
- var $sprt2; //数据库字段间的分隔符
- var $innerBof = true;
- var $innerEof = false;
- function create($tblName,$fields,$sprt1="<---txtTbl--->\\n",$sprt2="<---txtTbl--->"){
- if (empty($tblName)){
- echo "The textDateBase file name not appoint.";
- return false;
- }
- $fullName = tblPath.$tblName.exten;
- if (file_exists($fullName)){
- echo "The textDateBase file is already exist.";
- return false;
- }
- if(empty($fields)){
- echo "The fields list Array is invalid.";
- return false;
- }
- $cont = implode($sprt2,$fields);
- $cont = fileHead."\\n".$cont;
- $fp = fopen($fullName,"w");
- fwrite($fp,$cont);
- fclose($fp);
- return true;
- }
- function drop($tblName,$sprt1="<---txtTbl--->\\n",$sprt2="<---txtTbl--->"){
- if (empty($tblName)){
- echo "The textDateBase file name not proveid.";
- return false;
- }
- if (!empty($this->innerName)){
- echo "Current file not closed,Please close it and try again.";
- return false;
- }
- $fullName = tblPath.$tblName.exten;
- if (!file_exists($fullName)){
- echo "The textDateBase file not exist.";
- return false;
- }
- $fp = fopen($fullName,"r");
- if (!feof($fp)){
- $readFromFile = fgets($fp);
- }
- if ($readFromFile!=fileHead."\\n"){
- fclose($fp);
- echo "not a valid textDataBase file.(the head is invalid.)"."\\n";
- return false;
- }
- $readFromFile = "";
- if (!feof($fp)) $readFromFile.= fgets($fp);
- fclose($fp);
- $readFromFile = trim($readFromFile);
- if (empty($readFromFile)){
- echo "not a valid textDataBase file.(can\'t find fields define.)";
- return false;
- }
- $cont = fileHead."\\n".$readFromFile;
- $fp = fopen($fullName,"w");
- fwrite($fp,$cont);
- fclose($fp);
- return true;
- }
- function open($tblName,$sprt1="<---txtTbl--->\\n",$sprt2="<---txtTbl--->"){
- if (empty($tblName)){
- echo "The textDateBase file name not proveid.";
- return false;
- }
- if (!empty($this->innerName)){
- echo "Current file not closed,Please close it and try again.";
- return false;
- }
- $this->fullName = tblPath.$tblName.exten;
- if (!file_exists($this->fullName)){
- echo "The textDateBase file not exist.";
- return false;
- }
- $fp = fopen($this->fullName,"r");
- if (!feof($fp)){
- $readFromFile = fgets($fp);
- }
- if ($readFromFile!=fileHead."\\n"){
- fclose($fp);
- echo "not a valid textDataBase file.(the head is invalid.)"."\\n";
- return false;
- }
- $readFromFile = "";
- while (!feof($fp)) $readFromFile.= fgets($fp);
- fclose($fp);
- $readFromFile = trim($readFromFile);
- if (empty($readFromFile)){
- echo "not a valid textDataBase file.(can\'t find fields define.)";
- return false;
- }
- $this->innerRecorders = explode($sprt1,$readFromFile);
- $this->innerCount = count($this->innerRecorders) - 1;
- $this->innerFields = explode($sprt2,$this->innerRecorders[0]);
- $this->innerFieldsCount = count($this->innerFields);
- $this->innerName = $tblName;
- $this->sprt1 = $sprt1;
- $this->sprt2 = $sprt2;
- if ($this->innerCount==0){
- $this->curLine = 0;
- $this->innerEof = true;
- }else{
- $this->curLine = 1;
- // if ($this->innerCount==1) $this->innerEof = true;
- if (!$this->initRec()) return false;
- }
- return true;
- }
- function close(){
- if (empty($this->innerName)) return true;
- //save modify
- $isModify= false;
- if ($this->isModify){
- $this->saveModify();
- $isModify= true;
- }
- if(isset($this->stringDel)){
- $isModify= true;
- $delNo= explode(",",$this->stringDel);
- foreach($delNo as $no){
- $no= (integer) $no;
- unset($this->innerRecorders[$no]);
- }
- }
- if ($isModify||$this->fileModify){
- $recorders= implode($this->sprt1,$this->innerRecorders);
- $recorders= fileHead."\\n".$recorders;
- $fp = fopen($this->fullName,"w");
- fwrite($fp,$recorders);
- fclose($fp);
- }
- $this->innerName="";
- unset($this->innerRecorders);
- unset($this->curArray);
- }
- function next(){
- if ((!$this->innerEof)&&(!empty($this->innerName))){
- if($this->curLine==$this->innerCount){
- $this->innerEof = true;
- return true;
- }
- $this->saveModify();
- $this->curLine++;
- if ($this->innerBof) $this->innerBof = false;
- $this->initRec();
- }
- return false;
- }
- function prev(){
- if ((!$this->innerBof)&&(!empty($this->innerName))){
- $this->saveModify();
- $this->curLine--;
- if ($this->curLine == 1)
- $this->innerBof = true;
- if ($this->innerEof) $this->innerEof = false;
- $this->initRec();
- }
- }
- function first(){
- if ($this->innerBof||empty($this->innerName))
- return false;
- $this->saveModify();
- $this->curLine = 1;
- $this->innerBof= true;
- $this->innerEof = false;
- $this->initRec();
- }
- function end(){
- if ($this->innerEof||empty($this->innerName))
- return false;
- $this->saveModify();
- $this->curLine = $this->innerCount;
- $this->innerEof= true;
- $this->innerBof = false;
- $this->initRec();
- }
- function eof(){
- if (empty($this->innerName)){
- return false;
- }else return $this->innerEof;
- }
- function bof(){
- if (empty($this->innerName)){
- return true;
- }else return $this->innerBof;
- }
- function recNo(){
- return $this->curLine;
- }
- function recCount(){
- return $this->innerCount;
- }
- function fieldsCount(){
- if (empty($this->innerName)){
- return false;
- }else return $this->inner_F_Count;
- }
- function getValue($field){
- if ($this->curLine==0||empty($this->innerName)){
- echo "Can\'t read current record,maybe not in use or no record.";
- return false;
- }
- $field= $this->chkField($field);
- if ($field==-1){
- return false;
- }
- return $this->curArray[$field];
- }
- function setValue($field,$value){
- if ($this->curLine==0||empty($this->innerName)){
- echo "Can\'t read current record,maybe not in use or no record.";
- return false;
- }
- $field= $this->chkField($field);
- if ($field==-1){
- return false;
- }
- $this->curArray[$field]= $value;
- $this->modify= true;
- }
- function display($shownon=0,$sprt1="<td>",$sprt2="</td>",$sprt3="<tr>",$sprt4="</tr>"){
- echo $sprt3;
- foreach($this->curArray as $v){
- if($shownon==1&&empty($v)) $v= "noValue";
- echo $sprt1.$v.$sprt2;
- }
- echo $sprt4;
- }
- function location($field,$keyValue){
- $field=$this->chkField($field);
- if ($field==-1) return false;
- for($i=$this->curLine;$i<=$this->innerCount;$i++){
- if($this->curArray[$field]==$keyValue){
- return true;
- }
- $this->next();
- }
- return false;
- }
- function del($recNo=-1){
- if($this->curLine==0) return false;
- $vartype= gettype($recNo);
- if($vartype!="integer"){
- echo "del error:check ur para type.";
- return false;
- }
- if ($recNo==-1){
- $recNo=$this->curLine;}
- elseif ($recNo>$this->innerCount||$recNo<1){
- echo "del error:out over the rang.";
- return false;
- }
- if (!$this->chkDel($recNo)){
- if(isset($this->stringDel)){
- $this->stringDel.=(\',\'.$recNo);
- }else $this->stringDel = (string) $recNo;
- }else return false;
- }
-
- function append($fields=""){
- $this->saveModify();
- for($i=1;$i<=$this->innerFieldsCount;$i++)
- $newRec[] = "";
- if(!empty($fields)){
- foreach($fields as $k=>$v){
- $k= $this->chkField($k);
- if ($k==-1){
- return false;
- }
- $newRec[$k]= $v;
- }
- }
- $this->innerCount++;
- $this->curLine = $this->innerCount;
- $this->innerBof = false;
- $this->innerEof = true;
- unset($this->curArray);
- $this->curArray = &$newRec;
- $this->isModify = true;
- }
- //保存修改
- function saveModify(){
- if($this->isModify){
- $this->innerRecorders[$this->curLine]= implode($this->sprt2,$this->curArray);
- $this->isModify = false;
- $this->fileModify= true;
- }
- }
- //当指针发生变化时,初始化当前记录数组
- function initRec(){
- $this->curArray = explode($this->sprt2,$this->innerRecorders[$this->curLine]);
- if (count($this->curArray)!=$this->innerFieldsCount){
- echo "The Current Recorder fields count unequal to Table\'s.\\n File will close.";
- $this->close();
- return false;
- }
- return true;
- }
- //输出当前记录信息,设计为调试用
- function ddisplay(){
- if ($this->innerCount==0) return false;
- foreach($this->innerFields as $v) echo $v."----";
- echo "<br>";
- foreach($this->curArray as $v) echo $v."---";
- }
- //检查记录是否已被删除
- function chkDel($key){
- if (empty($key)&&$key!=0){
- echo "the key not appoint.";
- return false;
- }
- if (!isset($this->stringDel)){
- return false;
- }
- if (ereg("(^|,)".$key."(,|$)",$this->stringDel)){
- return true;
- }
- return false;
- }
- //检查提交的字段名是否合法.
- function chkField($field){
- if (empty($field)&&($field!=0)){
- echo "the field not appoint.";
- return -1;
- }
- $vartype = gettype($field);
- switch ($vartype) {
- case "integer":
- if ($field>=$this->innerFieldsCount){
- echo "the field is large than fieldscount";
- return -1;
- }elseif($field<0){
- echo "the field is less than 0";
- return -1;
- }
- return $field;
- case "string":
- foreach ($this->innerFields as $k=>$v) if ($field==$v) return $k;
- echo "the field name not found.";
- return -1;
- default:
- echo "the field is invalid.";
- return -1;
- }
- }
- }
- ?>
复制代码
|