OOP PDO Member systeem vraag

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Pagina: « vorige 1 2

Robert  dat ben ik

Robert dat ben ik

27/03/2011 11:40:55
Quote Anchor link
Noppes Homeland op 27/03/2011 11:28:18:
Het is dan wel OOP maar gebruikt op een zeer inefficiente manier.

Nu nog al die onzin eruit met prefix underscore bij variabelen en functies. Je bent ook niet zo consequent in de manier waarop je je functies en variabelen schrijft.
Het is alles camelcase of alles lowercase.

Voor de rest zie ik nog steeds dat je queries afvuurt binnen de class, niet doen, op deze manier is de class niet herbruikbaar voor andere projecten.

Je bent nog steeds bezig met het dubbelop registreren / opslaan van gegevens, dus maak geen overbodige variabelen aan!!

Oh en een sql statement valt niet onder het kopje string, want binnen het SQL statement dien je al te quoten met enkele quotes en niet met ""
Dus SQL statement wel quoten met "".





bedankt voor je goeie reactie
ik heb het even aangepast

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
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
<?php
 
class User {

    private $db;

    public function __construct( PDO $db ) {

        $this->db = $db;
    }


    public function getid( $username ) {
        $this->getuserdata($username);
        $this->userid = $this->userdata['id'];
    }


    public function getname( $username ) {
        $this->getuserdata($username);
        $this->username = $this->userdata['username'];
    }


    public function getemail( $username ) {
        $this->getuserdata($username);
        $this->useremail = $this->userdata['email'];
    }

    
    public function getstatus( $username ) {
        $this->getuserdata($username);
        $this->userstatus = $this->userdata['status'];
    }


    public function getuserdata( $username, $sql ) {
        $stmt = $this->db->prepare($sql);
        $stmt->execute();
        $result = $stmt->fetch(PDO::FETCH_ASSOC);
        if (!$result)
        {

            throw new Exception("Error: Niets gevonden..");
        }

        $this->userdata = array();
        foreach ($result as $key => $var)
        {

            $this->userdata[$key] = $var;
        }
    }


    private function reportmessage($case)
    {

        switch ($case)
        {
            case
1:
                $this->reportmessage = 'Error:Niets gevonden.. ';
                break;
        }
    }
}

?>


is het zo beter?

edit:
ik neem aan dat je dan zo met de query moet komen
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
<?php

include_once "db_config.php";
include_once "user.class.php";

$username = "MaDHouSe";
$user = new User($db);

try {
    $sql = "SELECT id,username,email,status FROM users WHERE username = '" . $username . "'";

    $user->getuserdata($username,$sql);
    echo $user->getid($username);
    echo $user->getname($username);
    echo $user->getemail($username);
    echo $user->getstatus($username);
}

catch(Exception $e)
{

    echo '<pre>';
    echo 'Regelnummer: '.$e->getLine().'<br>';
    echo 'Bestand: '.$e->getFile().'<br>';
    echo 'Foutmelding: '.$e->getMessage().'<br>';
    echo '</pre>';
}


?>


Toevoeging op 27/03/2011 12:58:31:

Ik heb even wat aangepast..

maar ik zet bijvoorbeeld een test als user die niet bestaad dan krijg ik de melding: Message: Niets gevonden..

maar testuser bestaad wel. en dan blijft me scherm wit?

weet iemand wat ik fout doe?

index.php
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
<?php
include_once "db_config.php";
include_once "user.class.php";

$user = new User($db);

try {
    $sql = "SELECT id,username,email,status FROM users WHERE username = 'testuser' ";
    $user->getuserdata($sql);
    echo $user->getid();
    echo $user->getname();
    echo $user->getemail();
    echo $user->getstatus();
}

catch(PDOException $e)
{

    echo '<pre>';
    echo $e->getMessage();
    echo '</pre>';
}

?>


user.class.php
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
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
class User {

    private $db;

    public function __construct( PDO $db ) {
        $this->db = $db;
    }


    public function getid() {
        $this->userid = $this->userdata['id'];
    }


    public function getname() {
        $this->username = $this->userdata['username'];
    }


    public function getemail() {
        $this->useremail = $this->userdata['email'];
    }

    
    public function getstatus() {
        $this->userstatus = $this->userdata['status'];
    }


    public function getuserdata($sql) {
        $stmt = $this->db->prepare($sql);
        $stmt->execute();
        $result = $stmt->fetch(PDO::FETCH_ASSOC);

        if (!$result)
            throw new PDOException("Message: Niets gevonden..");
            

        $this->userdata = array();
        foreach ($result as $key => $var)
        {

            $this->userdata[$key] = $var;
        }
    }
}

?>
Gewijzigd op 27/03/2011 12:57:08 door Robert dat ben ik
 
PHP hulp

PHP hulp

29/03/2024 13:42:07
 
Noppes Homeland

Noppes Homeland

27/03/2011 13:12:50
Quote Anchor link
Dat gaat uiteraard zo niet werken!!

getuserdata heeft twee parameters
bij het opvragen van id,username,email en status geef jij het sql statement niet mee. En al zal je dat wel doen dan nog is het inefficient, dat wordt dan 5x query afvuren om de usergevens te verkrijgen.

----------------------------------------
Om niet te veel af te wijken van wat je nu hebt/had:

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
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
<?php
class User {

    private $db;
    private $reportmessage = array();

    private $id;
    private $username;
    private $email;
    private $status;

    public function __construct(PDO $db,$username) {

        $this->db = $db;
        $this->user = $username;
    }


    public function getid() {        
        return $this->id;
    }


    public function getname() {
        
        return $this->username;
    }


    public function getemail() {
        
        return $this->email;
    }

    
    public function getstatus() {
        
        return $this->status;
    }


    /*
       onderstaande methods behoren niet thuis in deze class

       Het gaat nu om het idee van
   */


    private function checkusername() {

        if (trim($this->user) != '') {
            return true;
        }


        return false;
    }



    public function getuserdata() {

        if ($bOk = this->checkusername()) {

            $sql = "SELECT  id
                   ,        username
                   ,        email                  
                   ,        status
                   FROM     users
                   WHERE    username = '"
.$this->user."'";


            if ($stmt = $this->db->prepare($sql)) {
                if ($stmt->execute()) {
                    $result = $stmt->fetch(PDO::FETCH_ASSOC);

                    $this->id       = $result['id'];
                    $this->username = $result['username'];
                    $this->email    = $resutl['email'];
                    $this->status   = $result['status']
                }

                else {
                    $this->setreportmessage('Execute ging fout');
                    $bOk = false;
                }
            }

            else {
                $this->setreportmessage('Prepare ging fout');
                $bOk = false;
            }
        }

        else {
            $this->setreportmessage('UserName is niet ingevuld');
        }


        return bOk;
    }


    private function setreportmessage($error) {
        $this->reportmessage[] = $error

    }

    public getreportmessage() {
        return  $this->reportmessage[0];
    }
}


$cUser = new User($db,'Pietje');

if ($cUser->getuserdata()) {

    echo $cUser->getuserid().'<br />';
    echo $cUser->getusername().'<br />';
}

else {

    echo $cUser->getreportmessage();
}


?>


En als je nu deze class goed bekijkt zie je hoe zinloos deze is, maar het gaat om het idee.
Gewijzigd op 27/03/2011 13:43:26 door Noppes Homeland
 
Robert  dat ben ik

Robert dat ben ik

27/03/2011 14:40:46
Quote Anchor link
Ok ik heb het script even compleet opnieuw gemaakt..


hoe lijkt dit dan?

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
/**
 * PHP Member System
 *
 * @Filename     user.class.php
 * @Version      1.0
 * @Author       MaDHouSe
 * @Website      www.madirc.nl
 */


/**
 * User class
 *
 * Global user class.
 */


class User {

    private $db;

    public function __construct( PDO $db ) {
        $this->db = $db;
    }


    public function getuserdata($sql) {

        if ($stmt = $this->db->prepare($sql))
            if ($stmt->execute())
                if (!$result = $stmt->fetch(PDO::FETCH_ASSOC))
                    throw new PDOException("Message: Niemand gevonden..");
    

                $this->data = array();
                foreach ($result as $key => $var)
                {

                    $this->data[$key] = $var;
                }

                throw new PDOException("Message: Iemand gevonden..");
            throw new PDOException("Message: execute mislukt..");
        throw new PDOException("Message: prepare mislukt..");
    }
}

?>


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
<?php
include_once 'db_config.php';
include_once 'user.class.php';

$user = new User($db);
$username = 'testuser';

try {
    $user->getuserdata("SELECT id,username,email,status FROM users WHERE username = '".$username."' ");
}

catch(PDOException $e)
{

    echo '<pre>';
    echo $e->getMessage();
    echo '</pre>';
}


if(isset($user->data['id']) && $user->data['id'] >=1)
{

    echo 'ID: '.$user->data['id'].'<br>';
    echo 'Username: '.$user->data['username'].'<br>';
    echo 'Email: '.$user->data['email'].'<br>';
    echo 'Status: '.$user->data['status'].'<br>';
}

?>


is dit wel goed zo?
Gewijzigd op 27/03/2011 15:08:59 door Robert dat ben ik
 
Noppes Homeland

Noppes Homeland

27/03/2011 15:08:17
Quote Anchor link
Nee want je blijft PDO gebruiken binnen de clas(ses) waarin het niet thuis hoort


en je bent nog steeds bezig om gegevens dubbel te registreren.
 
Robert  dat ben ik

Robert dat ben ik

27/03/2011 15:11:28
Quote Anchor link
Noppes Homeland op 27/03/2011 15:08:17:
Nee want je blijft PDO gebruiken binnen de clas(ses) waarin het niet thuis hoort


en je bent nog steeds bezig om gegevens dubbel te registreren.


wat bedoel je met gegevens dubbel registreren dan?
en hoe moet ik PDO er buiten houden dan?

echt die zegt dit en die zegt dat zo word leren er niet makkelijker op :D
Gewijzigd op 27/03/2011 15:13:12 door Robert dat ben ik
 
Noppes Homeland

Noppes Homeland

27/03/2011 15:48:12
Quote Anchor link
$result == $this->data
dus ik begrijp niet wat je zit te kutten met die foreach loop van $result

en die loop staat ook nog eens op een plek waarbij $result === false kan zijn en dus geen array is.

Als je dat soort basis niet weet te onderscheiden, dan vraag ik mij af of Oopen voor jou niet Oepsen gaat worden.

een database transactie is geen eigenschap van User en dus dien je het er buiten te houden.

maar ja, het is in principe je eigen keuze of je het tot een eigenschap bombardeerd, je komt er vanzelf wel een keer achter dat het niet handig is om database transacties te doen in elke class die gaat maken.

de volgende constructie moet je ook afleren:
if (!$result = $stmt->fetch(PDO::FETCH_ASSOC))

duidelijker is:
if (($result = $stmt->fetch(PDO::FETCH_ASSOC)) === false)
of
if (($result = $stmt->fetch(PDO::FETCH_ASSOC)) !== false)

net als zaken als:
$ok = 'goed';
if ($ok) {

niet logisch zijn om te doen


Maar waarom lees je niet eerst wat OOP handleidingen, mischien dat je dan beter de in en outs gaat begrijpen.

http://www.phptuts.nl/view/45/
http://www.pfz.nl/wiki/oop-toepassen/
http://www.pfz.nl/wiki/object-oriented-programming/

Andere keuze die je kunt maken is om naar de beep te gaan en daar een PHP 5 OOP boek uit het schap te rukken wat jouw aanspreekt.
 
Robert  dat ben ik

Robert dat ben ik

27/03/2011 15:58:38
Quote Anchor link
weet je, ik zie zo veel scripts langs komen die zo verschillend zijn dat je er geen touw aan vast kan knopen.

Bij die zie je wel querys uitgevoerd worden en de anders zegt dat mag niet of hoord er niet thuis.


ik ben nu 2 weken bezig om oop te begrijpen maar als iedereen andere dingen zegt word je daar niet blij van.

die zegt je moet pdo gebruiken die zegt weer niet

die zegt querys horen er niet in thuis en die zegt het kan wel

die zegt je moet try en catch gebruiken en die weer niet die zegt je kan ook gewoon een error handeling maken.

je word er helemaal gek van.

ik denk dat er vast meer mensen zijn met dit probleem.

Ik hoop dan ook dat er ergens een echt goed en werkend voorbeeld is.
waarmee je wat kan en ook echt leert om met OOP te kunnen werken.

die handleidingen slaan ook nergens op want ook daar worden querys uit gevoerd, dus ik snap best dat het voor sommigen mensen moeilijk is om dit onder de knie te krijgen.. waaronder ik dus.
 
Noppes Homeland

Noppes Homeland

27/03/2011 16:37:56
Quote Anchor link
Quote:
je word(t) er helemaal gek van.

terecht dan wel onterecht

En over het aangehaalde zal altijd wel onenigheid blijven bestaan.

Dus doe gewoon je ding en vraag niet specifiek of het "correcte OOP" is.

In feite bevat een class eigenschappen van de class benaming, die eigenschappen worden gezet (setter) en opgehaald (getter), daarnaast kan je methods (functies) hebben die helpen om de eigenschappen van de class te bewaken dan wel te manipuleren.

Dus als bijvoorbeeld de definitie van een username is dat dat altijd lowercase is, dan kan je dat bij het setten regelen. Het tegenovergesteld kan ook, dat als je een username niet lowercase aan de user class geeft dat dat niet goed is.
 
Robert  dat ben ik

Robert dat ben ik

27/03/2011 16:54:18
Quote Anchor link
Noppes Homeland op 27/03/2011 16:37:56:
Quote:
je word(t) er helemaal gek van.

terecht dan wel onterecht

En over het aangehaalde zal altijd wel onenigheid blijven bestaan.

Dus doe gewoon je ding en vraag niet specifiek of het "correcte OOP" is.

In feite bevat een class eigenschappen van de class benaming, die eigenschappen worden gezet (setter) en opgehaald (getter), daarnaast kan je methods (functies) hebben die helpen om de eigenschappen van de class te bewaken dan wel te manipuleren.

Dus als bijvoorbeeld de definitie van een username is dat dat altijd lowercase is, dan kan je dat bij het setten regelen. Het tegenovergesteld kan ook, dat als je een username niet lowercase aan de user class geeft dat dat niet goed is.


dus als ik je goed begrijp:

is oop dus gewoon een class die eigenschappen van een bepaalde object kan bepalen of wel ook te manipuleren.

dus als ik een username heb met: MaDHouSe zou ik in de class de eigenschappen kunnen maken dat die naam lowercase moet zijn dus madhouse

en of tegenovergesteld


ik snap dat een username een object is waarbij je eigenschappen kunnen bepalen, zo als kijken of de username online is bijvoorbeeld, of de juiste rechten heeft om ergens te mogen zijn.

als ik in objecten denk, denk ik zo:

een huis is een object waarbij ik veel eigenschappen zou kunnen bepalen, bijvoorbeeld de deur kleur.. die zou ik kunnen bepalen welke kleur het moet of kan zijn.

de kleur die ik wil bepalen is dus de setter en van uit de index.php haal je de getter op toch zeg ik dit zo goed?
 
Noppes Homeland

Noppes Homeland

27/03/2011 17:12:00
Quote Anchor link
Nee username is geen object, een object krijg je even simpel gezegd bij het initialiseren van een class ( $user = new User() )

username is een eigenschap van instantie

Ja een huis kan een object zijn, maar elk afzonderlijk te benoemen deel van een huis - zoals keuken, woonkamer, eetkamer, slaapkamer, toilet, badkamer, zolder - zijn ook zelfstandige objecten, maar z'n object kan alleen bestaan als het aan het object huis gekoppeld kan worden.

Basaal geschreven: als je databasenormalisatie redelijkwijs weet toe tepassen kan je dat ook op classes toepassen - muz dat je dan nog de methods moet definieren per class -.
 
Robert  dat ben ik

Robert dat ben ik

27/03/2011 17:25:47
Quote Anchor link
Noppes Homeland op 27/03/2011 17:12:00:
Nee username is geen object, een object krijg je even simpel gezegd bij het initialiseren van een class ( $user = new User() )

username is een eigenschap van instantie

Ja een huis kan een object zijn, maar elk afzonderlijk te benoemen deel van een huis - zoals keuken, woonkamer, eetkamer, slaapkamer, toilet, badkamer, zolder - zijn ook zelfstandige objecten, maar z'n object kan alleen bestaan als het aan het object huis gekoppeld kan worden.

Basaal geschreven: als je databasenormalisatie redelijkwijs weet toe tepassen kan je dat ook op classes toepassen - muz dat je dan nog de methods moet definieren per class -.






Ok dus dan krijg je een indeling van dit zeg maar:

Huis {

-kamer
--badkamer
---deur
----kleur
---wc
----kleur
-
--woonkamer
---muur
----kleur
---stoel
----kleur


--slaapkamer
---bed
----kleur
---kast
----kleur

}

zo iets dus.
 
Wouter J

Wouter J

27/03/2011 17:55:26
Quote Anchor link
Nee. Elk object is een class.
Dus met het voorbeeld van een huis:
Huis
- woonkamer
- slaapkamer
- badkamer
+ getHuis()

Slaapkamer
- deur
- bet
+ setBet()
+ setDeur()
+ getSlaapkamer()

Woonkamer
- deur
- bank
- tv
+ setDeur()
+ setBank()
+ setTv()
+ getWoonkamer()

Badkamer
- deur
- wc
+ setDeur()
+ setWc()
+ getBadkamer()

En dan zou je nog verder in objecten kunnen gaan en dus een class deur, wc, bank, tv, enz. aanmaken. Het ligt er maar net aan hoe ver je wilt denken in objecten.
 
Robert  dat ben ik

Robert dat ben ik

27/03/2011 18:40:20
Quote Anchor link
bedankt voor je informatie Wouter J super!
Gewijzigd op 28/03/2011 17:27:25 door Robert dat ben ik
 

Pagina: « vorige 1 2



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.