Source of: example.7-2.php

<?
/*
Source code example for Web Database Applications

Unless otherwise stated, the source code distributed with this book can be
redistributed in source or binary form so long as an acknowledgment appears
in derived source files.
The citation should list that the code comes from Hugh E.
Williams and David Lane, "Web Database Application with PHP and MySQL"
published by O'Reilly & Associates.
This code is under copyright and cannot be included in any other book,
publication, or educational product without permission from O'Reilly &
Associates.
No warranty is attached; we cannot take responsibility for errors or fitness
for use.

<!-- This example is from the book _JavaScript: The Definitive Guide_.  -->
<!-- Written by David Flanagan.  Copyright (c) 1996 O'Reilly & Associates. -->
<!-- This example is provided WITHOUT WARRANTY either expressed or implied.-->
<!-- You may study, use, modify, and distribute it for any purpose.  -->

*/
?>
<?php
  
include 'db.inc';
  include 
'error.inc';
  
  
$custID clean($custID5);

  
// Has a custID been provided? If so, retrieve the customer
  // details for editing.
  
if (!empty($custID))
  {
     if (!(
$connection = @ mysql_pconnect($hostName
                                         
$username
                                         
$password)))
        die(
"Could not connect to database");

     if (!
mysql_select_db($databaseName$connection))
        
showerror();
  
     
$query "SELECT * FROM customer 
               WHERE cust_id = " 
$custID;
  
     if (!(
$result = @ mysql_query($query$connection)))
        
showerror();
  
     
$row mysql_fetch_array($result);
  
     
// Reset $formVars, since we're loading from 
     // the customer table
     
$formVars = array();
  
     
// Load all the form variables with customer data
     
$formVars["surname"] = $row["surname"];
     
$formVars["firstName"] = $row["firstname"];
     
$formVars["address1"] = $row["addressline1"];
     
$formVars["city"] = $row["city"];
     
$formVars["email"] = $row["email"];
     
$formVars["dob"] = $row["birth_date"];
     
$formVars["dob"] = substr($formVars["dob"], 82) . "/" .
                        
substr($formVars["dob"], 52) . "/" .   
                        
substr($formVars["dob"], 04);
  }
?>
<!DOCTYPE HTML PUBLIC
              "-//W3C//DTD HTML 4.0 Transitional//EN"
              "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title>Customer Entry Form</title>

<script type="text/javascript">
<!-- Hide the script from old browsers
  
// A utility function that returns true if a string 
// contains only whitespace characters.
function isblank(s)
{
  for(var i = 0; i < s.length; i++)
  {
     var c = s.charAt(i);
     if ((c != ' ') &&
         (c != '\n') &&
         (c != '\t'))
        return false;
  }
  return true;
}


// This is the function that performs <form> validation.  
// It will be invoked from the onSubmit() event handler.
// The handler should return whatever value this function
// returns.
function verify(f)
{
  var msg;
  var empty_fields = "";
  var errors = "";

  // Loop through the elements of the form, looking for all
  // text and textarea elements that don't have an
  //  "optional" property defined.  Then, check for fields
  // that are empty and make a list of them.
  // Also, if any of these elements have a "min" or a "max"
  // property defined, then verify that they are numbers 
  // and that they are in the right range.
  // Put together error messages for fields that are wrong.
  for(var i = 0; i < f.length; i++)
  {
     var e = f.elements[i];

     if (((e.type == "text") ||
         (e.type == "textarea")) &&
         !e.optional)
     {
        // first check if the field is empty
        if ((e.value == null) ||
            (e.value == "") ||
            isblank(e.value))
        {
           empty_fields += "\n        " +
                           e.description;
           continue;
        }

        // Now check for fields that are supposed 
        // to be numeric.
        if (e.numeric ||
           (e.min != null) ||
           (e.max != null))
        {
           var v = parseFloat(e.value);
           if (isNaN(v) ||
              ((e.min != null) && (v < e.min)) ||
              ((e.max != null) && (v > e.max)))
           {
              errors += "\n- The field " +
                        e.description +
                        " must be a number";
              if (e.min != null)
                 errors += " that is greater than " +
                           e.min;

              if (e.max != null &&
                  e.min != null)
                 errors += " and less than " +
                           e.max;

              else if (e.max != null)
                 errors += " that is less than " +
                           e.max;

              errors += ".\n";
           }
        }

        // Now check for fields that are supposed 
        // to be emails.
        // Not exactly as described in RFC 2822, but 
        // a rough attempt
        // of the form "local-bit@domain-bit"
        if (e.email && !isblank(e.value))
        {
           var seenAt = false;
           var append = "";
           for(var j = 0; j < e.value.length; j++)
           {
              var c = e.value.charAt(j);
              if ((c == ' ') ||
                  (c == '\n') ||
                  (c == '\t'))
                 append += 
     "\n           - not contain white-space";
              if ((c == '@') && (seenAt == true))
                 append += 
     "\n           - contain only one @";
              if ((c == '@'))
                 seenAt = true;
           }

           if (seenAt == false)
              append += 
     "\n           - contain exactly one @";
           if (append)
              errors += "- The field " +
                        e.description +
                        " must: " + append;
        }

        // Now check for fields that are supposed 
        // to be DOBs.
        if (e.dob && !isblank(e.value))
        {
           var slashCount = 0;
           var append = "";
           var addedError1 = false;
           var addedError2 = false;

           for(var j = 0; j < e.value.length; j++)
           {
              var c = e.value.charAt(j);

              if ((c == '/'))
                 slashCount++;

              if (c != '/' &&
                 (c < '0' || c > '9') &&
                 addedError1 == false)
              {
                 addedError1 = true;
                 append += 
     "\n           - must contain only numbers " +
     "and forward-slashes";
              }
           }

           if (j != 10 || slashCount != 2)
              append += 
     "\n           - must have the format DD/MM/YYYY";
           if (slashCount != 2)
              append += 
     "\n           - must contain two slashes";
           if (append)
              errors +=  "- The field " + 
                         e.description + 
                         " must: " + append;
        }

        // Now check for fields that are supposed 
        // not to have spaces
        if (e.nospaces)
        {
           var seenAt = false;
           var append = "";

           for(var j = 0; j < e.value.length; j++)
           {
              var c = e.value.charAt(j);

              if ((c == ' ') ||
                  (c == '\n') ||
                  (c == '\t'))
                 errors += "- The field " + e.description +
                           " must not contains white-space";
           }
        }

     } // if (type is text or textarea) and !optional
  } // for each character in field

  // Now, if there were any errors, then display the
  // messages, and return true to prevent the form from
  // being submitted.  Otherwise return false
  if (!empty_fields && !errors) 
     return true;

  msg  = "______________________________________________________\n\n"
  msg += "The form was not submitted because of the " +
         "following error(s).\n";
  msg += "Please correct these error(s) and re-submit.\n";
  msg += "______________________________________________________\n\n"

  if (empty_fields)
  {
     msg += "- The following required field(s) are empty:"
           + empty_fields + "\n";
     if (errors)
        msg += "\n";
  }
  msg += errors;
  alert(msg);
  return false;
}
// end hiding -->  

</script>

</head>
<body>
<h1>Customer Details</h1>
<h3>Please fill in the details below to join. Fields shown in <font color="red">red</font> are mandatory.</h3>
<form onSubmit="this.firstName.nospaces = true;
  this.firstName.description = 'First Name';
  this.surname.description = 'Surname';
  this.address1.description = 'Address Line 1';
  this.city.description = 'City';
  this.email.description = 'Email';
  this.email.email = true;
  this.dob.dob = true;
  this.dob.description = 'Date of Birth (DD/MM/YYYY)';
  return verify(this);"
  method="post" action="example.6-8.php">    
<table>
<col span="1" align="right">

<tr>
   <td><input type="hidden" name="custID" 
   value="<? echo $custID;?>"></td>
</tr>

<tr>
   <td><font color="red">First name:</font></td>
   <td><input type="text" name="firstName" 
   value="<? echo $formVars["firstName"]; ?>" size=50></td>
</tr>

<tr>
   <td><font color="red">Surname:</font></td>
   <td><input type="text" name="surname" 
   value="<? echo $formVars["surname"]; ?>" size=50></td>
</tr>

<tr>
   <td><font color="red">Address:</font></td>
   <td><input type="text" name="address1" 
   value="<? echo $formVars["address1"]; ?>" size=50></td>
</tr>

<tr>
   <td><font color="red">City:</font></td>
   <td><input type="text" name="city" 
   value="<? echo $formVars["city"]; ?>" size=20></td>
</tr>

<tr>
   <td><font color="red">Date of birth (dd/mm/yyyy):</font> </td>
   <td><input type="text" name="dob" 
   value="<? echo $formVars["dob"]; ?>" size=10></td>
</tr>

<tr>
   <td><font color="red">Email/username:</font></td>
   <td><input type="text" name="email" 
   value="<? echo $formVars["email"]; ?>" size=50></td>
</tr>

<tr>
   <td><input type="submit" value="Submit"></td>
</tr>
</table>
</form>
</body>
</html>


© 2000--2001 Hugh E. Williams and David Lane.
Valid HTML 4.01!