NYCPHP Meetup

NYPHP.org

[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&#229;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