member function query()

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Thomas de vries

thomas de vries

11/02/2014 05:14:20
Quote Anchor link
Goedemorgen,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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;
        }
    }
}

?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
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;
        }
    }

?>


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
 
PHP hulp

PHP hulp

25/04/2024 10:57:17
 
Dos Moonen

Dos Moonen

11/02/2014 07:55:28
Quote Anchor link
1) Ik hoop dat je password hashing functie (die trouwens niet in een user class hoort) een heel erg versimpeld voorbeeld is. md5 is een slecht password hashing algoritme omdat het snel is. Gebruik bcrypt, scrypt of PKBDS2. Bcrypt is simpel te gebruiken met de password_hash() functie in PHP 5.5, voor PHP 5.3.7 en hoger is er een php implementatie te vinden.

2) Ik stel voor dat je aan dependency injection gaat doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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');
?>
 
Joey de Vries

Joey de Vries

11/02/2014 08:18:25
Quote Anchor link
Ik ziet dat iemand all met een goeden code heeft geantwoord.

En trouwen s iets randoms. Mijn broetje heet ook Thomas de Vries :P
 
Thomas de vries

thomas de vries

12/02/2014 07:12:34
Quote Anchor link
Bedankt Dos Moonen.

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.