OOP PDO Member systeem vraag

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Robert  dat ben ik

Robert dat ben ik

17/03/2011 13:24:35
Quote Anchor link
heey hallo mensen


Ik ben nu een paar dagen bezig met OOP en PDO en heb ook handleidingen gelezen op internet.

En ik ben aan het proberen een Member Systeem te maken in OOP en PDO

Ik snap nog niet de voordelen er van,

Wat ik bedoel is dat je veel meer code moet schijven om iets te laten werken, dat vind ik nou niet echt een voordeel :)

maar goed, ik denk dat dat in de loop der tijd wel duidelijk zal worden wat de voordelen er van zijn en ga inzien.




Dit is wat ik niet snap:

ik heb nu dit

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
//db_config.php

//error reporter

ini_set('display_errors', 1);
error_reporting(E_ALL);

//database gegevens
$host   = "****";  
$user   = "****";
$pass   = "****";
$dbname = "****";

//try is naar de server verbinden
try
{
    $db = new PDO('mysql:host='.$host.';dbname='.$dbname.'',''.$user.'',''.$pass.''); //nieuwe pdo verbinding
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);  //error reporter
}
catch(PDOException $e)
{

    echo $e->getMessage();
}


?>



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
<?php
//member.class.php

class Member
{
    private $_member;

    public function __construct( $member )
    {

        return $this->_member = $member;
    }


    public function getName()
    {

        $member = $this->_member;
    }


    public function IsLoggedIn($member)
    {

        return ($member == "ik");    
    }
}

?>



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
//test.php

include 'db_config.php';
include 'member.class.php';

try
{
    $sql = "SELECT * FROM users";
    $results = $db->query($sql);

    foreach($results as $row)
    {

        echo $row['username'].'<br>';
    }
}

catch(PDOException $e)
{

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

?>



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
<?php
//index.php
include 'db_config.php';
include 'member.class.php';

$user = 'ik';
$member = new Member($user);

if (!$member->isLoggedIn($user))
{

    echo ' je bent niet ingelogd. ';
}

else
{
    echo ' Welkom terug. ';
}



?>



Nu zie je dat ik 4 bestanden heb:

db_config.php (verbind denk ik wel goed)
member.class.php (werkt ook wel denk ik)
test.php (deze werkt alleen volgens mijn niet op de juiste manier)
index.php (werkt nog niet naar behoren)



nou zijn mijn vragen :)


hoe kan ik die try en catch in me class verwerken


want het lijkt mij logischer als je van uit je class ook de members kan laat inloggen en de benodigde variables/sessions/cookies te zetten en te returne.

kort om

wat ik probeer is, ik wil dus dat deze functies

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
    public function IsLoggedIn($member)
    {

        return ($member == "ik");    
        }

?>


EN

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
    public function LogInUser($member)
    {

        //login functie    
        }
?>



naar de database verbind met PDO en de user controleerd of update.


hoe kan ik me database verbinding in me class autoloader proppen?

table:users table naam
veld1:id id van gebruiker
veld2:username username van gebruike
veld3:email email van de gebruiker
veld4:password md5 password
veld5:online dit word alleen 1 of 0 (int)

en hoe kan ik $member controleren via database als de member (online) veld op "1" staat en dat de member is ingelogd
en dan dat je gewoon de username if($member == $row['username']) kan checken of zo iets.


of zijn hier een snellere mogelijkheden voor?


hopelijk kan iemand me hiermee helpen.


M.v.g Rob
 
PHP hulp

PHP hulp

27/10/2021 02:47:50
 
Wouter J

Wouter J

17/03/2011 14:58:58
Quote Anchor link
Je kan in classes gewoon PDO query's maken en uitvoeren. Voorbeeldje:
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
<?php
class Members
{
  private $db;

  public function __construct(PDO $db)
  {

    $this->db = $db;
  }


  public function getName($id)
  {

    $query = "
      SELECT
         name
      FROM
         members
      WHERE
         id = :id
    "
;
    $stmt = $this->db->prepare($query);
    $stmt->bindParam(':id', $id);
    $stmt->execute();

    return $stmt->fetch(PDO::FETCH_ASSOC);
  }
}


$pdo = new PDO('mysql:host=localhost;dbname=mijnSite', 'gebruiker', 'pass', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
$users = new Members($pdo);
echo $users->getName(2);
?>

@bram, sorry voor de foutjes. Dat krijg je als je snel code typed.. :D
Gewijzigd op 17/03/2011 15:53:11 door Wouter J
 
Bram Boos

Bram Boos

17/03/2011 15:51:18
Quote Anchor link
@Wouter;

return $stmt->fetch(PDO::ASSOC); moet return $stmt->fetch(PDO::FETCH_ASSOC); zijn.
en
$stmt = this->db->prepare($query); moet natuurlijk $stmt = $this->db->prepare($query); zijn.
 
Robert  dat ben ik

Robert dat ben ik

17/03/2011 15:53:45
Quote Anchor link
Wouter J op 17/03/2011 14:58:58:
Je kan in classes gewoon PDO query's maken en uitvoeren. Voorbeeldje:
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
<?php
class Members
{
  private $db;

  public function __construct(PDO $db)
  {

    $this->db = $db;
  }


  public function getName($id)
  {

    $query = "
      SELECT
         name
      FROM
         members
      WHERE
         id = :id
    "
;
    $stmt = this->db->prepare($query);
    $stmt->bindParam(':id', $id);
    $stmt->execute();

    return $stmt->fetch(PDO::ASSOC);
  }
}


$pdo = new PDO('mysql:host=localhost;dbname=mijnSite', 'gebruiker', 'pass', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
$users = new Members($pdo);
echo $users->getName(2);
?>










Ok maar ik heb dit nu

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
class Member
{
    private $db;
    private $_member;


    public function __construct( $member )
    {

        return $this->_member = $member;
    }
}

?>



moet ik daar gewoon dit van maken 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
<?php
class Member
{
    private $db;
    private $_member;
  
    public function __construct( $member , PDO $db)
    {

        $this->_member = $member;
        $this->db = $db;
    }

    public function getName($id)
    {

    $query = "
      SELECT
         username
      FROM
         users
      WHERE
         id = :id
    "
;
    $stmt = $this->db->prepare($query);
    $stmt->bindParam(':id', $id);
    $stmt->execute();
    return $stmt->fetch(PDO::FETCH_ASSOC);
  }
}


$pdo = new PDO('mysql:host=localhost;dbname=mijnSite', 'gebruiker', 'pass', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
$users = new Members($pdo);
echo $users->getName(2);

?>


M.v.g Rob
Gewijzigd op 17/03/2011 15:58:27 door Robert dat ben ik
 
Bram Boos

Bram Boos

17/03/2011 16:07:52
Quote Anchor link
@Rob;

Probeer het zou ik zeggen en als je dan nog vragen of problemen hebt dan horen we het wel...
 
Robert  dat ben ik

Robert dat ben ik

17/03/2011 16:34:43
Quote Anchor link
Ik heb nu dit

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
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

$host   = "****";
$dbname = "****";
$user   = "****";
$pass   = "****";

$pdo = new PDO('mysql:host='.$host.';dbname='.$dbname.', ''.$user.'', ''.$pass.'', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));

$users = new Members($pdo);

echo $users->getName(1);

?>


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 Members
{
    private $db;
    private $_member;
  
    public function __construct( PDO $db , $member )
    {

        $this->db = $db;
        $this->_member = $member;
    }


    public function getName($id)
    {

        $query = "SELECT id,username FROM users WHERE id = :id ";
        $stmt  = $this->db->prepare($query);
        $stmt->bindParam(':id', $id);
        $stmt->execute();
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }
}

?>



Maar ik zie de username's niet naar voren komen die in dat veld staat,

id 1 en id 2 staan netjes in de database. met een username veld

als ik ze op de simpele php manier opvraag worden ze gewoon getoond.

ID 1 is Klaas
ID 2 is Kees

en ik krijg ook geen errors te zien waar ik iets mee kan
Gewijzigd op 17/03/2011 16:35:15 door Robert dat ben ik
 
Wouter J

Wouter J

17/03/2011 16:37:40
Quote Anchor link
- Lees eens goed het hoofdstuk prepared statements van de PDO beginnershandleiding op phptuts. Dan begrijp je wat ik doe in de methode getName
- Doormiddel van fetch haal je de gegevens op die moet je nog wel selecteren op de normale manier, dus $member['username']
- Waarom select id? Die heb je toch helemaal niet nodig?
 
Robert  dat ben ik

Robert dat ben ik

17/03/2011 16:59:20
Quote Anchor link
het is ook eigelijk de bedoeling om te weten en leren hoe een lid in te loggen of uit te loggen via een database.

Dat is voor mijn toch wel de basis wat ik nodig heb om met oop pdo en databases te leren werken.

het invoeren update en afhandelen of selecteren van objecten

de tutorials:
http://phptuts.nl/view/45/1/
http://phptuts.nl/view/27/1/

heb ik inderdaad gelezen
maar er staat niet echt een duidelijk voorbeeld hoe je met OOP PDO en Database werkt

wel hoe je ze moet benaderen maar dat is puur de connect
maar de afhandelingen van de query word niet verteld

en het voorbeeld wat ik net nodig heb is moeilijk te vinden.

daarom dat ik hier hulp vraag :)

aangezien ik hier wel altijd goed geholpen word :)

m.v.g Rob
 
Wouter J

Wouter J

17/03/2011 17:01:44
Quote Anchor link
MaDHouSe xxxx op 17/03/2011 16:59:20:
maar de afhandelingen van de query word niet verteld

Lees eens hoofdstuk 3: Uitvoeren van queries en 5: Prepared statements. Door daar worden alleen maar query's afgehandeld. In OOP is het precies hetzelfde als normaal.
 
Robert  dat ben ik

Robert dat ben ik

17/03/2011 17:17:43
Quote Anchor link
Wouter J op 17/03/2011 17:01:44:
MaDHouSe xxxx op 17/03/2011 16:59:20:
maar de afhandelingen van de query word niet verteld

Lees eens hoofdstuk 3: Uitvoeren van queries en 5: Prepared statements. Door daar worden alleen maar query's afgehandeld. In OOP is het precies hetzelfde als normaal.




Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$db
= new PDO('mysql:host=localhost;dbname=test','user','password');

$sql = "SELECT naam FROM tabel";
$results = $db->query($sql);

foreach($results as $row)
{

    echo $row['naam'].'<br>';
}

?>



Ik zie nu niet echt de zelfde opstelling als bij mijn staan
dit word recht uit de index.php gehaalt terwijl ik het via de class wil hebben

Mijn class moet toch alle eigenschappen doen inplaats van me index.php
mijn index.php geeft toch alleen de values mee naar de class die je op dat moment gebruikt

of zie ik dit verkeerd?

je class gebruik je toch om methods uit te voeren en daarmee een value te returne zonder dat ik er een html code in hoef te zetten en dan inderdaad de $member['username'] in index.php te gebruiken.


of zie ik dit nu helemaal verkeerd?
 
Kris Peeters

Kris Peeters

17/03/2011 18:11:59
Quote Anchor link
Even melden:
een constructor hoort geen return terug te geven.
(Vreemd, een paar uur geleden postte ik precies het zelfde)

Een constructor maakt het object aan.

Als je dit maakt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
class Member {
    private $db;
    private $_member;
    public function __construct( $member ) {
        return $this->_member = $member;
    }
}

?>


Wat bedoel je daar dan zelf mee?
Wat is die $member dan eigenlijk?
Gewijzigd op 17/03/2011 18:12:57 door Kris Peeters
 
Robert  dat ben ik

Robert dat ben ik

17/03/2011 18:29:10
Quote Anchor link
die variable komt toch uit dit vandaan?

index.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$pdo
= new PDO('mysql:host='.$host.';dbname='.$dbname.', ''.$user.'', ''.$pass.'', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
$users = new Members($pdo);
echo $users->getName(1);
?>


daarom is het zo rot om te snappen omdat er normaal gesproken een variable gezet word
anders krijg je fouten dat de variable niet gezet is
normaal handel je die gewoon met $var = 0; of zo

maar volgens die tutorial was het niet noodzakelijk een variable al vast te zetten omdat de functie dat kon doen of zo.

de 1 zou dan in dit geval de $member van worden of zo iets


het zou ook super zijn als ik een iets duidelijker voorbeeld had waar ik iets mee kan
en zo dat te leren hoe het werkt.

ik krijg ook alleen voorbeelden die niet werken :) hihi
Gewijzigd op 17/03/2011 18:30:33 door Robert dat ben ik
 
Kris Peeters

Kris Peeters

17/03/2011 18:47:34
Quote Anchor link
Kijk, als je een class zo gebruikt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$users
= new Members($pdo);
?>


Zou ik verwachten dat de constructor er zo uit ziet
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
...
function
__construct($pdoObject) {
  $this->$pdoObject = $pdoObject;
}
...

?>


Dan kan je dus binnen je class $this->$pdoObject verder gebruiken zoals je $db gebruikt elders.

$this->$pdoObject leeft dan dus voort als een object binnen je class.

Wat jij doet, is dat $member noemen; een naam die absoluut niet de lading dekt.
En dan doe je niets met $this->db
Gewijzigd op 17/03/2011 18:48:39 door Kris Peeters
 
Robert  dat ben ik

Robert dat ben ik

18/03/2011 12:07:18
Quote Anchor link
Ok bedankt voor je informatie Kris.
Gewijzigd op 19/03/2011 11:01:14 door Robert dat ben ik
 
Robert  dat ben ik

Robert dat ben ik

26/03/2011 22:28:18
Quote Anchor link
Zo daar was ik weer :)

even na een paar dagen wezen scripten en uit proberen heb ik het volgende gemaakt

voorbeeld + code (klik gewoon op de knop)

nu is mijn vraag ben ik zo wel op de juiste weg?

en komt dit wel in de buurt van PHP OOP?

m.v.g Rob
Gewijzigd op 26/03/2011 22:28:42 door Robert dat ben ik
 
Noppes Homeland

Noppes Homeland

26/03/2011 22:37:54
Quote Anchor link
Totaal niet:
het merendeel van queries die je uitvoert dienen niet in de class te staan, op deze manier heb je inderdaad totaal niets aan je classes. classes dien je zo op te kunnen pakken en zonder wijzigingen te kunnen gebruiken in andere projecten

en waarom in vredesnaam echo"".$user->_reportmessage."";
stel je nu eens de vraag waatoe die quotes dienen

En strings quote je bij voorkeur met enkele quotes dus niet include_once "global.php";
maar
include_once 'global.php';
 
Mar cel

Mar cel

26/03/2011 22:51:00
Quote Anchor link
Waarom plaats je niet gewoon de code hier of zet je het op een niet afgeschermde pagina? Heb geen zin om te registreren/activeren (mail ontvangen)/inloggen. En weet zeker dat vele andere dat ook niet hebben:) Of maak een test account aan.
Gewijzigd op 26/03/2011 22:51:55 door Mar cel
 
Robert  dat ben ik

Robert dat ben ik

26/03/2011 22:52:10
Quote Anchor link
Noppes Homeland op 26/03/2011 22:37:54:
het merendeel van queries die je uitvoert dienen niet in de class te staan,



en dit dan?

linkie

staat ook querys in de class



Toevoeging op 26/03/2011 22:54:52:

Mar cel op 26/03/2011 22:51:00:
Waarom plaats je niet gewoon de code hier of zet je het op een niet afgeschermde pagina? Heb geen zin om te registreren/activeren (mail ontvangen)/inloggen. En weet zeker dat vele andere dat ook niet hebben:) Of maak een test account aan.


je hoeft gewoon de knop in de drukken meer niet het is ook om te laten zien dat ie werkt.
 
Mar cel

Mar cel

26/03/2011 22:57:10
Quote Anchor link
MaDHouSe xxxx op 26/03/2011 22:52:10:
Mar cel op 26/03/2011 22:51:00:
Waarom plaats je niet gewoon de code hier of zet je het op een niet afgeschermde pagina? Heb geen zin om te registreren/activeren (mail ontvangen)/inloggen. En weet zeker dat vele andere dat ook niet hebben:) Of maak een test account aan.


je hoeft gewoon de knop in de drukken meer niet het is ook om te laten zien dat ie werkt.


Ah. Sorry mijn fout, niet goed gelezen.
 
Robert  dat ben ik

Robert dat ben ik

27/03/2011 10:49:43
Quote Anchor link
Is dit wel goed?

of moet het toch weer anders?

het is even een simpel voorbeeld om te proberen en of dit wel onder oop valt
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
<?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 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'];
    }


    private function _getuserdata($username) {
        $sql = 'SELECT id,username,email,status FROM users WHERE username = "' . $username . '"';
        $stmt = $this->_db->prepare($sql);
        $stmt->execute();
        $result = $stmt->fetch(PDO::FETCH_ASSOC);
        if (!$result)
        {

            $this->_reportmessage(1);
            return;
        }

        $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;
        }
    }
}

?>


m.v.g Rob
Gewijzigd op 27/03/2011 11:15:20 door Robert dat ben ik
 
Noppes Homeland

Noppes Homeland

27/03/2011 11:28:18
Quote Anchor link
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 "".
Gewijzigd op 27/03/2011 11:29:14 door Noppes Homeland
 

Pagina: 1 2 volgende »



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.