Reply to Re: Using a Resource as a Class Property

Your name:

Reply:


Posted by Sanders Kaufman on 07/21/07 19:58

Michael Fesser wrote:
> .oO(Sanders Kaufman)
>
>> So I'm doing it right?! Cool.
>
> It always depends on what you want to achieve. From just looking at the
> posted snippet and without knowing what the my_baseclass is supposed to
> do, it's hard to tell whether you're doing it right or not, since the
> code is not doing anything useful, except for initializing some member
> variables.

Since you mention it - here's the architecture. (Mebbe you can help me
with the OOP vocabulary.)

I have a bvckvs_database class that performs CRUD, and then a
bvckvs_baseclass that aggragates the db class and is extended by other
classes (inheritance? polymorph? Marshall? I dunno.). These extended
classes are intended to be the actual web functions - like forums,
article submissions, scheduling stuff, and whatnot.

Here's the database and base class:
I'm actually pretty darned proud of how I built it, although wordwrap
will probably mangle it.

Any feedback by anyone would be appreciated.



<?php
/**
* Core database functions for BVCKVS Framework
*/
define ("_BVCKVSDBSERVER", "db.server.net", false);
define ("_BVCKVSDBDATABASE", "mydatabase", true);
define ("_BVCKVSDBUSERNAME", "myuserid", true);
define ("_BVCKVSDBPASSWORD", "mypassword", true);
define ("_BVCKVSUNIQUEPREFIX", "bvckvs", true);

class bvckvs_database {
//All properties are read-only.
var $Server;
var $DatabaseName;
var $Username;
var $Password;
var $TablePrefix;
var $RecordSQL; // String
var $RecordSet; // Array of Arrays
var $RecordCount; // Integer
var $ErrorMessage; // OK or message
var $oConn; // Database Connection Resource
function bvckvs_database(){
$this->Server=_BVCKVSDBSERVER;
$this->DatabaseName=_BVCKVSDBDATABASE;
$this->Username=_BVCKVSDBUSERNAME;
$this->Password=_BVCKVSDBPASSWORD;
$this->TablePrefix = _BVCKVSUNIQUEPREFIX;
$this->RecordCount = 0;
$this->RecordSet = array();
$this->RecordSQL = "";
$this->ErrorMessage = "OK";
$bVoid = $this->Connect();
}
function Connect(){
$bRetVal = true;
if (!$this->oConn = @mysql_connect($this->Server, $this->Username,
$this->Password)) {
$this->ErrorMessage="Failed to connect to database server.";
$bRetVal = false;
} else {
if (!mysql_selectdb($this->DatabaseName,$this->oConn)) {
$this->ErrorMessage="Failed to select database.";
$bRetVal = false;
} else {
$this->ErrorMessage="OK";
}
}
return $bRetVal;
}
function RunSQL($sSQL) {
//Returns true, or false with an ErrorMessage
$bRetVal = true;
$this->RecordSQL = $sSQL;
$this->RecordCount = 0;
$this->RecordSet = array();
$result = null;
if ($result = mysql_unbuffered_query($this->RecordSQL, $this->oConn)) {
$this->RecordCount = mysql_affected_rows();
$this->ErrorMessage="OK";
} else {
$this->ErrorMessage=mysql_error();
$bRetVal = false;
}
return $bRetVal;
}
function CreateTable($sTableName, $sTableDef){
//Returns true, or false with an ErrorMessage.
//Prefixes table name and appends ISAM engine type.
//Auto-creates id field, but user should still provide a unique field
$bRetVal = true;
$this->RecordSQL = "CREATE TABLE {$this->TablePrefix}_$sTableName
(id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id),
$sTableDef) ENGINE=MyISAM";
if(!$this->RunSQL($this->RecordSQL)){
$bRetVal = false;
$this->ErrorMessage=mysql_error();
} else {
$this->ErrorMessage="OK";
}
return $bRetVal;
}
function RecordExists($sTableName, $sKeyName, $sKeyValue, $bIsNumeric,
$sComparisonOperator){
// Comparison Operators: =, <, >, IN, NOT IN
$bRetVal = true;
if($bIsNumeric == true){$sQuote = "";} else {$sQuote = "'";}
$sSQL = "SELECT $sKeyName FROM {$this->TablePrefix}_$sTableName WHERE
$sKeyName $sComparisonOperator " . $sQuote . $sKeyValue . $sQuote;
if($this->RunSQL($sSQL)){
$this->ErrorMessage="OK";
if($this->DataBase->RecordCount = 0){$bRetVal = false;}
} else {
$this->ErrorMessage=mysql_error();
$bRetVal = false;
}
return $bRetVal;
}
function CreateRecord ($sTableName, $csvFieldNames, $csvFieldValues){
// Returns new ID, or 0 with Error Message
$iRetVal = 0;
$this->RecordCount = 0;
$this->RecordSet = array();
$this->RecordSQL = "INSERT INTO {$this->TablePrefix}_$sTableName
($csvFieldNames) VALUES ($csvFieldValues)";
if (mysql_unbuffered_query($this->RecordSQL, $this->oConn)) {
$iRetVal = mysql_insert_id();
$this->ErrorMessage="OK";
} else {
$this->ErrorMessage=mysql_error();
}
return $iRetVal;

}
function UpdateRecord($sTableName, $iID, $aryFieldNames, $aryFieldValues) {
$bRetVal = true;
//First, pre-validate data.
if($iID == 0){
$bRetVal = false;
$this->ErrorMessage = "Cannot update record id '0'.";
}
if($bRetVal == true){
if($sTableName == ""){
$bRetVal = false;
$this->ErrorMessage = "No table name provided.";
}
}
if($bRetVal == true){
if(count($aryFieldNames) == 0){
$bRetVal = false;
$this->ErrorMessage = "No field names provided.";
}
}
if($bRetVal == true){
if(count($aryFieldValues) == 0){
$bRetVal = false;
$this->ErrorMessage = "No field values provided.";
}
}
if($bRetVal == true){
if(!(count($aryFieldNames) == count($aryFieldValues))){
$bRetVal = false;
$this->ErrorMessage = "Number of field names does not equal number
of field values.";
}
}

//Second, ensure that record already exists.
if($bRetVal == true){
if($this->RecordExists($sTableName,"id", $iID, true, "=")){
$bRetVal = false;
$this->ErrorMessage = "Record not found.";
}
}

//Third, attempt to update data
if($bRetVal == true){
$sSQL = "";
$aryFields = array();
$sFieldName = "";
$sFieldValue = "";

// Compose SQL statement
$sSQL .= "UPDATE {$this->TablePrefix}_{$sTableName} SET ";
$sFieldValue = reset($aryFieldValues);
foreach ($aryFieldNames as $sFieldName){
$sSQL .= "$sFieldName = $sFieldValue";
if(next($aryFieldValues) == true){
$sFieldValue = current($aryFieldValues);
$sSQL .= ", ";
}
}
$sSQL .= " WHERE id=$iID";

// Execute SQL Statement
if($this->RunSQL($sSQL)){
if($this->RecordCount < 1){
$bRetVal = false;
$this->ErrorMessage = "No record was found to update.";
} else {
$this->ErrorMessage="OK";
}
} else {
$bRetVal = false;
$this->ErrorMessage=mysql_error();
}
}
return $bRetVal;
}
function DeleteRecord($sTableName, $sKeyName, $sKeyValue, $bIsNumeric,
$sComparisonOperator){
// Comparison Operators: =, <, >, IN, NOT IN
$bRetVal = true;
if($bIsNumeric == true){$sQuote = "";} else {$sQuote = "'";}
$sSQL = "SELECT $sKeyName FROM {$this->TablePrefix}_$sTableName WHERE
$sKeyName $sComparisonOperator " . $sQuote . $sKeyValue . $sQuote;
if($this->RunSQL($sSQL)){
if($this->DataBase->RecordCount = 0){
$bRetVal = false;
$this->ErrorMessage = "No record was found to delete.";
} else {
$this->ErrorMessage="OK";
}
} else {
$bRetVal = false;
$this->ErrorMessage=mysql_error();
}
return $bRetVal;
}
function GetRecordset($sSQL) {
$bRetVal = true;
$oResource = null;
$this->RecordSQL = $sSQL;
$this->RecordCount = 0;
$this->RecordSet = array();

$oResource = mysql_query($this->RecordSQL, $this->oConn);
if($oResource == false){
$this->ErrorMessage = mysql_error();
$bRetVal = false;
} else {
$row = array();
$result = array();
$iCount = 0;
while ($row = mysql_fetch_assoc($oResource)) {
$iCount = array_push($this->RecordSet, $row);
}
$this->RecordCount = $iCount;
$bVoid = mysql_free_result($oResource);
$this->ErrorMessage = "OK";
}
return $bRetVal;
}
function CreateFrameworkTables($sTableName){
$bRetVal = true;
if($sTableName == ""){
$sTableName = "all";
}
switch ($sTableName){
case "users":
$sTableDef = "username VARCHAR(24) NOT NULL UNIQUE,
emailaddress VARCHAR(64) NOT NULL UNIQUE,
password VARCHAR(24) NOT NULL,
registration_date DATETIME";
break;
case "publications":
$sTableDef = "title VARCHAR(64) NOT NULL UNIQUE,
description VARCHAR(128),
keywords VARCHAR(64),
editor_user_id INT,
menu_index INT,
publicaton_date DATETIME,
parent_publication_id INT,
content_directory VARCHAR(64),
default_content TEXT";
break;
default:
//do
$bRetVal = false;
$this->ErrorMessage = "&quot;$sTableName&quot; is not
defined as a BVCKVS table name.";
break;
}
if($bRetVal == true){
if($this->CreateTable($sTableName, $sTableDef)){
$this->ErrorMessage="OK";
} else {
$bRetVal = false;
$this->ErrorMessage=mysql_error();
}
}
return $bRetVal;
}
function HTMLRecordSelector($sTagName, $sTableName, $aryFields,
$iDefaultValue, $iSize, $bAllowNew, $bAllowEmpty, $bAllowMultiple){
// Presumes Value Field is an integer.
// Presumes 0 is (new), and empty is blank.
/* Requires format:
$aryFields = array(
"Value" => "field_a",
"Text" => "field_b",
"Order" => "field_b");
*/
$sRetVal = "";
switch ($aryFields["Order"]){
case $aryFields["Text"]:
$sOrderField = $aryFields["Text"];
$sOrderFieldName = "";
break;
case $aryFields["Value"]:
$sOrderField = $aryFields["Value"];
$sOrderFieldName = "";
break;
case "":
//do
$sOrderField = $aryFields["Text"] . ", " . $aryFields["Value"];
$sOrderFieldName = "";
break;
default:
//do
$sOrderField = $aryFields["Order"];
$sOrderFieldName = ", " . $aryFields["Order"];
break;
}
$sSQL = "SELECT {$aryFields["Value"]}, {$aryFields["Text"]}
$sOrderFieldName
FROM {$this->TablePrefix}_$sTableName
ORDER BY $sOrderField";
if($this->GetRecordset($sSQL)){
$sRetVal .= "\n<select id=\"$sTagName\" name=\"$sTagName\"";
if($bAllowMultiple==true){$sRetVal .= " multiple";}
$sRetVal .= " size=\"$iSize\">";
if($bAllowEmpty == true){
$sRetVal .= "\n<option value=\"\"";
if($iDefaultValue == ""){
$sRetVal .= " selected ";
}
$sRetVal .= "></option>";
}
if($bAllowNew == true){
$sRetVal .= "\n<option value=\"0\"";
if($iDefaultValue == 0){
$sRetVal .= " selected ";
}
$sRetVal .= ">(new)</option>";
}
foreach ($this->RecordSet as $aryRecord){
$sRetVal .= "\n<option value=\"{$aryRecord[$aryFields["Value"]]}\"";
if($iDefaultValue == $aryRecord[$aryFields["Value"]]){
$sRetVal .= " selected ";
}
$sRetVal .= ">{$aryRecord[$aryFields["Text"]]}</option>";
}
$sRetVal .= "\n</select>";
} else {
$sRetVal .= "Selection not available.";
}
return $sRetVal;
}
}
?>


<?php
//This is the base class upon which other bvckvs classes are extended.
// All properties are read-only from extended classes.
require_once("bvckvs_database.php");

class bvckvs_baseclass {
var $Database;
var $csvFieldNames;
var $csvFieldValues;
var $ErrorMessage;
var $TableName;
var $RecordSet;
function bvckvs_baseclass(){
$this->TableName = "";
$this->csvFieldNames = "";
$this->csvFieldValues = "";
$this->RecordSet = array();
$this->Database = new bvckvs_database();
$this->ErrorMessage = $this->Database->ErrorMessage;
return true;
}
function RecordExists($sKeyName, $sKeyValue, $bIsNumeric){
$bRetVal = $this->Database->RecordExists($this->TableName, $sKeyName,
$sKeyValue, $bIsNumeric, "=");
$this->ErrorMessage = $this->Database->ErrorMessage;
return $bRetVal;
}
function CreateRecord ($csvFieldValues){
// Returns new ID or 0
$iRetVal = 0;
$this->csvFieldValues = $csvFieldValues;
$iRetVal = $this->Database->CreateRecord($this->TableName,
$this->csvFieldNames, $this->csvFieldValues);
$this->ErrorMessage = $this->Database->ErrorMessage;
return $iRetVal;
}
function GetRecord($sKeyName, $sKeyValue, $bIsNumeric){
//Returns true, even if empty - unless there's an error.
$bRetVal = true;
$sSeperator = "'";
if($bIsNumeric==true){$sSeperator = "";}
$sSQL = "SELECT {$this->csvFieldNames}
FROM {$this->Database->TablePrefix}_{$this->TableName}
WHERE $sKeyName = " . $sSeperator . $sKeyValue . $sSeperator;
if($this->Database->GetRecordSet($sSQL) == true){
$this->RecordSet = $this->Database->RecordSet;
$this->csvFieldValues = implode(",", array_values($this->RecordSet[0]));
} else {
$bRetVal = false;
$this->RecordSet = array();
}
$this->ErrorMessage = $this->Database->ErrorMessage;
return $bRetVal;
}
function UpdateRecord($iID, $aryFieldNames, $aryFieldValues){
$bRetVal = true;
//First, pre-validate data.
if($iID == 0){
$bRetVal = false;
$this->ErrorMessage = "Cannot update record id '0'.";
}
if($bRetVal == true){
if(count($aryFieldNames) == 0){
$bRetVal = false;
$this->ErrorMessage = "No field names provided.";
}
}
if($bRetVal == true){
if(count($aryFieldValues) == 0){
$bRetVal = false;
$this->ErrorMessage = "No field values provided.";
}
}
if($bRetVal == true){
if(!(count($aryFieldNames) == count($aryFieldValues))){
$bRetVal = false;
$this->ErrorMessage = "Number of field names does not equal number
of field values.";
}
}

//Second, ensure that record already exists
if($bRetVal == true){
if($this->RecordExists("id", $iID,true,"=") == false){
$bRetVal = false;
$this->ErrorMessage = "Record does not exist.";
}
}

//Third, attempt to update data
if($bRetVal == true){
$sSQL = "";
$aryFields = array();
$sFieldName = "";
$sFieldValue = "";

// Compose SQL statement
$sSQL .= "UPDATE {$this->Database->TablePrefix}_{$this->TableName} SET ";
$sFieldValue = reset($aryFieldValues);
foreach ($aryFieldNames as $sFieldName){
$sSQL .= "$sFieldName = $sFieldValue";
if(next($aryFieldValues) == true){
$sFieldValue = current($aryFieldValues);
$sSQL .= ", ";
}
}
$sSQL .= " WHERE id=$iID";

// Execute SQL Statement
$bRetVal = $this->Database->RunSQL($sSQL);
$this->ErrorMessage = $this->Database->ErrorMessage;
}
return $bRetVal;
}
function DeleteRecord($iID){
$bRetVal = true;
$sSQL = "DELETE FROM {$this->Database->TablePrefix}_{$this->TableName}
WHERE id=$iID";
$bRetVal = $this->Database->RunSQL($sSQL);
$this->ErrorMessage = $this->Database->ErrorMessage;
return $bRetVal;
}

}
?>

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация