Avatar billede junold Nybegynder
01. april 2008 - 09:27 Der er 3 kommentarer og
1 løsning

Fatal error: Call to a member function..

Jeg sidder og koder i klasser i php. Ofte får jeg denne fejl:
F.eks. "Fatal error: Call to a member function generatePassword() on a non-object in C:\wamp\www\svende\testmailsender.php on line 12"

Efter jeg så roder lidt med det, forsvinder den igen. Men jeg kan ikke forstå hvad fejlen er? Hvad foresager den?

Hvis i vil have noget kode hvor den optræder, så må i bare sige til.
Avatar billede nielle Nybegynder
01. april 2008 - 09:56 #1
Ja tak.
Avatar billede junold Nybegynder
01. april 2008 - 10:18 #2
Ok, koden til mailsender (filen der kalder funktionen)
<?php
include ('classes/users.class.php');

if($_POST['email']!= NUll)
{
    $where = "email = '".$_POST['email']."'";
   
$ObjUser = new users;
$data = $ObjUser->getData($where);
if ($data != NULL)
    {
        $password = $objUser->generatePassword();
       
        $data[0]['password'] = $password;
        var_dump($password);
       
        $ObjUser->updateRecord($data[0]);
       
       
        foreach ($data as $row) {
                foreach ($row as $field => $value)
                {       
                    switch($field)
                    {   
                        case "username":
                            $tmpUsername = $value;
                            break;
                    }//switch
                }//Foreach
        }
               
        $ObjUser->sendmail($_POST['email'],"Brugernavn og kode til C2C.","Her er loginoplysninger: \n Brugernavn:".$tmpUsername."Kode: ".$password);
       
        echo "Brugernavn og kode, er sendt til din mail!";
    }
else
{
    $error = '<div id="error"><h3>Mail findes ikke i systemet!</h3></div>';
}
}

?>

Og koden til funktionen:
class users
{
    private $tablename;        // table name
    private $dbname;            // database name
    private $fieldlist;        // list of fields in this table
    private $data_array;        // data from the database
    public     $errors;            // array of error messages
 
    function users ()
    {
        $this->tablename      = 'users';
       
        $this->fieldlist = array('userID', 'username', 'password', 'firstname', 'lastname', 'email','admin', 'notes', 'createtimestamp', 'changetimestamp');
        $this->fieldlist['userID'] = array('pkey' => 'y');
    } // constructor

function generatePassword ()
    {
        //definerer længde
        $length = 8;
         
        // Definer gyldige tegn
        $possible = "0123456789bcdfghjkmnpqrstvwxyz";
           
        // Sæt en counter
        $i = 0;
         
        // Smid random tegn i $password til $length er opnået
        while ($i < $length)
            {
   
            // tager en random karakter, fra $possible
            $char = substr($possible, mt_rand(0, strlen($possible)-1), 1);
           
                // Karakterer må ikke optræde 2 gange
                if (!strstr($password, $char)) {
                  $password .= $char;
                  $i++;
                }//if

              }//while

  // Færdig!
  return $password;

}
       
}
?>
Avatar billede junold Nybegynder
01. april 2008 - 10:18 #3
Jeg har fjernet en masse funktioner i klassen, for det er jo ikke dem der fejler, så gik ikke ud fra de var interessante..
Avatar billede junold Nybegynder
01. april 2008 - 12:23 #4
Nå jeg fandt selv fejlen! En af de fejl man bliver VED med at overse!!!

$objUser skal jo være $ObjUser - altså med stort O, som objektet! ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester