Location: PHPKode > scripts > dbff > dbff/contacts_sample.php
<?php
/*  Name: contacts_sample.php
	Author: Jerry Mattsson
	Created oct-06 Jerry Mattsson, www.Timehole.com
	Functions for a simple contact list and edit form using dbff
	nov-06, Added javascript field check to edit form.
        If you do not want this, remove the require row for "dbff_jsChk.php"
        and the "Js check functions" code in the form.
*/
require_once "dbff.php";
require_once "dbff_jsChk.php";

$action = 'list';
if (isset($_POST['cid']))     $cont_id = $_POST['cid'];
if (isset($_POST['update']))  $action = 'update';
if (isset($_POST['edit']))    $action = 'edit';
if (isset($_POST['delete']))  $action = 'delete';
if (isset($_POST['add']))     $action = 'add';

$contacts_def = array ( 'TABLE_NAME'=>'CONTACTS', 'FILE_NAME'=>'contacts',
 'cid'		   =>array('size'=>10, 'type'=>'INT', 'pk'=>'sequence'),
 'first_name'	   =>array('size'=>60, 'chkNN'=>true),
 'last_name'	   =>array('size'=>60, 'chkNN'=>true),
 'address'	   =>array('size'=>100,'chkNN'=>true),
 'city'		   =>array('size'=>40, 'chkNN'=>true),
 'country'	   =>array('size'=>40),
 'mail'	           =>array('size'=>50, 'uk'=>true, 'type'=>'email','chkNN'=>true),
 'contact_info'	   =>array('size'=>60),
 'notes'	   =>array('size'=>200),
 'birth_date'	   =>array('size'=>16, 'type'=>'date'),
 'category'        =>array('size'=>1,  'upper'=>true, 'chkList'=>array ('P','B','O')), // Pers,Biz,Oth
 'status'	   =>array('size'=>1,  'chkNN'=>true, 'upper'=>true, 'chkList'=>array ('A','D','U')), // Active, Deleted, Unknown
 'last_contacted'  =>array('size'=>30, 'type'=>'DATETIME', 'default'=>'now'),
 'reg_date'        =>array('size'=>25, 'chkNN'=>true, 'type'=>'DATE','default'=>'now'));

$contacts             = new dbff;
$contacts->recdef     = $contacts_def; // $contacts->trace=true;
$contacts->read();

reset($contacts->fldnames);
   while (list ($pos, $fld_name) = each ($contacts->fldnames)) {
      if (isset($_POST[$fld_name])) $editrec[$fld_name] = $_POST[$fld_name];
      else                          $editrec[$fld_name] = NULL;
      $dbrec[$pos] = $editrec[$fld_name];
   }

if ($action=='add')    {
   $action = 'list';
   if (addContactsRec($dbrec)) $editrec = NULL;
}
if ($action=='delete') {
   $action  = 'list'; 
   $editrec = NULL;
   delContactsRec($cont_id);
}
if ($action=='update') {
   if (updContactsRec($dbrec, $cont_id)) {
     $action = 'list';
     $editrec = NULL;
   } else $action = 'edit';
}
if ($action=='edit') {
   $contrec = contactGetByCid ($cont_id);
   $heading = 'Edit Contacts';
}
if ($action=='list') {
   $allcrecs = getContactsRecs();
   $heading = 'List of Contacts';
}

print pgStart();
print pc("<br><br>$heading<br><br>", 'font-size:16; font-weight:bold; text-align:center;');
if (!is_null($dbfferr)) print pc($dbfferr."<br><br>",'color:red; text-align:center;');

if ($action=='list') print contlist($allcrecs, $editrec);
else                 print contedit($contrec, $contacts_def);

print pgEnd();
exit;

///
/// db api functions, keep all data functions separate for simpler replacement to other db later
///
function contactGetByCid ($cid) { // get one record by id
   global $contacts;
   $r = NULL;
   if ($contacts->select('CID',$cid)>0) $r = $contacts->selectGet();
   return $r;
}

function getContactsRecs() { // get all contacts
   global $contacts;
   $r = NULL;
   $contacts->select();
   while ($cr = $contacts->selectGet()) $r[] = $cr;
   return $r;
}

function updContactsRec ($crec, $cid) {
   global $contacts;
   if ($contacts->update($crec, $cid) && $contacts->commit()) return true;
   return false;
}

function addContactsRec ($crec) {
   global $contacts;
   if ($contacts->insert($crec) && $contacts->commit()) return true;
   return false;
}
function delContactsRec ($cid) {
   global $contacts;
   if ($contacts->delete($cid) && $contacts->commit()) return true;
   return false;
}

///
/// List records!
///
function contlist ($crecs, $editrec) {
global $contacts;
   $pg   = $_SERVER['REQUEST_URI'];
   $cid  = NULL;
   $bstr = "\n".'<td valign="top"><input type="SUBMIT" name="update" id="update" value="Save"></td>
            <td valign="top"><input type="SUBMIT" name="edit"        id="edit"   value="Edit"></td>
            <td valign="top"><input type="SUBMIT" name="delete"      id="delete" value="Delete"></td>';
   $str  = "\n".'<table width="100%" bgcolor="lightblue" align="center" border="1"
           cellpadding="0" cellspacing="1"><tr valign="top">';
   reset($contacts->fldnames);
   while ( list ($pos, $fld_name) = each ($contacts->fldnames) ) { /// header line
      if (!$contacts->NN($fld_name)) continue; // Skip non required fields in list
      $str .= "\n".'<td  valign="top">'.mkhdr($fld_name).'</td>';
   }
   $str .= "\n".'<td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>'; 
   if (count($crecs)>0) {
      while ($crec = current($crecs)) { /// Data rows
         $cid = $crec['CONTACTS.CID'];
	 $str .= "\n".'<tr valign="top"><form name="cid_'.$cid.'" action="'.$pg.'" method="post">';
         reset($contacts->fldnames);
         while ( list ($pos, $fld_name) = each ($contacts->fldnames) ) {
            if (!$contacts->NN($fld_name)) continue; // Skip non required fields in list
            $idx = 'CONTACTS.'.strtoupper($fld_name);
            if (isset($crec[$idx]))  $val  = $crec[$idx];
            else                     $val  = '';
            $size = $dsz = $contacts->size($fld_name);
            if ($dsz>8) $dsz = round($size / 4);
	    $str .= "\n".'<td  valign="top">';
            if ($fld_name=='cid') { $cid = $val; $str .= $cid.'</td>'; }
            else $str .= "\n".'<input type="TEXT" name="'.$fld_name.'" id="'.$fld_name.
                       '" size="'.$dsz.'" value="'.$val.'" maxlength="'.$size.'"></td>';
         }
         $str .= "\n".'<input type="HIDDEN" name="cid" id="cid" value="'.$cid.'">'.$bstr.'</FORM></tr>';
         next($crecs);
      }
   }
   // add line
   $str .= "\n".'<tr valign="top"><form name="add_contact" action="'.$pg.'" method="post">';
   reset($contacts->fldnames);
   while ( list ($pos, $fld_name) = each ($contacts->fldnames) ) {
      if (!$contacts->NN($fld_name)) continue; // Skip non required fields in list
      $size = $dsz = $contacts->size($fld_name);
      if ($dsz>8) $dsz = round($size / 4);
      $str .= "\n".'<td  valign="top">';
      if ($fld_name=='cid') $str .= '&nbsp;</td>';
      else $str .= "\n".'<input type="TEXT" name="'.$fld_name.'" id="'.$fld_name.
                   '" size="'.$dsz.'" value="'.$editrec[$fld_name].'" maxlength="'.$size.'"></td>';
   }
   $str .= "\n".'<td valign="top"><input type="HIDDEN" name="cid" id="cid" value="0">';
   $str .= "\n".'<input type="SUBMIT" name="add" id="add" value="Add"></td>';
   $str .= '<td>&nbsp;</td><td>&nbsp;</td></FORM></tr></table>';
   return $str;
}

///
/// Edit form
///
function contedit ($r, $flds) {
global $contacts;
   $pg   = $_SERVER['REQUEST_URI'];
   if (empty($r)) return 'No record to Edit!';
   /// Js check functions
      $js  = new dbff_jsChk;
      $str = $js->jsGen("cedit", $flds);
   ///
   $str  .= "\n".'<table width="90%" bgcolor="lightblue" align="center" border="1"
           cellpadding="0" cellspacing="4"><tr valign="top">
           <form name="cedit" action="'.$pg.'" method="post" onSubmit="return cedit_chk(this);">';
   reset($contacts->fldnames);
   while ( list ($pos, $fld_name) = each ($contacts->fldnames) ) {
      $size = $dsz = $contacts->size($fld_name);
      if ($dsz>50) $dsz = round($size / 3);
      $str .= '<tr valign="top">';
      $str .= "\n".'<td valign="top">'.mkhdr($fld_name,'R').'</td>'."\n".'<td valign="top">';
      $idx = 'CONTACTS.'.strtoupper($fld_name);
      if (isset($r[$idx])) $value = $r[$idx];
      else                 $value = '';
      if ($fld_name=='cid') $str .= $value.'</td></tr>';
      else $str .= '<input type="TEXT" name="'.$fld_name.'" id="'.$fld_name.
                   '" size="'.$dsz.'" value="'.$value.'" maxlength="'.$size.'"></td></tr>';
   }
   $str .= "\n".'<tr><td>&nbsp;</td><td><input type="HIDDEN" name="cid" id="cid" value="'.
           $r['CONTACTS.CID'].'">'."\n".'<input type="SUBMIT" name="update" id="update" value="Save">
            <input type="RESET" name="cancel" id="cancel" value="Cancel"
            onclick="parent.location=\''.$pg.'\'"></td></FORM></tr></table>';
   return $str;
  // Edit record end
}

///
/// General functions
///
function mkhdr ($str, $align='L') {
   $str = ucwords(strtolower(strtr($str,'_',' ')));
   if ($align=='R') return pc($str,'font-weight:bold; text-align:right;');
   return pc($str,'font-weight:bold; text-align:left;');
};

function pc ($txt, $style=NULL) { // Tag with inline style 
   $str  = "<p";
   if (!is_null($style)) $str .= " style=\"$style\"";
   $str .= '>' . $txt . "</p>";
   return $str;
}

function pgStart() {
return '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>Contacts</title>
<META HTTP-EQUIV="expires"  content="0" "content-type" content="text/html; charset=iso-8859-1">
<style><!--
   page { margin-left:0cm; margin-right:0cm; margin-top:0cm; margin-bottom:0cm }
   body { font-family: frutiger, helvetica, syntax, verdana, univers, sans-serif; color:black;}
   p { font-family: frutiger, helvetica, verdana, sans-serif; font-size:0.8em; margin-bottom: 0em; margin-top: 0em;}
   input { font-family:frutiger, helvetica, verdana, sans-serif; font-size:0.8em;
        margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px;
	padding-top:1px; padding-left:0px; padding-right:0px; padding-bottom:0px;
	display:inline;}
   textarea { text-align:left; font-family:frutiger, helvetica, verdana, sans-serif; font-size:0.8em;}
   form { font-size:0.8em; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px;
	padding-top:0px; padding-left:0px; padding-right:0px; padding-bottom:0px; display:inline;} 
 --></style>
</head>
<body  topmargin="0" leftmargin="0" bgcolor="white">';
}

function pgEnd() {
   return '</body></html>';
}
?>
Return current item: dbff