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.
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;
}
}
?>
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..
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! ;)