PHP Classes
elePHPant
Icontem

File: contacts_sample.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of jerry mattsson  >  dbff  >  contacts_sample.php  >  Download  
File: contacts_sample.php
Role: Example script
Content type: text/plain
Description: Simple contact list and form
Class: dbff
Read and write flat file databases in CSV format
Author: By
Last change: Added javascript sample
Date: 8 years ago
Size: 10,009 bytes
 

Contents

Class file image Download
<?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>';
}
?>