Location: PHPKode > scripts > SQL Data > buildSyntacticValidation.php
<?php

/**
 * @author Dick Munroe <hide@address.com>
 * @copyright copyright (c) Dick Munroe, 2004-2006, All rights reserved.
 * @license http://www.csworks.com/publications/ModifiedNetBSD.html
 * @version 2.0.0
 */

//
// Generate the syntatic validation for interfaces built by buildForm.
//
// This was written as part of the writing of an article for the
// OpenVMS Technical Journal.
//
// This program should be run BEFORE buildForm is run as buildForm checks
// for the existance of a validation file.  This allows you to build forms
// without any validation if desired.
//
// My thanks to Chris Sands, the Director of IT at the Florida Democratic
// Party, for permission to submit this program for general use.
//
//	$Author: munroe $
//	$Date: 2006/11/02 16:42:24 $
//
// Edit History:
//
//  Dick Munroe hide@address.com 03-May-2005
//      Initial Version Created
//
//  Dick Munroe hide@address.com 14-Mar-2006
//	Change licensing, reorganize includes.
//
//  Dick Munroe (hide@address.com) 15-Oct-2006
//      Switch to database independent interfaces.
//

$theOptions = getopt("h:p:u:d:") ;

if (count($_SERVER['argv']) < 3)
{
    print("
buildSyntacticValidation [-h hostname] [-u username] [-p password] [-d DBType] tableName databaseName

    Writes a file named \"form.tableName.js\" and renames any existing file of the same
    name to form.tableName.js.old.
") ;
    return 0 ;
}

//
// Unfortunately PHP doesn't do the argv reduction common to all
// other implementations of getopt, so I'm requiring that the
// table and database names be the first two arguments.
//

include_once('SQLData/options.php') ;

$theTableName = $_SERVER['argv'][count($_SERVER['argv']) - 2] ;
$theDatabaseName = $_SERVER['argv'][count($_SERVER['argv']) - 1] ;

if (empty($theTableName))
{
    die('A table name is needed') ;
}

if (empty($theDatabaseName))
{
    die('A database name is needed') ;
}

options($theOptions) ;

$theDB =
    FactoryDB::factory(
        $theOptions['u'],                               // Username
        $theOptions['p'],                               // Password
        $theDatabaseName,                               // Database
        $theOptions['h'],                               // Host
        $theOptions['d']) ;                             // Database Type

//
// Preserve the outfile, if one already exists.
//

$theFileName = sprintf("form.%s.js", ucfirst($theTableName)) ;
$theOldFileName = $theFileName . ".old" ;

if (file_exists($theFileName))
{
  if (is_file($theFileName))
    {
      if (!rename($theFileName, $theOldFileName))
	{
	  exit(1) ;
	}
    }
  else
    {
      exit(2) ;
    }
}

if (!($theStream = @fopen($theFileName, 'w')))
{
  exit(3) ;
}

$theValidResults = array() ;

$theResult = $theDB->describeTable($theTableName) ;

$theEncodeType = "" ;

foreach ($theResult as $theResultArray)
{
    if (!preg_match('/auto_increment/', $theResultArray['Extra']))
    {
        if (preg_match('/blob/', $theResultArray['Type']))
        {
            $theEncodeType = 'enctype="multipart/form-data"' ;
        }

        array_push($theValidResults, $theResultArray) ;
    }
}

//
// Build the javascript validation functions
//

foreach ($theValidResults as $theResultArray)
{
    $theForm[] = sprintf('function validate%s(what)
{
    //
    // Validate %s field value
    //

    if (!isRequired(what))
    {
        return false ;
    }

    return true ;
}

',         ucfirst($theResultArray['Field']),
           $theResultArray['Field']) ;
}

if (fwrite($theStream,implode("", $theForm)) === FALSE)
{
  exit(4) ;
}

exit(0) ;
?>
Return current item: SQL Data