OOP based?
En voorbeeld hoe het zou moeten bij mijn site [die in verbinding staan met een spel server].
Voorbeeld:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|---------------------------------------------------------|
| UserMapper | User |
|---------------------------------------------------------|
| -Db | -Name |
| -Table | -Password |
| | -Id |
| | -Lastlogin |
| | -Money |
|---------------------------|-----------------------------|
| +SetDb(db) | +SetName(name : string) |
| +GetById(id : int) | +GetName() |
| +GetByName(name : string) | +SetPass(pass : string) |
| +Create(user : string) | +GetPass() |
| +Delete(user : string) | +SetId(id : int) |
| | +GetId() |
| | +SetMoney(money : int) |
| | +GetMoney() |
| | +SetLastLogin(date : string)|
| | +GetLastLogin() |
|---------------------------------------------------------|
| UserMapper | User |
|---------------------------------------------------------|
| -Db | -Name |
| -Table | -Password |
| | -Id |
| | -Lastlogin |
| | -Money |
|---------------------------|-----------------------------|
| +SetDb(db) | +SetName(name : string) |
| +GetById(id : int) | +GetName() |
| +GetByName(name : string) | +SetPass(pass : string) |
| +Create(user : string) | +GetPass() |
| +Delete(user : string) | +SetId(id : int) |
| | +GetId() |
| | +SetMoney(money : int) |
| | +GetMoney() |
| | +SetLastLogin(date : string)|
| | +GetLastLogin() |
|---------------------------------------------------------|
Ik hoop dat ik het zo goed heb ? zit best wel veel tijd in xD
maar hoe zit het dan met inloggen dat lijkt me dan dat je dat zo doet:
en dat dat dan true of false returnt...
of niet?
Gewijzigd op 21/06/2012 20:30:16 door Lex van der poel
Verder zijn de parameters van de login functie niet helemaal correct. De waardes, user en password, zijn eigenschappen van de user. Je maakt dus eerst een user object aan en vervolgens stop je die in de UserMapper::login() functie:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
// afhandeling van form
$userMapper = new UserMapper($PDO);
$user = new User($_POST['name'], $_POST['pass']);
$user = $userMapper->logIn($user);
?>
// afhandeling van form
$userMapper = new UserMapper($PDO);
$user = new User($_POST['name'], $_POST['pass']);
$user = $userMapper->logIn($user);
?>
De logIn functie zal dan het user object retourneren met daarin een eigenschap loggedIn op true gezet oid. Mocht het wachtwoord verkeerd zijn wordt er een Exception (error) gegooid (throw).
Als tip wil ik nog meegeven dat je je aan een Coding standard zal moeten houden, dat maakt je code een stuk meer leesbaar voor andere developers. Coding standards zijn bijv. die van Symfony, ZEND of PEAR. Zo moet een method naam altijd beginnen met een kleine letter en een klassenaam met een hoofdletter.
Toevoeging op 21/06/2012 20:41:42:
en kan je trouwens html gebruiken in dit forum?? want volgens mij zie ik een <hr> tag?
Toevoeging op 21/06/2012 20:57:41:
en kan dit nader uitgelegt worden was reactie van [Wouter J]
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
class Send
{
public function query($str)
{
return mysql_query($str);
}
}
class Sql
{
// gebruik NOOIT public variabelen --- Wat bedoel je daarmee dat dit wat hieronder gebeurt onhandig is?
public $send;
public function __construct()
{
$this->send = new Send();
}
}
$sql = new Sql();
$sql->send->query('...');
?>
class Send
{
public function query($str)
{
return mysql_query($str);
}
}
class Sql
{
// gebruik NOOIT public variabelen --- Wat bedoel je daarmee dat dit wat hieronder gebeurt onhandig is?
public $send;
public function __construct()
{
$this->send = new Send();
}
}
$sql = new Sql();
$sql->send->query('...');
?>
Lex van der poel op 21/06/2012 20:34:40:
Oke dus ik begin het te snappen maar waar is de functie $PDO voor?
Kijk eens even naar pdo. PDO is de abstractie laag waar ik het al eens over had. Via PDO kan je verschillende databasen aanspreken wat het makkelijk maakt als je bijvoorbeeld moet wisselen van db.
Quote:
Toevoeging op 21/06/2012 20:41:42:
en kan je trouwens html gebruiken in dit forum?? want volgens mij zie ik een <hr> tag?
en kan je trouwens html gebruiken in dit forum?? want volgens mij zie ik een <hr> tag?
Neen, nog steeds gewoon BB-code: http://www.phphulp.nl/veel-gestelde-vragen/#bbcode
Quote:
Wat begrijp je nog niet?
Gewijzigd op 21/06/2012 21:01:13 door Jasper DS
Code (php)
zal werken...
en watt __construct() doet.
Toevoeging op 21/06/2012 21:20:39:
Haha ik heb het door ik heb nu dit maar ga ik ombouwen tot script voor mijn website met OOP gedachtengang :P
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
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
<?php
class Send
{
public function query($str)
{
echo $str;
}
}
class Recive
{
public function query($str)
{
echo $str;
}
}
class Main
{
public $send;
public function __construct()
{
$this->send = new Send();
$this->recive = new Recive();
}
}
$main = new Main();
$main->send->query('...');
echo "<br />";
$main->recive->query('...2');
?>
class Send
{
public function query($str)
{
echo $str;
}
}
class Recive
{
public function query($str)
{
echo $str;
}
}
class Main
{
public $send;
public function __construct()
{
$this->send = new Send();
$this->recive = new Recive();
}
}
$main = new Main();
$main->send->query('...');
echo "<br />";
$main->recive->query('...2');
?>
output:
Tevens moet je nooit een echo plaatsen in een functie, altijd retourneren en dan pas in de procedurele code beslissen wat je er mee gaat doen (opslaan in var, echo, enz.)
Tevens gebruik je bijna nooit public properties, altijd protected of private. Je moet getters en setters maken om toegang te krijgen tot die vars.
En je Main object is hier nutteloos, je moet dit gewoon in je procedurele code plaatsen.
Als laatst heb je de property $recive niet gedefinieerd in de Main klasse en is het recieve. Ook heeft deze code natuurlijk niks met je bovenstaande idee te maken...
heb ik nu gedaan kijk maar.
ik heb het nu wel gebruikt.
main object heb ik code in geplaatst.
heb ik toegevoegd en verbeterd.
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
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
<?php
class Main {
function connect($db_Host, $db_User, $db_Password) {
$link = mysql_connect($db_Host, $db_User, $db_Password);
if(!$link) {
return false;
} else {
return true;
}
}
function select($db) {
$db = mysql_select_db($db);
if(!$db) {
return false;
} else {
return true;
}
}
function login($username, $userpassword) {
$username = @trim($username);
$userpassword = @trim($userpassword);
if(get_magic_quotes_gpc()) {
$username = stripslashes($username);
$userpassword = stripslashes($userpassword);
}
$username = mysql_real_escape_string($username);
$userpassword = md5(mysql_real_escape_string($userpassword));
$result = mysql_query("SELECT * FROM users WHERE username='" . $username . "' AND password='" . $userpassword . "'");
if($result) {
if(mysql_num_rows($result) == 1) {
session_start();
session_regenerate_id();
$row = mysql_fetch_assoc($result);
$_SESSION['SESS_USERNAME'] = $row['username'];
$_SESSION['SESS_LASTLOGIN'] = $row['lastlogin'];
$_SESSION['SESS_USERID'] = $row['ID'];
session_write_close();
$main->send->updateLastLogin();
return true;
} else {
return false;
}
} else {
return false;
}
}
public $send;
public $recieve;
public function __construct() {
$this->send = new Send();
$this->recieve = new Recieve();
}
}
class Send {
public function updateLastLogin() {
mysql_query("UPDATE users SET lastlogin = NOW() WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
}
}
class Recieve {
public function getUserName() {
return $_SESSION['SESS_USERNAME'];
}
public function getUserId() {
return $_SESSION['SESS_USERID'];
}
public function getLastLogin() {
return $_SESSION['SESS_LASTLOGIN'];
}
}
//---------------------- end of class----------------
$main = new Main();
if($main->connect("db-host", "db-user", "db password") === true) {
if($main->select("db-name") === true){
if($main->login($_POST["username"], $_POST["password"]) === true) {
echo "You are logged in:" . $main->Recieve->getUserName();
} else {
die("Username and Password combination does not match");
}
} else {
die("Unable to select database, Please contact the site administrator");
}
} else {
die("Unable to connect to server, Please contact the site administrator");
}
?>
class Main {
function connect($db_Host, $db_User, $db_Password) {
$link = mysql_connect($db_Host, $db_User, $db_Password);
if(!$link) {
return false;
} else {
return true;
}
}
function select($db) {
$db = mysql_select_db($db);
if(!$db) {
return false;
} else {
return true;
}
}
function login($username, $userpassword) {
$username = @trim($username);
$userpassword = @trim($userpassword);
if(get_magic_quotes_gpc()) {
$username = stripslashes($username);
$userpassword = stripslashes($userpassword);
}
$username = mysql_real_escape_string($username);
$userpassword = md5(mysql_real_escape_string($userpassword));
$result = mysql_query("SELECT * FROM users WHERE username='" . $username . "' AND password='" . $userpassword . "'");
if($result) {
if(mysql_num_rows($result) == 1) {
session_start();
session_regenerate_id();
$row = mysql_fetch_assoc($result);
$_SESSION['SESS_USERNAME'] = $row['username'];
$_SESSION['SESS_LASTLOGIN'] = $row['lastlogin'];
$_SESSION['SESS_USERID'] = $row['ID'];
session_write_close();
$main->send->updateLastLogin();
return true;
} else {
return false;
}
} else {
return false;
}
}
public $send;
public $recieve;
public function __construct() {
$this->send = new Send();
$this->recieve = new Recieve();
}
}
class Send {
public function updateLastLogin() {
mysql_query("UPDATE users SET lastlogin = NOW() WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
}
}
class Recieve {
public function getUserName() {
return $_SESSION['SESS_USERNAME'];
}
public function getUserId() {
return $_SESSION['SESS_USERID'];
}
public function getLastLogin() {
return $_SESSION['SESS_LASTLOGIN'];
}
}
//---------------------- end of class----------------
$main = new Main();
if($main->connect("db-host", "db-user", "db password") === true) {
if($main->select("db-name") === true){
if($main->login($_POST["username"], $_POST["password"]) === true) {
echo "You are logged in:" . $main->Recieve->getUserName();
} else {
die("Username and Password combination does not match");
}
} else {
die("Unable to select database, Please contact the site administrator");
}
} else {
die("Unable to connect to server, Please contact the site administrator");
}
?>
Verder wat hebben die object namen nou te maken met een user enz.? En een main object die de login regelt??
Kijk eens naar wat je hierboven nou hebt gemaakt (die tabel in de 1e post) dat lijkt toch 0 komma 0 op het geen jij hier nu hebt getypt?
Ik zie geen form afhandeling? Wat als nou iets niet is ingevuld? Waar komt $main->Recieve vandaan? Naar mijn mening is dit $main->recieve?
Wat zei ik nou? Geen publieke properties... En ook: geef het user object mee aan de UserMapper.
Verder zie ik lelijke foutonderdrukking, magic_quotes (!!!), slechte afhandeling: als Main::login() false retourneert kunnen er meer dingen fout zijn, gooi zoals al gezegd de error in het object en niet daarbuiten.
Nee, sorry als ik boos of slecht overkom. Maar als ik dit zo zie zal je eerst eens heel goed je PHP kennis moeten bijspijkeren, OO denken is echt nog 100 stappen te ver...
Toevoeging op 21/06/2012 22:33:03:
okay ik heb dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|---------------------------------------------------------|
| UserMapper | User |
|---------------------------------------------------------|
| -Db | -Name |
| -Table | -Password |
| | -Id |
| | -Lastlogin |
| | -Money |
|---------------------------|-----------------------------|
| +SetDb(db) | +SetName(name : string) |
| +GetById(id : int) | +GetName() |
| +GetByName(name : string) | +SetPass(pass : string) |
| +Create(user : string) | +GetPass() |
| +Delete(user : string) | +SetId(id : int) |
| | +GetId() |
| | +SetMoney(money : int) |
| | +GetMoney() |
| | +SetLastLogin(date : string)|
| | +GetLastLogin() |
|---------------------------------------------------------|
| UserMapper | User |
|---------------------------------------------------------|
| -Db | -Name |
| -Table | -Password |
| | -Id |
| | -Lastlogin |
| | -Money |
|---------------------------|-----------------------------|
| +SetDb(db) | +SetName(name : string) |
| +GetById(id : int) | +GetName() |
| +GetByName(name : string) | +SetPass(pass : string) |
| +Create(user : string) | +GetPass() |
| +Delete(user : string) | +SetId(id : int) |
| | +GetId() |
| | +SetMoney(money : int) |
| | +GetMoney() |
| | +SetLastLogin(date : string)|
| | +GetLastLogin() |
|---------------------------------------------------------|
ik denk dat ik nog een +Connect(dbhost : string, dbuser : string, dbpass : string)
nodig heb om met de database te verbinden dan gebruik ik +SetDb(db) om de database te selecteren. en dan +GetByName(name : string) om een array te krijgen met alle gegevens die aan het gebruikersnaam zijn gekopelt en dan controleert of het wachtwoord klopt maar wat moet ik dan doen als het wachtwoord klopt alles opslaan in een paar sessions?
Gewijzigd op 21/06/2012 22:59:09 door lex van der poel
Je kan dus veel beter een andere class bouwen die de database verbinding verzorgd (misschien zelfs wel splitsen in meerder classes). Die class (of classes) verzorgen dan de verbinding, het selecteren van de database en het daadwerkelijk uitvoeren van de query. De usermapper roept die class aan met de query die moet worden uitgevoerd.
Maar dan heb ik de usermaper toch ook niet meer nodig want user zorgt in pricipe voor alle info van de user...
De class usermapper zorgt ervoor dat de data opgehaald wordt en weggeschreven wordt. In dit geval richting een database, maar misschien in een volgende applicatie haal je het op van een andere site (en heb je dus bijvoorbeeld een cUrl actie nodig om het via de API van die andere site op te halen).
De database class zorgt weer voor de echte interactie met de database en kan je eventueel vervangen als je naar een andere database overstapt (van MySQL naar Oracle bijvoorbeeld).
Zo heeft elke class zijn eigen taak en zorgen veranderingen in een deel van je opzet, niet meteen voor veranderingen in alle classes.
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
<?php
class Main {
}
public $User;
public $UserMapper;
public function __construct() {
$this->User = new User();
$this->UserMapper = new UserMapper();
}
}
class User {
}
class UserMapper {
}
//---------------------- end of class----------------
$main = new Main();
if($main->connect("db-host", "db-user", "db password") === true) {
if($main->select("db-name") === true){
if($main->login($_POST["username"], $_POST["password"]) === true) {
echo "You are logged in:" . $main->Recieve->getUserName();
} else {
die("Username and Password combination does not match");
}
} else {
die("Unable to select database, Please contact the site administrator");
}
} else {
die("Unable to connect to server, Please contact the site administrator");
}
?>
class Main {
}
public $User;
public $UserMapper;
public function __construct() {
$this->User = new User();
$this->UserMapper = new UserMapper();
}
}
class User {
}
class UserMapper {
}
//---------------------- end of class----------------
$main = new Main();
if($main->connect("db-host", "db-user", "db password") === true) {
if($main->select("db-name") === true){
if($main->login($_POST["username"], $_POST["password"]) === true) {
echo "You are logged in:" . $main->Recieve->getUserName();
} else {
die("Username and Password combination does not match");
}
} else {
die("Unable to select database, Please contact the site administrator");
}
} else {
die("Unable to connect to server, Please contact the site administrator");
}
?>
Toevoeging op 22/06/2012 14:06:12:
want met $main->User->SetName('lol'); moet het in de db worden gezet maar aangezien dat via de usermapper moet moet ik een functie aanmaken in de usermapper om die weer aan te roepen in SetName...
Gewijzigd op 22/06/2012 14:09:10 door lex van der poel
1) Bij de construct van de User geef je een object van class UserMapper mee. Die sla je op in een property en elke keer dat er interactie nodig is roep je een methode aan via het property.
2) Je roept vanuit User de UserMapper niet aan, maar bij het ophalen van gegevens in de UserMapper creeer je een object van class User waar je direct de net opgehaalde gegegevens aan meegeeft.
3) User en UserMapper zien elkaar helemaal niet, maar vanuit de controller (of flat php bestand) wordt eerst de UserMapper aangeroepen om data op te halen die daarna doorgegeven wordt aan een object van class User.
En er zijn vast nog wel meer mogelijkheden, net wat het beste werkt in jouw applicatie. De eerste zou ik gebruiken als je verwacht veel interactie nodig te hebben, zoals bijvoorbeeld ook updates en je dus niet alleen maar gegevens hoeft op te halen.
zou je een voorbeeld van de eerste optie kunnen laten zien?
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
class User_Mapper{
public function getUser( $userid ){
//deze functie haalt de user gegevens op en returned het
}
}
class User{
private $userMapperObj;
private $userData;
public function __construct( User_Mapper $obj ){
$this->userMapperObj = $obj;
}
public function populate( $userid ){
$this->userData = $this->userMapperObj->getUser( $userid );
}
}
?>
class User_Mapper{
public function getUser( $userid ){
//deze functie haalt de user gegevens op en returned het
}
}
class User{
private $userMapperObj;
private $userData;
public function __construct( User_Mapper $obj ){
$this->userMapperObj = $obj;
}
public function populate( $userid ){
$this->userData = $this->userMapperObj->getUser( $userid );
}
}
?>
In de construct van User heb ik dus ook via een typehint aangegeven dat het object dat meegegeven moet worden van het type User_Mapper moet zijn. Als je het echt netjes doet geef je daar als typehint echter een interface mee en niet een class. Op die manier kan je namelijk verschillende classes schrijven die dezelfde interface implementeren. Waarbij een class de gegevens vanuit de database haalt, de ander via een externe website. Zelfs als je nu niet verwacht dit te gaan doen is het raadzaam om interfaces te gebruiken, omdat je dan veel flexibeler bent.
Toevoeging op 23/06/2012 17:12:02:
ik heb al een oplossing gevonden bedankt.
Toevoeging op 23/06/2012 18:49:26:
dit begint er toch al meer op te lijken?
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<?php
session_start();
class Main {
public $User;
public $UserMapper;
public $DataBase;
public function __construct() {
$this->User = new User();
$this->UserMapper = new UserMapper();
$this->DataBase = new DataBase();
}
}
class User {
public function CheckLogin() {
if(isset($_SESSION['SESS_USERNAME'])) {
return true;
} else {
return false;
}
}
public function GetName() {
return $_SESSION['SESS_USERNAME'];
}
public function SetName($str) {
$get->UserMapper = new UserMapper();
$get->UserMapper->Qeury(1, $str);
}
public function GetPass() {
return $_SESSION['SESS_USERPASSWORD'];
}
public function SetPass($str) {
$str = md5($str);
$get->UserMapper = new UserMapper();
$get->UserMapper->Qeury(2, $str);
}
public function GetMoney() {
return $_SESSION['SESS_USERMONEY'];
}
public function SetMoney($str) {
$get->UserMapper = new UserMapper();
$get->UserMapper->Qeury(3, $str);
}
public function GetId() {
return $_SESSION['SESS_USERID'];
}
public function SetId($str) {
$get->UserMapper = new UserMapper();
$get->UserMapper->Qeury(4, $str);
}
public function getLastLogin() {
return $_SESSION['SESS_LASTLOGIN'];
}
public function SetLastLogin($str) {
$get->UserMapper = new UserMapper();
$get->UserMapper->Qeury(5, $str);
}
public function UpdateLastLogin($str) {
$get->UserMapper = new UserMapper();
$get->UserMapper->Qeury(6);
}
}
class UserMapper {
function Query($str, $str1) {
if($str === 1) { // Sets Username
mysql_query("UPDATE users SET username = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
$_SESSION['SESS_USERNAME'] = $str1;
}
if($str === 2) { // Sets Password
mysql_query("UPDATE users SET password = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
$_SESSION['SESS_USERPASSWORD'] = $str1;
}
if($str === 3) { // Sets Money
mysql_query("UPDATE users SET money = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
$_SESSION['SESS_USERMONEY'] = $str1;
}
if($str === 4) { // Sets UserID
mysql_query("UPDATE users SET ID = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
$_SESSION['SESS_USERID'] = $str1;
}
if($str === 5) { // Sets Lastlogin
mysql_query("UPDATE users SET lastlogin = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
$_SESSION['SESS_LASTLOGIN'] = $str1;
}
if($str === 6) { // Updates Lastlogin
mysql_query("UPDATE users SET lastlogin = NOW() WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
$sql = mysql_query("SELECT lastlogin FROM users WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
$_SESSION['SESS_LASTLOGIN'] = $sql;
}
}
function Login($username, $userpassword) {
$username = @trim($username);
$userpassword = @trim($userpassword);
if(get_magic_quotes_gpc()) {
$username = stripslashes($username);
$userpassword = stripslashes($userpassword);
}
$username = mysql_real_escape_string($username);
$userpassword = md5(mysql_real_escape_string($userpassword));
if ($username === "") {
return 3;
} elseif ($userpassword === "") {
return 4;
} else {
$result = mysql_query("SELECT * FROM users WHERE username='" . $username . "' AND password='" . $userpassword . "'");
if($result) {
if(mysql_num_rows($result) == 1) {
session_regenerate_id();
$row = mysql_fetch_assoc($result);
$_SESSION['SESS_USERNAME'] = $row['username'];
$_SESSION['SESS_LASTLOGIN'] = $row['lastlogin'];
$_SESSION['SESS_USERID'] = $row['ID'];
$main->send->updateLastLogin();
return 1;
} else {
return 2;
}
} else {
return 5;
}
}
}
function Delete($str) {
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
$str = mysql_real_escape_string($str);
$sql = mysql_query("DELETE FROM users WHERE username='" . $str . "'");
if(!$sql) {
return false;
} else {
return true;
}
}
}
class DataBase {
function Connect($db_Host, $db_User, $db_Password) {
$link = mysql_connect($db_Host, $db_User, $db_Password);
if(!$link) {
return false;
} else {
return true;
}
}
function Select($str) {
$db = mysql_select_db($str);
if(!$db) {
return false;
} else {
return true;
}
}
}
//---------------------- end of class----------------
$main = new Main();
if($main->DataBase->Connect("localhost", "root", "root") === true) {
if($main->DataBase->Select("mysql") === true) {
if($main->User->CheckLogin() === false){
echo "please login";
} else {
echo"welcome";
}
} else {
echo"<html><head><title>Error</title></head><body><center><h1>Error: " . mysql_error() . "</h1></center></body></html>";
}
} else {
echo"<html><head><title>Error</title></head><body><center><h1>Error: " . mysql_error() . "</h1></center></body></html>";
}
session_write_close();
?>
session_start();
class Main {
public $User;
public $UserMapper;
public $DataBase;
public function __construct() {
$this->User = new User();
$this->UserMapper = new UserMapper();
$this->DataBase = new DataBase();
}
}
class User {
public function CheckLogin() {
if(isset($_SESSION['SESS_USERNAME'])) {
return true;
} else {
return false;
}
}
public function GetName() {
return $_SESSION['SESS_USERNAME'];
}
public function SetName($str) {
$get->UserMapper = new UserMapper();
$get->UserMapper->Qeury(1, $str);
}
public function GetPass() {
return $_SESSION['SESS_USERPASSWORD'];
}
public function SetPass($str) {
$str = md5($str);
$get->UserMapper = new UserMapper();
$get->UserMapper->Qeury(2, $str);
}
public function GetMoney() {
return $_SESSION['SESS_USERMONEY'];
}
public function SetMoney($str) {
$get->UserMapper = new UserMapper();
$get->UserMapper->Qeury(3, $str);
}
public function GetId() {
return $_SESSION['SESS_USERID'];
}
public function SetId($str) {
$get->UserMapper = new UserMapper();
$get->UserMapper->Qeury(4, $str);
}
public function getLastLogin() {
return $_SESSION['SESS_LASTLOGIN'];
}
public function SetLastLogin($str) {
$get->UserMapper = new UserMapper();
$get->UserMapper->Qeury(5, $str);
}
public function UpdateLastLogin($str) {
$get->UserMapper = new UserMapper();
$get->UserMapper->Qeury(6);
}
}
class UserMapper {
function Query($str, $str1) {
if($str === 1) { // Sets Username
mysql_query("UPDATE users SET username = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
$_SESSION['SESS_USERNAME'] = $str1;
}
if($str === 2) { // Sets Password
mysql_query("UPDATE users SET password = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
$_SESSION['SESS_USERPASSWORD'] = $str1;
}
if($str === 3) { // Sets Money
mysql_query("UPDATE users SET money = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
$_SESSION['SESS_USERMONEY'] = $str1;
}
if($str === 4) { // Sets UserID
mysql_query("UPDATE users SET ID = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
$_SESSION['SESS_USERID'] = $str1;
}
if($str === 5) { // Sets Lastlogin
mysql_query("UPDATE users SET lastlogin = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
$_SESSION['SESS_LASTLOGIN'] = $str1;
}
if($str === 6) { // Updates Lastlogin
mysql_query("UPDATE users SET lastlogin = NOW() WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
$sql = mysql_query("SELECT lastlogin FROM users WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
$_SESSION['SESS_LASTLOGIN'] = $sql;
}
}
function Login($username, $userpassword) {
$username = @trim($username);
$userpassword = @trim($userpassword);
if(get_magic_quotes_gpc()) {
$username = stripslashes($username);
$userpassword = stripslashes($userpassword);
}
$username = mysql_real_escape_string($username);
$userpassword = md5(mysql_real_escape_string($userpassword));
if ($username === "") {
return 3;
} elseif ($userpassword === "") {
return 4;
} else {
$result = mysql_query("SELECT * FROM users WHERE username='" . $username . "' AND password='" . $userpassword . "'");
if($result) {
if(mysql_num_rows($result) == 1) {
session_regenerate_id();
$row = mysql_fetch_assoc($result);
$_SESSION['SESS_USERNAME'] = $row['username'];
$_SESSION['SESS_LASTLOGIN'] = $row['lastlogin'];
$_SESSION['SESS_USERID'] = $row['ID'];
$main->send->updateLastLogin();
return 1;
} else {
return 2;
}
} else {
return 5;
}
}
}
function Delete($str) {
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
$str = mysql_real_escape_string($str);
$sql = mysql_query("DELETE FROM users WHERE username='" . $str . "'");
if(!$sql) {
return false;
} else {
return true;
}
}
}
class DataBase {
function Connect($db_Host, $db_User, $db_Password) {
$link = mysql_connect($db_Host, $db_User, $db_Password);
if(!$link) {
return false;
} else {
return true;
}
}
function Select($str) {
$db = mysql_select_db($str);
if(!$db) {
return false;
} else {
return true;
}
}
}
//---------------------- end of class----------------
$main = new Main();
if($main->DataBase->Connect("localhost", "root", "root") === true) {
if($main->DataBase->Select("mysql") === true) {
if($main->User->CheckLogin() === false){
echo "please login";
} else {
echo"welcome";
}
} else {
echo"<html><head><title>Error</title></head><body><center><h1>Error: " . mysql_error() . "</h1></center></body></html>";
}
} else {
echo"<html><head><title>Error</title></head><body><center><h1>Error: " . mysql_error() . "</h1></center></body></html>";
}
session_write_close();
?>
bumb
Wouter J op 21/06/2012 21:38:12:
__construct is een van die hele nuttige magic methods in PHP OO. Lees anders ook eens rustig die OOP beginnershandleiding, wordt het allemaal uitgelegd...
Tevens moet je nooit een echo plaatsen in een functie, altijd retourneren en dan pas in de procedurele code beslissen wat je er mee gaat doen (opslaan in var, echo, enz.)
Tevens gebruik je bijna nooit public properties, altijd protected of private. Je moet getters en setters maken om toegang te krijgen tot die vars.
En je Main object is hier nutteloos, je moet dit gewoon in je procedurele code plaatsen.
Als laatst heb je de property $recive niet gedefinieerd in de Main klasse en is het recieve. Ook heeft deze code natuurlijk niks met je bovenstaande idee te maken...
Tevens moet je nooit een echo plaatsen in een functie, altijd retourneren en dan pas in de procedurele code beslissen wat je er mee gaat doen (opslaan in var, echo, enz.)
Tevens gebruik je bijna nooit public properties, altijd protected of private. Je moet getters en setters maken om toegang te krijgen tot die vars.
En je Main object is hier nutteloos, je moet dit gewoon in je procedurele code plaatsen.
Als laatst heb je de property $recive niet gedefinieerd in de Main klasse en is het recieve. Ook heeft deze code natuurlijk niks met je bovenstaande idee te maken...
Beetje tegenstrijdig wat je nu zegt. Een paar maanden geleden zei jij tegen me dat je in een method nooit een echo plaatst, behalve in een layout method o.i.d..
Lex, waarom stap je niet af van die Main klasse? Dat maakt de hele boel onduidelijk.
En tevens lijkt de UserMapper nog steeds niet op het geen je in Post 1 had, het geen goed was. Kijk eens naar deze reactie van Pim, of deze reactie van mij. Misschien dat het dan wat begrijpelijker wordt.
Ik snap 'm nu.