User class
Quote:
Fatal error: Call to a member function getUsername() on a non-object in /public/sites/test.royvanbreugel.nl/index.php on line 10
Iemand een idee waar het mis gaat?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// user.class.php
<?php
class User
{
private $_username;
private $_email;
public function __construct($user)
{
$this->setUsername($user["username"]);
$this->setEmail($user["email"]);
}
public function getUsername()
{
return $this->_username;
}
public function setUsername($username)
{
$this->_username = $username;
}
public function getEmail()
{
return $this->_email;
}
public function setEmail($email)
{
$this->_email = $email;
}
}
?>
<?php
class User
{
private $_username;
private $_email;
public function __construct($user)
{
$this->setUsername($user["username"]);
$this->setEmail($user["email"]);
}
public function getUsername()
{
return $this->_username;
}
public function setUsername($username)
{
$this->_username = $username;
}
public function getEmail()
{
return $this->_email;
}
public function setEmail($email)
{
$this->_email = $email;
}
}
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// usermapper.class.php
<?php
class UserMapper
{
private $_database;
public function __construct($database)
{
$this->_database = $database;
}
public function selectUserById($id)
{
// Select user from database
$select = "SELECT * FROM users WHERE id = '".$id."'";
$query = $this->_database->prepare($select);
$query->execute();
// Fetch remaining user
$result = $query->fetchAll();
// Create User object
$user = new User($result);
return $user;
}
}
?>
<?php
class UserMapper
{
private $_database;
public function __construct($database)
{
$this->_database = $database;
}
public function selectUserById($id)
{
// Select user from database
$select = "SELECT * FROM users WHERE id = '".$id."'";
$query = $this->_database->prepare($select);
$query->execute();
// Fetch remaining user
$result = $query->fetchAll();
// Create User object
$user = new User($result);
return $user;
}
}
?>
Code (php)
Gewijzigd op 12/01/2013 14:35:02 door Roy B
je moet zoiets doen:
Code (php)
PS: waarom is $userid een string en geen integer?
Gewijzigd op 12/01/2013 14:39:08 door Bo Ter Ham
Bo Ter Ham op 12/01/2013 14:38:05:
je hebt $user niet gedefnieerd.
Het User object wordt toch gedefinieerd in de methode?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
{
// Select user from database
$select = "SELECT * FROM users WHERE id = '".$id."'";
$query = $this->_database->prepare($select);
$query->execute();
// Fetch remaining user
$result = $query->fetchAll();
// Create User object
$user = new User($result);
return $user;
}
// Select user from database
$select = "SELECT * FROM users WHERE id = '".$id."'";
$query = $this->_database->prepare($select);
$query->execute();
// Fetch remaining user
$result = $query->fetchAll();
// Create User object
$user = new User($result);
return $user;
}
Gewijzigd op 12/01/2013 14:43:55 door Roy B
Het wordt wel gedefinieerd, maar als je de return waarde van die functie nergens aan toewijst dat verdwijnt dat stuk geheugen weer als sneeuw voor de zon.
Klopt! De foutmelding is verholpen. Alleen zit er nu nog een probleem in het laden van de data uit de database. Ik krijg geen resultaat als ik een echo '$user->getUsername()' uitvoer.
Dat kun je makkelijk nagaan door print_r($result) te doen en te kijken of username en email wel in de array zitten.
Bo Ter Ham op 12/01/2013 15:07:22:
Nou, volgens mij zit er geen fout in de code die je hier laat zien, dat betekent dat het ergens in je database class fout gaat.
Dat kun je makkelijk nagaan door print_r($result) te doen en te kijken of username en email wel in de array zitten.
Dat kun je makkelijk nagaan door print_r($result) te doen en te kijken of username en email wel in de array zitten.
De data blijkt wel in de array te zitten, dus ergens met het aanmaken van het 'User object' gaat er iets mis.
Je haalt de gegevens op met 'fetchAll', wat betekent dat je resultset meerdere records (kan) bevatten. Je moet dus het eerste element in die array hebben. Dus:
Toevoeging op 12/01/2013 15:14:37:
Daarbij is het overigens ook nog wel zo netjes om te controleren of de data er wel is. In je mapper check je nergens of de query wel gelukt is en of de user wel gevonden is. Wat nu als het verkeerde id is meegegeven?
Hoe zou ik die data kunnen controleren?
2) check of je database query wel gelukt is
3) check of je wel 1 record hebt teruggekregen
4) check in je user object of je wel de juiste data hebt gekregen. Wat als je morgen de data op een andere manier ophaalt en je array dus niet meer dezelfde structuur heeft?
Kun je een voorbeeld geven van hoe het beter zou kunnen?
hints:
1) http://nl1.php.net/manual/en/pdo.query.php
2) http://nl1.php.net/manual/en/pdo.query.php
3) http://nl1.php.net/count
4) http://nl1.php.net/isset