[nycphp-talk] working with a PHP class - help!
Phil Powell
soazine at erols.com
Sun Sep 7 21:40:12 EDT 2003
My first time working with a PHP class, and after 6 hours of working out the kinks I am unable to return a value from the class, so now I appeal to the general audience what on earth did I do wrong this time?
This is the code the retrieves the values:
if (($hasRegistered || $hasPreRegistered) && !empty($uplinenumber)) {
// CHECK TO SEE IF UPLINE NUMBER IS A VALID NUMBER
$regNumberGenerator = new RegNumberGenerator($uplinenumber, $email, $dbConn);
if (!$regNumberGenerator->isValidUplinenumber()) {
$hasRegistered = 0; $hasPreRegistered = 0;
$errorMsg .= $font . '<font color=cc0000><li>Du måste skicka geltig upline nr., takk!' .
'</li></font></font><p>';
// ERROR PRODUCED UPON REG OR PRE-REG MODE - FORM WILL BE REPOPULATED BY $_POST ELEMENTS
// NO NEED FOR DB ANY FURTHER
@mysql_free_result($query); // FREE RESOURCES BUT SUPPRESS WARNINGS IF NON-SELECT QUERY
mysql_close($dbConn); // CLOSE DB CONNECTION
} else {
$registrationNumber = $regNumberGenerator->getRegNumber();
$registrationNumberForUsername = $regNumberGenerator->getRegNumberDecDigits($registrationNumber);
$registrationNumberForEmail = $regNumberGenerator->getRegNumberDecDigits($registrationNumber, '-');
}
}
And here is the class itself:
/*-------------------------------------------------------------------------------------------
Class RegNumberGenerator - this class consists of the following:
1. Method isValidUplinenumber - Boolean return if the upline number is a valid one
according to a db call
2. Method getRegNumber - String method to return the hexidecimal registration number
3. Method getRegNumberDecDigits - String method to return the reg number as decimal digits
4. Private method hasFoundNextAvailRegNumber - Boolean method that searches for the inputted
number as a registration number in the db
5. Private method incrUplinenumber - String method to increase next-to-last digit of
upline number by 1 (to get to the next "leg")
Input parameters:
1. $dbConn - your database connection resource link
2. $uplinenumber - your upline number
3. $email - your email address
--------------------------------------------------------------------------------------------*/
class RegNumberGenerator {
// STRING TO HOUSE GENERATED REGISTRATION NUMBER BASED ON UPLINE #
var $paddedUplinenumber = '';
var $regNumber = '';
var $canStopMethod = 0; // BOOLEAN TO DETERMINE TO STOP SEARCHING FOR NEXT VALID REG #
// CONSTRUCTOR
function RegNumberGenerator($uplinenumber, $email, $dbConn) {
$this->uplinenumber = $uplinenumber;
$this->email = $email;
$this->dbConn = $dbConn;
}
// BOOLEAN METHOD
function isValidUplinenumber() {
// CHECK TO SEE IF SINGLE-DIGIT UPLINENUMBER IS NUMERIC VALUE ONLY
if (strlen($this->uplinenumber) == 0 ||
(strlen($this->uplinenumber) == 1 && !is_numeric($this->uplinenumber))
) {
$canStopMethod = 1;
return 0;
}
// CHECK TO SEE IF UPLINENUMBER IS VALID (IS HEXADECIMAL NUMBER STRING)
if (preg_match('/[^a-fA-F0-9]+/i', $this->uplinenumber) && !$canStopMethod) {
$canStopMethod = 1;
return 0;
}
// CHECK TO SEE THAT IF THIS IS A TOP UPLINENUMBER THAT IT IS A VALID TOP UPLINE NUMBER IN DB
if (strlen($this->uplinenumber) == 1 && !$canStopMethod) {
$sql = 'SELECT nnet_user_email FROM nnet_top_uplinenumber ' .
'WHERE nnet_user_uplinenumber = ' . (int)$this->uplinenumber;
$query = mysql_query($sql, $this->dbConn) or die('Could not perform query');
if (mysql_num_rows($query) == 0) {
$canStopMethod = 1;
return 0; // NOT VALID TOP UPLINENUMBER
}
}
// CHECK TO SEE IF SINGLE-DIGIT UPLINENUMBER WAS ENTERED BY A TOP USER (RAGNAR, DAVID, ETC)
if (strlen($this->uplinenumber) == 1 && !$canStopMethod) {
if ($row = mysql_fetch_row($query)) {
$topUserEmail = $row[0]; // OBTAIN TOP USER EMAIL ADDRESS FOR COMPARISON
$sql = 'SELECT nnet_userid FROM nnet_usermetadata ' .
'WHERE nnet_user_email = \'' . $this->email . '\' ' .
' AND nnet_user_registrationnumber = \'' . $this->uplinenumber . '\' ';
$query = mysql_query($sql, $this->dbConn) or die('Could not perform query #2');
if (mysql_num_rows($query) > 0) {
// THEY ARE A TOP USER BUT ALREADY FOUND IN USERMETADATA - RETURN FALSE
$canStopMethod = 1;
return 0;
} elseif (strcmp($topUserEmail, $this->email) == 0) {
// THEY ARE A TOP USER NOT FOUND YET IN USERMETADATA - SET REG # TO UPLINE # & SET TRUE
$regNumber = $this->uplinenumber;
$canStopMethod = 1;
return 1;
}
}
}
// CHECK TO SEE IF THIS IS SOMEONE'S REGISTRATION NUMBER
if (!$canStopMethod && !$this->hasFoundNextAvailRegNumber($this->uplinenumber)) {
$canStopMethod = 1;
return 0;
}
// THIS IS SOMEONE'S REG # - WE NOW HAVE TO CALCULATE THE NEXT AVAILABLE LEG
if (!$canStopMethod) {
$paddedUplinenumber .= $this->uplinenumber . '11';
if (!$this->hasFoundNextAvailRegNumber($paddedUplinenumber)) {
$canStopMethod = 1;
return 0;
}
// KEEP INCREASING NEXT_TO_LAST DIGIT BY 1 UNTIL NO LONGER FOUND IN DB AS REG #
while ($this->hasFoundNextAvailRegNumber($paddedUplinenumber))
$paddedUplinenumber = $this->incrUplinenumber($paddedUplinenumber);
$regNumber = $paddedUplinenumber;
return 1;
}
}
// STRING METHOD
function incrUplinenumber($myUplinenumber) {
$hexDigit = substr($myUplinenumber, strlen($myUplinenumber) - 2, 1); // NEXT_TO_LAST DIGIT
$nextDecDigit = (int)hexdec($hexDigit) + 1;
return substr($myUplinenumber, 0, strlen($myUplinenumber) - 2) . dechex($nextDecDigit) .
substr($myUplinenumber, strlen($myUplinenumber) - 1, 1);
}
// BOOLEAN METHOD
function hasFoundNextAvailRegNumber($paddedUplinenumber) {
global $dbConn;
$sql = 'SELECT nnet_userid FROM nnet_usermetadata ' .
'WHERE nnet_user_registrationnumber = \'' . $paddedUplinenumber . '\' ';
$query = mysql_query($sql, $dbConn) or die('Could not perform query #3');
if (mysql_num_rows($query) == 0) {
// NO ONE HAS THIS UPLINE # AS THEIR REG # - INVALID UPLINE NUMBER
return 0;
} else {
return 1;
}
}
// STRING METHOD TO RETURN HEX REG NUMBER
function getRegNumber() {
return $regNumber;
}
// STRING METHOD TO RETURN DECIMAL-DIGITS REG NUMBER (NOT TRUE NUMBER) WITH OPTIONAL CHAR
// DIVIDER
function getRegNumberDecDigits($myRegNumber, $divider = '') {
for ($i = 0; $i < strlen($myRegNumber); $i++)
$decRegNumber .= '' . hexdec(substr($myRegNumber, $i, 1)) . $divider;
return $decRegNumber;
}
}
//---END OF CLASS---------------------------------------------------------------------------
Phil
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.nyphp.org/pipermail/talk/attachments/20030907/b12c82ee/attachment.html>
More information about the talk
mailing list