member function query()
Ik zit met het volgende ik heb een MSSQL class
Die ik zo defineer $db = new MSSQL()
nu heb ik ook een user class gemaakt en om te testen heb ik maar 1 ding er in gezet
dit is de user class
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
Class USERS
{
private $_User;
public function Pass($string)
{
return(md5('Salt'.$string.'Pepper'));
}
public function SelUser($user,$password)
{
$db->query('USE ACCOUNT_DBF');
$result = $db->query('SELECT account, password FROM ACCOUNT_TBL WHERE account = "'.$user.'" AND password = "'.$this->Pass($password).'"');
if($db->numRows($result) > 0 )
{
$loggedIn = 1;
}
}
}
?>
Class USERS
{
private $_User;
public function Pass($string)
{
return(md5('Salt'.$string.'Pepper'));
}
public function SelUser($user,$password)
{
$db->query('USE ACCOUNT_DBF');
$result = $db->query('SELECT account, password FROM ACCOUNT_TBL WHERE account = "'.$user.'" AND password = "'.$this->Pass($password).'"');
if($db->numRows($result) > 0 )
{
$loggedIn = 1;
}
}
}
?>
echter als ik inlog dan krijg ik deze foutmelding
Fatal error: Call to a member function query() on a non-object in class\users.php on line 14
Het gaat dan om deze lijn $db->query('USE ACCOUNT_DBF');
Nu heb ik dat zo gedaan
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
<?php
public function SelUser($user,$password)
{
$db = new MSSQL();
$db->connect('WIN-AEV8AVNHPGM\SQLEXPRESS', 'sa', '*****');
$db->query('USE ACCOUNT_DBF');
$result = $db->query('SELECT account, password FROM ACCOUNT_TBL WHERE account = "'.$user.'" AND password = "'.$this->Pass($password).'"');
if($db->numRows($result) > 0 )
{
$loggedIn = 1;
}
}
?>
public function SelUser($user,$password)
{
$db = new MSSQL();
$db->connect('WIN-AEV8AVNHPGM\SQLEXPRESS', 'sa', '*****');
$db->query('USE ACCOUNT_DBF');
$result = $db->query('SELECT account, password FROM ACCOUNT_TBL WHERE account = "'.$user.'" AND password = "'.$this->Pass($password).'"');
if($db->numRows($result) > 0 )
{
$loggedIn = 1;
}
}
?>
Maar zoals ik het zo zie moet ik dan voor elke public function de DB opnieuw laten connecten.
En daar zie ik het nu niet zo 123 van in als ik al eenmaal een connectie heb gemaakt.
Wie kan mij hierbij een goede uitleg geven zodat ik maar 1 keer de connectie naar de DB hoef te maken en dan met de MSSQL class de rest van de connecties kan maken in andere classes.
Met vriendelijke groet,
Thomas de Vries.
Gewijzigd op 11/02/2014 05:16:13 door Thomas de vries
2) Ik stel voor dat je aan dependency injection gaat doen:
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
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
<?php
class User // waarom meervoud? Één object vertegenvoordigd één user, niet meerdere.
{
private $_DB;
private $_User;
public function __construct($db) {
$this->_DB = $db;
}
public function Pass($string)
{
return(md5('Salt'.$string.'Pepper'));
}
public function SelUser($user,$password) // Sel? Kort voor Select? erg onduidelijk...
{
$this->_DB->query('USE ACCOUNT_DBF');
$result = $this->_DB->query('SELECT account, password FROM ACCOUNT_TBL WHERE account = "'.$user.'" AND password = "'.$this->Pass($password).'"');
if($this->_DB->numRows($result) > 0 )
{
$loggedIn = 1; // ik stel voor dat je true returned?
}
}
}
$darsstar = new User($db);
$darsstar->SelUser('Darsstar', 'meow');
?>
class User // waarom meervoud? Één object vertegenvoordigd één user, niet meerdere.
{
private $_DB;
private $_User;
public function __construct($db) {
$this->_DB = $db;
}
public function Pass($string)
{
return(md5('Salt'.$string.'Pepper'));
}
public function SelUser($user,$password) // Sel? Kort voor Select? erg onduidelijk...
{
$this->_DB->query('USE ACCOUNT_DBF');
$result = $this->_DB->query('SELECT account, password FROM ACCOUNT_TBL WHERE account = "'.$user.'" AND password = "'.$this->Pass($password).'"');
if($this->_DB->numRows($result) > 0 )
{
$loggedIn = 1; // ik stel voor dat je true returned?
}
}
}
$darsstar = new User($db);
$darsstar->SelUser('Darsstar', 'meow');
?>
En trouwen s iets randoms. Mijn broetje heet ook Thomas de Vries :P
Helaas is het zo dat ik met Md5 moet werken ivm c++ applicatie die ook met md5 de gegevens uit de DB haalt.
Dus vandaar dat ik de gegevens ook dien op te slaan met MD5.
En hoe zou jij het doen met SelUser ik vindt het voor mij duidelijk genoeg maar dat komt ook omdat ik het heb gemaakt. en idd $loggedIn = 1; is eem true returnen. Ik heb het wel nu anders aangepakt. Zodra er meer dan 1 row is wordt gelijk de session aangemaakt en de user geredirect naar de juiste pagina.