PDO Probleem.
Zelf ben ik redelijk nieuw op dit forum, en dat komt omdat ik ook nieuw ben in OOP PHP.
Nu zit ik met een probleem, ik heb een paar klasses geschreven om een login systeempje te maken, het is allemaal nog niet netjes maar daar gaat het me nu even niet om haha.
Ik wil dus gebruik maken van PDO, en die heeft een aantal eigen functies zoals prepare().. en daar wil ik gebruik van maken, alleen dat kan niet in mijn klasse.. hij geeft deze error:
Quote:
Fatal error: Call to undefined method Database::prepare() in /home/kwzXDGoJvK/domains/isbaas.nl/public_html/login/classes/gebruikermapper.class.php on line 21
Mijn code is als volgt:
database.class.php
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
class Database {
private $conn;
public function __construct()
{
$this->conn = new PDO('mysql:host=localhost;dbname=kwzXDGoJvK_test', 'kwzXDGoJvK_test', 'test');
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if($this -> conn -> getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql')
{
$this -> conn -> setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$this -> conn -> setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
}
return $this->conn;
}
}
[/code]
gebruiker.class.php
[code]
[code]<?php
require_once'gebruikermapper.class.php';
include_once ('database.class.php');
class Gebruiker {
protected $username;
protected $pass;
public function valideer_gebruiker($username, $pass)
{
$db = new Database();
$geb = new Gebruiker($db);
$gebMap = new GebruikerMapper($db, $geb);
$ingelogd = $gebMap->check_gebruiker($username, md5($pass));
if($ingelogd == '1')
{
$_SESSION['status'] = 'ingelogd';
header("location: /login/admin/index.php");
} else return "Paswoord en gebruikersnaam komen niet overeen";
}
public function uitloggen()
{
if(isset($_SESSION['status'])) {
unset($_SESSION['status']);
}
return "Uitgelogd";
}
public function confirm_gebruiker ()
{
session_start();
if($_SESSION['status'] != 'ingelogd') header("location: /login/login.php");
}
}
[/code]
gebruikermapper.class.php
[code]
[code]<?php
include_once ('database.class.php');
class GebruikerMapper {
private $db;
private $pdo;
public function __construct(Database $db)
{
$this->db = $db;
$this->pdo = new Database();
}
public function check_gebruiker($user, $pass)
{
$query = "SELECT EXISTS(SELECT * FROM Gebruiker WHERE username=? AND password=?) AS ingelogd;";
$result = $this->pdo->prepare($query);
$result->execute(array($user, $pass));
$data = $result->fetch();
return $data['ingelogd'] == '1';
}
}
[/code]
Hoe krijg ik dit probleem opgelost? ik heb hem ingeclude (gebruikermapper en database staan in zelfde folder), ik heb een assocatie gelegd in constructor van gebruikermapper.
Iemand die mij hier meer uitleg over kan geven?
Alvast bedankt.
class Database {
private $conn;
public function __construct()
{
$this->conn = new PDO('mysql:host=localhost;dbname=kwzXDGoJvK_test', 'kwzXDGoJvK_test', 'test');
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if($this -> conn -> getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql')
{
$this -> conn -> setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$this -> conn -> setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
}
return $this->conn;
}
}
[/code]
gebruiker.class.php
[code]
[code]<?php
require_once'gebruikermapper.class.php';
include_once ('database.class.php');
class Gebruiker {
protected $username;
protected $pass;
public function valideer_gebruiker($username, $pass)
{
$db = new Database();
$geb = new Gebruiker($db);
$gebMap = new GebruikerMapper($db, $geb);
$ingelogd = $gebMap->check_gebruiker($username, md5($pass));
if($ingelogd == '1')
{
$_SESSION['status'] = 'ingelogd';
header("location: /login/admin/index.php");
} else return "Paswoord en gebruikersnaam komen niet overeen";
}
public function uitloggen()
{
if(isset($_SESSION['status'])) {
unset($_SESSION['status']);
}
return "Uitgelogd";
}
public function confirm_gebruiker ()
{
session_start();
if($_SESSION['status'] != 'ingelogd') header("location: /login/login.php");
}
}
[/code]
gebruikermapper.class.php
[code]
[code]<?php
include_once ('database.class.php');
class GebruikerMapper {
private $db;
private $pdo;
public function __construct(Database $db)
{
$this->db = $db;
$this->pdo = new Database();
}
public function check_gebruiker($user, $pass)
{
$query = "SELECT EXISTS(SELECT * FROM Gebruiker WHERE username=? AND password=?) AS ingelogd;";
$result = $this->pdo->prepare($query);
$result->execute(array($user, $pass));
$data = $result->fetch();
return $data['ingelogd'] == '1';
}
}
[/code]
Hoe krijg ik dit probleem opgelost? ik heb hem ingeclude (gebruikermapper en database staan in zelfde folder), ik heb een assocatie gelegd in constructor van gebruikermapper.
Iemand die mij hier meer uitleg over kan geven?
Alvast bedankt.
Gewijzigd op 28/11/2010 23:50:59 door Mittchel Van Vliet
Nee, een gebruiker mapper is toch geen database?
Mittchel Van Vliet op 29/11/2010 01:10:49:
Nee, een gebruiker mapper is toch geen database?
Ik neem aan dat Karl de Database class bedoeld. Deze class heeft namelijk helemaal geen methods, tenzij je het een extensie van de PDO class maakt.