Is deze opzet goed of niet goed?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robert  dat ben ik

Robert dat ben ik

13/03/2011 11:58:43
Quote Anchor link
ik ben een OOP leden systeem aan het scripten


en nu is mijn vraag doe ik het op de juiste manier?

aangezien ik dit moet gebruiken als voorbeeld om te laten zien dat ik met php oop en mysql kan werken

kunnen jullie mijn tips geven hier voor om een zo goed mogelijk systeem te krijgen

wat ik tot nu toe heb staat helaas even online op mijn webserver local maar is 24/7 online

de layout is gewoon even een gaar iets maar het gaat er om dat het systeem in php oop mysql goed gedaan is.

de urls zijn:

Werkend Voorbeeld: http://madirc.nl/a/
Broncode : http://madirc.nl/a/a/code.php

Ik hoop dat jullie mijn goeie tips kunnen geven en of dit de juiste opzet is


Met Vriendelijke Groet,

Rob
Gewijzigd op 14/03/2011 15:00:59 door Robert dat ben ik
 
PHP hulp

PHP hulp

27/10/2021 01:28:32
 
Jordi Kroon

Jordi Kroon

13/03/2011 12:04:20
Quote Anchor link
- getallen buiten de quotes houden
- Gebruik geen * dit is een wildcard selecteer wat je wilt
- Variabelen buiten de quotes houden
- mysql injectie mogelijk!
- codeer je wachtwoorden sha1 ipv md5 (veiligheid)
- Gebruik geen eregi dit is verouderd!. Gebruik preg_match
- Waar is je fouthandeling?
- Gebruik phpmailer of swiftmailer ( xss injection mogelijk )
- Maak je site OF nederlands OF engels!

Toevoeging op 13/03/2011 12:07:29:

Vul 'en 'in en je krijgt deze error: (login.php)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/html/a/include/class/class_lib.php on line 72


Vul ' en je krijgt deze error: (rezet.php)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/html/a/include/class/class_lib.php on line 225


Toevoeging op 13/03/2011 12:08:46:

Vul overal ' in bij register.php en je krijgt deze error:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/html/a/include/class/class_lib.php on line 117
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '','62.194.24.233','3d8d899acd8226a412f55f72a610f237','0')' at line 1
Gewijzigd op 13/03/2011 12:05:21 door Jordi Kroon
 
Vincent Huisman

Vincent Huisman

13/03/2011 12:47:03
Quote Anchor link
wanneer ik een wachtwoord van 4 tekens invoer zegt hij dat ik minimaal 4 tekens moet gebruiken

Toevoeging op 13/03/2011 12:48:08:

ook is mysql_close() negens voor nodig
 
Robert  dat ben ik

Robert dat ben ik

13/03/2011 12:52:16
Quote Anchor link
ja die dingen zijn aangepast

alleen snap ik die

- getallen buiten de quotes houden
- Gebruik geen * dit is een wildcard selecteer wat je wilt
- Variabelen buiten de quotes houden

even niet want mijn vars staan toch buiten de "" ? met ".$var." ?



en hoezo mijn mysql niet sluiten stel er zit 100 man blijven die verbindingen ook online hangen vandaar die mysql_close(); toch?

m.v.g Rob
Gewijzigd op 13/03/2011 12:55:11 door Robert dat ben ik
 
Vincent Huisman

Vincent Huisman

13/03/2011 12:56:59
Quote Anchor link
Quote:
Using mysql_close() isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution.
bron
 
Robert  dat ben ik

Robert dat ben ik

13/03/2011 13:00:48
Quote Anchor link
super man bedankt omdat het voorheen aangeraden werd om je mysql weer af te sluiten na een handeling vandaar dat ik het er dus bij had staan :)



maar de OOP manier is wel goed? of zijn hier nog andere tips die ik mee kan nemen in mijn project?


al vast super bedankt voor de reacties

m.v.r Rob
Gewijzigd op 13/03/2011 13:01:36 door Robert dat ben ik
 
Jordi Kroon

Jordi Kroon

13/03/2011 13:19:47
Quote Anchor link
MaDHouSe xxxx op 13/03/2011 12:52:16:
ja die dingen zijn aangepast

alleen snap ik die

- getallen buiten de quotes houden
- Gebruik geen * dit is een wildcard selecteer wat je wilt
- Variabelen buiten de quotes houden
(..)


Ik bedoel dit :

- getallen buiten de quotes houden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$select_table
= mysql_query("SELECT * FROM users WHERE registered='1'");
//word
$select_table = mysql_query("SELECT * FROM users WHERE registered=1");
?>


- Gebruik geen * dit is een wildcard selecteer wat je wilt
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$select_table
= mysql_query("SELECT * FROM users WHERE registered=1");
//word
$select_table = mysql_query("SELECT colom1, colom2, colom3, enz FROM users WHERE registered=1");
?>


- Variabelen buiten de quotes houden
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$select_table
= mysql_query("select * from users where id='$userid' limit 1");
//word
$select_table = mysql_query("select * from users where id='" . $userid . "' limit 1");
?>


Let wel op die mysql injection
Gewijzigd op 13/03/2011 13:21:06 door Jordi Kroon
 
Pim -

Pim -

13/03/2011 13:25:36
Quote Anchor link
Ik snap het voorgaande commentaar niet helemaal, want dit is geen OOP. Je hebt wat functies in een klasse gestopt, maar dat maakt het nog geen OOP.
Iets als dit moet je hebben:
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
// Homepage
$db = new Database($config); // Of mysqli oid, gebruik iig een OOP interface, geen functies

$authentication = new Authentication($db);
if($authenictaion->isLoggedIn()) {
    $user = $authentication->getUser();
    echo 'Hallo '.$user->getName();
}
else {
    echo 'Je moet ingelogd zijn!';
}


// Login
$db = new Database($config); // Of mysqli oid, gebruik iig een OOP interface, geen functies

$authentication = new Authentication($db);
if($authenictaion->isLoggedIn()) {
    // redirect
}
if($_SERVER['REQUEST_METHOD'] == 'POST') {
    // checks op leeg
    try {
        $authentication->logIn($_POST['username'], $_POST['password']);
        
        // redirect
    } catch(WrongPasswordException $e) {
        // Geef foutmelding
    } catch(BruteForceProtectionException $e) {
        // Geef foutmelding
    }
}

// Laat formulier zien
?>

En dan is het ook nog mooi de view (wat daadwerkelijk wordt weergegeven) apart te houden.
Gewijzigd op 13/03/2011 13:33:50 door Pim -
 
Robert  dat ben ik

Robert dat ben ik

13/03/2011 13:58:04
Quote Anchor link
Bedankt voor je informatie Pim

EDIT: ik heb al een voorbeeld gevonden

Iedergeval bedankt voor jullie reacties

m.v.g Rob
Gewijzigd op 13/03/2011 14:35:17 door Robert dat ben ik
 
Pim -

Pim -

13/03/2011 14:35:56
Quote Anchor link
Stel dat we de MySQLi klasse nemen ipv Database.

User heeft gewoon wat eigenschappen met getters en setters en heeft een loadFromId($id) functie, een loadFromUserName($name), een functie save(). Google naar 'Active Record' (de naam voor dit patroon) en je vindt daar vast wel wat over.

Dan blijft de authentication klasse over. De DB verbinding is daar btw niet nodig. User handelt dat af.
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
class Authentication
    protected $user;

    public function __construct()
    {

        session_start();
    }

    
    public function isLoggedIn()
    {

        if(isset($_SESSION['userid']) && isset($_SESSION['ip']) && $_SESSION['ip'] == $_SERVER['REMOTE_ADDR'])
            return true;
        return false;
    }


    public function getUser()
    {

        if(isset($this->user))
            return $this->user;

        if(!$this->isLoggedIn())
            throw new Exception('Not logged in');

        return $this->user = User::loadFromId($_SESSION['userid']);
    }


    public function login($username, $password)
    {

        try {
            $user = User::loadFromUsername($username);
        }
catch(EntityNotFoundException($e) {
            throw new WrongLoginException();
            
        if($user->getPassword() !== $this->_hash($password))
            throw new WrongLoginException();

        $this->user = $user;
        $_SESSION['userid'] = $user->getId();
        $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
        return true;
    }            
}

?>

Mocht je vragen hebben of mocht het niet lukken met de User klasse, vraag maar raak.
Het is niet heel strikt/netjes OOP, maar je vroeg om een simpele versie.

EDIT: ja kom nou... ;)
Gewijzigd op 13/03/2011 14:38:21 door Pim -
 
Robert  dat ben ik

Robert dat ben ik

13/03/2011 14:52:06
Quote Anchor link
fout

Toevoeging op 13/03/2011 15:24:57:

hahahaha ja ik ga deze zeker gebruiken

echt super man voor je hulp dat waardeer ik enorm!!


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
<?php
class Authentication
{
    protected $user;

    public function __construct()
    {

        session_start();
    }

    
    public function isLoggedIn()
    {

        if(isset($_SESSION['userid']) && isset($_SESSION['ip']) && $_SESSION['ip'] == $_SERVER['REMOTE_ADDR'])
        {

            return true;
        }

        else
        {
            return false;
        }
    }


    public function getUser()
    {

        if(isset($this->user))
        {

            return $this->user;
        }

        if(!$this->isLoggedIn())
        {

            row new Exception('Not logged in');
            turn $this->user = User::loadFromId($_SESSION['userid']);
        }

    

    public function login($username, $password)
    {

    try
    {
        $user = User::loadFromUsername($username);
    }

    catch(EntityNotFoundException($e) {
        throw new WrongLoginException();
            
            if($user->getPassword() !== $this->_hash($password))
        throw new WrongLoginException();

        $this->user = $user;
        $_SESSION['userid'] = $user->getId();
        $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
        return true;
    }            
}

?>


Ik neem aan dat het zo gezet moet zijn?

en de connect naar database want die mis ik nog? :D

m.v.g Rob
Gewijzigd op 13/03/2011 15:24:16 door Robert dat ben ik
 
Pim -

Pim -

13/03/2011 16:14:25
Quote Anchor link
Quote:
User heeft gewoon wat eigenschappen met getters en setters en heeft een loadFromId($id) functie, een loadFromUserName($name), een functie save(). Google naar 'Active Record' (de naam voor dit patroon) en je vindt daar vast wel wat over.


En mijn getUser methode is goed, de jouwe niet ;). Kijk nog eens goed
 
Robert  dat ben ik

Robert dat ben ik

14/03/2011 12:19:03
Quote Anchor link
Ok mensen
na 2 uurtjes scripten en proberen
ben ik hier op uit gekomen

nu is mijn vraag als nog

is dit wel OOP?

het gaat om de pagina index.php

URL: http://madirc.nl/a/b/index.php

het is even een simpel iets zonder beveiliging.


na wat lessen te hebben gehad gister via videos heb ik dit gemaakt
het inloggen werkt het registreren werkt uitloggen werkt

maar is dit wel OOP of zit ik er gewoon weer naast?

m.v.g Rob
Gewijzigd op 14/03/2011 13:25:36 door Robert dat ben ik
 



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.