<?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> </td><td> </td><td> </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 .= ' </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> </td><td> </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> </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>'; 
} 
?>
 
 |