inlog/registreer systeem werkt niet

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 »

Jeroen ruiten

jeroen ruiten

05/08/2012 15:40:30
Quote Anchor link
ik ben bezig een inlog/registreer systeem te maken. maar bij registeren lukt het mij niet om te verkomen dat het script een al bestaande gebruiker overschrijft als iemand anders de zelfde gebruiker opgeeft. nu laat het script me steets zien dat de naam al bestaat ook al is het heel anders bv. eerst vul ik henk in en dan jan. nu zegt die dat deze al bestaan. maar mijn database is leeg.
Dit is de code:
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
<?php
include 'sql2.php'; #sql gegevens
?>


<html>
<head>
<title>test - registeren</title>
</head>

<body>
<h1>registeren:</h1>
<form method="POST" action="registeren.php">

Je minecraft naam:    <input    name="minecraftnaam"    type="text"        size="20"    maxlength="35">    <br>
Je wachtwoord:        <input     name="password"            type="password"    size="20"    maxlength="35">    <br>
Je e-mail:            <input    name="email"            type="text"        size="20"    maxlength="35">    <br>
<!-- submit -->        <input    name="submit"            type="submit"    value="submit">                <br>

</form>
<?php
    if(isset($_POST['submit'])) #als er op de submit knop is gedrukt
    {
        $password         = mysql_real_escape_string($_POST['password']);
        $email             = mysql_real_escape_string($_POST['email']);
        $minecraftnaam     = mysql_real_escape_string($_POST['minecraftnaam']);
        $fout              = false; #instellen op false. als er een fout is gaat deze naar true
        
        
        if(empty($password)) #als wachtwoordveld leeg is
        {
            $fout = true;
            echo 'Je hebt geen wachtwoord opgegeven. <br>';
        }

        
        if(empty($email)) #als emailveld leeg is
        {
            $fout = true;
            echo 'Je hebt geen email opgegeven. <br>';
        }

        
        if(empty($minecraftnaam)) #als minecraftnaam leeg is
        {
            $fout = true;
            echo 'Je hebt geen minecraft naam opgegeven. <br>';
        }

        
        
        
        if($fout == true) #als er boven iets fout is gegaan
        {
            echo 'er zijn fouten gevonden. <br>';
        }

        
        if($fout == false) #als boven alles goed is gegaan
        {
            echo 'er zijn geen fouten gevonden. <br>';
            
                #wachtwoord versleutelen
                $hash         = hash("sha256",$minecraftnaam).hash("haval256,5",$password).hash("md5",$minecraftnaam);
                $superhash     = crypt($hash,$password);
                
                #sql query aanmaken om te kijken of de naam al bestaat
                $sql    =(    "     SELECT minecraftname
                                FROM inloggen
                                WHERE minecraftname = '"
.$minecraftnaam."'");
                                
                $res = mysql_query($sql); #sql query uitvoeren
                if(!$res = mysql_query($sql)) #als de query mislukt is
                {
                trigger_error(mysql_error().'<br> in query: '.$sql);
                }

                
                if(!$res == $minecraftnaam) #controleren of de gebruikers naam als bestaat, zo niet ga door
                {
                
                    #sql query aanmaken om de ingevoerde gegevens op te slaan in de database
                    $sql    =(    "    INSERT INTO inloggen
                                    (    
                                        password,
                                        minecraftname,
                                        email
                                    )
                                    
                                    VALUES
                                    (
                                        '"
.$superhash."',
                                        '"
.$minecraftnaam."',
                                        '"
.$email."'
                                    )
                            "
);
                    $res = mysql_query($sql); #sql query uitvoeren
                    if(!$res = mysql_query($sql))#als de query mislukt is
                    {
                    trigger_error(mysql_error().'<br />In query: '.$sql);
                    }

                    echo $sql;                    
                }

                
                else #als de gebruikers naam al bestaat
                {
                    echo 'De opgegeven minecraftnaam bestaat al.';
                }
        }
    }

?>


</body>
</html>

nu vraag ik me af wat er fout gaat en hoe ik dit kan oplossen
Gewijzigd op 05/08/2012 16:21:02 door Jeroen ruiten
 
PHP hulp

PHP hulp

06/11/2024 01:12:10
 
- SanThe -

- SanThe -

05/08/2012 15:46:43
Quote Anchor link
Waarom twee keer de query uitvoeren?

48 $res = mysql_query($sql); #sql query uitvoeren
49 if(!$res = mysql_query($sql)) #als de query mislukt is


En wat zit er nu in $res?
Een #resource of een boolean, maar zeker geen naam.

54 if(!$res == $minecraftnaam) #controleren of de gebruikers naam als bestaat, zo niet ga door
 
Erwin H

Erwin H

05/08/2012 15:47:43
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
//regel 48/49
$res = mysql_query($sql); #sql query uitvoeren
if(!$res = mysql_query($sql)) #als de query mislukt is
?>

Ook handig, de query twee keer uitvoeren. Niet echt nodig lijkt me...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
//regel 54
if(!$res == $minecraftnaam)
?>

Aangezien $res nog een resource is, zal dit altijd een false opleveren....

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
//regel 72/73
$res = mysql_query($sql); #sql query uitvoeren
if(!$res = mysql_query($sql))#als de query mislukt is
?>

En nog een keer de query twee keer uitvoeren.
 
Obelix Idefix

Obelix Idefix

05/08/2012 15:57:23
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if(isset($_POST['submit']))

gebruik liever
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if($_SERVER['REQUEST_METHOD'] === 'POST')

om te controleren of een formulier verzonden is.

Je gaat eerst variabelen aanmaken (regel 4-7) en dan pas controleren of ze wel gevuld zijn. Controleer of de $_POST waarden bestaan met isset. Ga niet (onnodig) variabelen kopieren. En mysql_real_escape_string gebruik je _in_ een query.

Doorgaans is de volgorde: eerst php (verwerking, controle, etc.) en dan html.

En plaats je volledige code aub tussen code-tags.
 
Jeroen ruiten

jeroen ruiten

05/08/2012 16:10:49
Quote Anchor link
ik heb een kleine aanpassing gemaakt deze:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$res2 = mysql_num_rows($res); #kijken hoevaak de gevraagde naam voorkomt
                echo $res2;
                
                if($res2 == 0) #controleren of de gebruikers naam als bestaat, zo niet ga door

nu probeerde die de opgegeven naam en wachtwoord en email er minimaal 2 keer intezetten want ik krijg de error dat deze rij al bestaat van sql zelf. en als ik ga kijken zie ik dat ik 4 rijen heb het de 4 verschilende namen maar het id gaat van 1 naar 5 naar 9 en bij de vierde naar 11. hoe kan dit?
Gewijzigd op 05/08/2012 16:14:39 door jeroen ruiten
 
- SanThe -

- SanThe -

05/08/2012 16:14:05
Quote Anchor link
Omdat je al je query's dubbel uitvoert. Bij INSERT zal de tweede dus mislukken doordat je identieke gegevens gebruikt. De auto_increment gaat echter gewoon eentje hoger staan.
 
Erwin H

Erwin H

05/08/2012 16:15:43
Quote Anchor link
Het id heb je waarschijnlijk als auto_increment aangemaakt. Dat loopt dus automatisch op. Als jij er rijen uithaalt dan verdwijnt dat id, maar wordt daarna niet nog een keer gebruikt (wil je ook niet!). Dat die id's dus niet meer perfect oplopen kan kloppen als je af en toe iets delete.
 
Jeroen ruiten

jeroen ruiten

05/08/2012 16:17:36
Quote Anchor link
- SanThe - op 05/08/2012 16:14:05:
Omdat je al je query's dubbel uitvoert. Bij INSERT zal de tweede dus mislukken doordat je identieke gegevens gebruikt. De auto_increment gaat echter gewoon eentje hoger staan.


hoe bedoel je dubbel? die snap ik even niet.
de twee query's zijn toch verschilend.
de eerste kijken en de tweede voert uit

(waar gaat het mis?!)

Toevoeging op 05/08/2012 16:18:39:

Erwin H op 05/08/2012 16:15:43:
Het id heb je waarschijnlijk als auto_increment aangemaakt. Dat loopt dus automatisch op. Als jij er rijen uithaalt dan verdwijnt dat id, maar wordt daarna niet nog een keer gebruikt (wil je ook niet!). Dat die id's dus niet meer perfect oplopen kan kloppen als je af en toe iets delete.


maar ik heb er niets uitgehaald. dat is ook zo gek er aan

Toevoeging op 05/08/2012 16:23:13:

- SanThe - op 05/08/2012 15:46:43:
Waarom twee keer de query uitvoeren?

48 $res = mysql_query($sql); #sql query uitvoeren
49 if(!$res = mysql_query($sql)) #als de query mislukt is


En wat zit er nu in $res?
Een #resource of een boolean, maar zeker geen naam.

54 if(!$res == $minecraftnaam) #controleren of de gebruikers naam als bestaat, zo niet ga door


dus 48 kan weg als ik het begrijp. dus 49 voert het ook uit?
 
- SanThe -

- SanThe -

05/08/2012 16:23:31
Quote Anchor link
- SanThe - op 05/08/2012 15:46:43:
Waarom twee keer de query uitvoeren?

48 $res = mysql_query($sql); #sql query uitvoeren
49 if(!$res = mysql_query($sql)) #als de query mislukt is
Gewijzigd op 05/08/2012 16:24:07 door - SanThe -
 
Jeroen ruiten

jeroen ruiten

05/08/2012 16:27:45
Quote Anchor link
dat is eruit regel 48 en die ergens anders staat en nu werkt het wel beter. bedankt!!
Gewijzigd op 05/08/2012 16:28:10 door jeroen ruiten
 
- SanThe -

- SanThe -

05/08/2012 16:29:05
Quote Anchor link
- SanThe - op 05/08/2012 16:23:31:
- SanThe - op 05/08/2012 15:46:43:
Waarom twee keer de query uitvoeren?

48 $res = mysql_query($sql); #sql query uitvoeren
49 if(!$res = mysql_query($sql)) #als de query mislukt is




Moet dus zijn:
$res = mysql_query($sql); #sql query uitvoeren
if($res === false) #als de query mislukt is
 
Jeroen ruiten

jeroen ruiten

05/08/2012 16:36:40
Quote Anchor link
- SanThe - op 05/08/2012 16:29:05:
- SanThe - op 05/08/2012 16:23:31:
- SanThe - op 05/08/2012 15:46:43:
Waarom twee keer de query uitvoeren?

48 $res = mysql_query($sql); #sql query uitvoeren
49 if(!$res = mysql_query($sql)) #als de query mislukt is




Moet dus zijn:
$res = mysql_query($sql); #sql query uitvoeren
if($res === false) #als de query mislukt is


is dit ook goed?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
                $sql    =(    "     SELECT minecraftname
                                FROM inloggen
                                WHERE minecraftname = '".mysql_real_escape_string($minecraftnaam)."'");
                                
                if(!$res = mysql_query($sql)) #als de query mislukt is
                {
                trigger_error(mysql_error().'<br> in query: '.$sql);
                }


Toevoeging op 05/08/2012 16:39:06:

ik heb voor zo ver ik weet alles aangepast wat jullie zijden en het ziet er nu zo uit:

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
<?php
include 'sql2.php'; #sql gegevens

    if($_SERVER['REQUEST_METHOD'] === 'POST') #als er op de submit knop is gedrukt
    {
        $fout              = false; #instellen op false. als er een fout is gaat deze naar true
        
        
        if(empty($_POST['password'])) #als wachtwoordveld leeg is
        {
            $fout = true;
            echo 'Je hebt geen wachtwoord opgegeven. <br>';
        }

        
        if(empty($_POST['email'])) #als emailveld leeg is
        {
            $fout = true;
            echo 'Je hebt geen email opgegeven. <br>';
        }

        
        if(empty($_POST['minecraftnaam'])) #als minecraftnaam leeg is
        {
            $fout = true;
            echo 'Je hebt geen minecraft naam opgegeven. <br>';
        }

        
        
        
        if($fout == true) #als er boven iets fout is gegaan
        {
            echo 'er zijn fouten gevonden. <br>';
        }

        
        if($fout == false) #als boven alles goed is gegaan
        {
            echo 'er zijn geen fouten gevonden. <br>';
            
                #wachtwoord versleutelen
                $hash         = hash("sha256",$minecraftnaam).hash("haval256,5",$password).hash("md5",$minecraftnaam);
                $superhash     = crypt($hash,$password);
                
                #sql query aanmaken om te kijken of de naam al bestaat
                $sql    =(    "     SELECT minecraftname
                                FROM inloggen
                                WHERE minecraftname = '"
.mysql_real_escape_string($minecraftnaam)."'");
                                
                if(!$res = mysql_query($sql)) #als de query mislukt is
                {
                trigger_error(mysql_error().'<br> in query: '.$sql);
                }

                
                $res2 = mysql_num_rows($res); #kijken hoevaak de gevraagde naam voorkomt
                echo $res2;
                
                if($res2 == 0) #controleren of de gebruikers naam als bestaat, zo niet ga door
                {
                
                    #sql query aanmaken om de ingevoerde gegevens op te slaan in de database
                    $sql    =(    "    INSERT INTO inloggen
                                    (    
                                        password,
                                        minecraftname,
                                        email
                                    )
                                    
                                    VALUES
                                    (
                                        '"
.mysql_real_escape_string($superhash)."',
                                        '"
.mysql_real_escape_string($minecraftnaam)."',
                                        '"
.mysql_real_escape_string($email)."'
                                    )
                            "
);
                    if(!$res = mysql_query($sql))#als de query mislukt is
                    {
                    trigger_error(mysql_error().'<br />In query: '.$sql);
                    }

                    echo $sql;    #voor testen even laten zien wat er in de query staat                
                }
                
                else #als de gebruikers naam al bestaat
                {
                    echo 'De opgegeven minecraftnaam bestaat al.';
                }
        }
    }

?>

<html>
<head>
<title>test - registeren</title>
</head>

<body>
<h1>registeren:</h1>
<form method="POST" action="registeren.php">

Je minecraft naam:    <input    name="minecraftnaam"    type="text"        size="20"    maxlength="35">    <br>
Je wachtwoord:        <input     name="password"            type="password"    size="20"    maxlength="35">    <br>
Je e-mail:            <input    name="email"            type="text"        size="20"    maxlength="35">    <br>
<!-- submit -->        <input    name="submit"            type="submit"    value="submit">                <br>

</form>
</body>
</html>

hij doet het nu wel maar zijn er lekken in? als ik zo doorga leer ik het dan goed?
 
- SanThe -

- SanThe -

05/08/2012 16:49:24
Quote Anchor link
Al een heel stuk beter.

$sql =( " INSERT ..... ");
Die ( en ) mogen weg.
Dus gewoon zo:
$sql = " INSERT ..... ";

Bij al die empty() controles geef je een echo. Daardoor is de html niet meer valid omdat je <html> pas op regel 87 wordt geopend. Errors dus in een $var stoppen en op de juiste plaats een echo $var doen.
 
Jeroen ruiten

jeroen ruiten

05/08/2012 16:55:20
Quote Anchor link
- SanThe - op 05/08/2012 16:49:24:
Al een heel stuk beter.

$sql =( " INSERT ..... ");
Die ( en ) mogen weg.
Dus gewoon zo:
$sql = " INSERT ..... ";

Bij al die empty() controles geef je een echo. Daardoor is de html niet meer valid omdat je <html> pas op regel 87 wordt geopend. Errors dus in een $var stoppen en op de juiste plaats een echo $var doen.

hoe kan ik een script stoppen daar?


Toevoeging op 05/08/2012 16:57:54:

ik heb mijn code nog eens goed doorgelezen en de fouten $ vervangen door $_POST en de haakjes weggelaten

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
<?php
include 'sql2.php'; #sql gegevens

    if($_SERVER['REQUEST_METHOD'] === 'POST') #als er op de submit knop is gedrukt
    {
        $fout              = false; #instellen op false. als er een fout is gaat deze naar true
        
        
        if(empty($_POST['password'])) #als wachtwoordveld leeg is
        {
            $fout = true;
            echo 'Je hebt geen wachtwoord opgegeven. <br>';
        }

        
        if(empty($_POST['email'])) #als emailveld leeg is
        {
            $fout = true;
            echo 'Je hebt geen email opgegeven. <br>';
        }

        
        if(empty($_POST['minecraftnaam'])) #als minecraftnaam leeg is
        {
            $fout = true;
            echo 'Je hebt geen minecraft naam opgegeven. <br>';
        }

        
        
        
        if($fout == true) #als er boven iets fout is gegaan
        {
            echo 'er zijn fouten gevonden. <br>';
        }

        
        if($fout == false) #als boven alles goed is gegaan
        {
            echo 'er zijn geen fouten gevonden. <br>';
            
                #wachtwoord versleutelen
                $hash         = hash("sha256",($_POST['minecraftnaam'])).hash("haval256,5",($_POST['password'])).hash("md5",($_POST['minecraftnaam']));
                $superhash     = crypt($hash,($_POST['password']));
                
                #sql query aanmaken om te kijken of de naam al bestaat
                $sql    =    "     SELECT minecraftname
                                FROM inloggen
                                WHERE minecraftname = '"
.mysql_real_escape_string($_POST['minecraftnaam'])."'";
                                
                if(!$res = mysql_query($sql)) #als de query mislukt is
                {
                trigger_error(mysql_error().'<br> in query: '.$sql);
                }

                
                $res2 = mysql_num_rows($res); #kijken hoevaak de gevraagde naam voorkomt
                echo $res2;
                
                if($res2 == 0) #controleren of de gebruikers naam als bestaat, zo niet ga door
                {
                
                    #sql query aanmaken om de ingevoerde gegevens op te slaan in de database
                    $sql    =    "    INSERT INTO inloggen
                                    (    
                                        password,
                                        minecraftname,
                                        email
                                    )
                                    
                                    VALUES
                                    (
                                        '"
.mysql_real_escape_string($superhash)."',
                                        '"
.mysql_real_escape_string($_POST['minecraftnaam'])."',
                                        '"
.mysql_real_escape_string($_POST['email'])."'
                                    )
                            "
;
                    if(!$res = mysql_query($sql))#als de query mislukt is
                    {
                    trigger_error(mysql_error().'<br />In query: '.$sql);
                    }

                    echo $sql;    #voor testen even laten zien wat er in de query staat                
                }
                
                else #als de gebruikers naam al bestaat
                {
                    echo 'De opgegeven minecraftnaam bestaat al.';
                }
        }
    }

?>

<html>
<head>
<title>test - registeren</title>
</head>

<body>
<h1>registeren:</h1>
<form method="POST" action="registeren.php">

Je minecraft naam:    <input    name="minecraftnaam"    type="text"        size="20"    maxlength="35">    <br>
Je wachtwoord:        <input     name="password"            type="password"    size="20"    maxlength="35">    <br>
Je e-mail:            <input    name="email"            type="text"        size="20"    maxlength="35">    <br>
<!-- submit -->        <input    name="submit"            type="submit"    value="submit">                <br>

</form>
</body>
</html>
 
- SanThe -

- SanThe -

05/08/2012 17:04:28
Quote Anchor link
Nee, stoppen is niet netjes.
Gebruik een array() voor de fouten.
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
<?php
$fout
= array(); // als er een fout is wordt dit gevuld
if($_SERVER['REQUEST_METHOD'] === 'POST') #als er op de submit knop is gedrukt
{
    if(empty($_POST['password'])) #als wachtwoordveld leeg is
    {
        $fout[] = 'Je hebt geen wachtwoord opgegeven. <br>';
    }

    // enzovoort

    // en dan kijk je of er fouten zijn

    if(count($fout) == 0) // er zijn geen fouten
    {
        // INSERT en dergelijke
    }
}

// html en op de juiste plaats
if(count($fout) > 0) // er zijn fouten
{
    foreach($fout as $regel)
    {

        echo $regel;
    }
}

// formulier
?>
Gewijzigd op 05/08/2012 17:09:38 door - SanThe -
 
Jeroen ruiten

jeroen ruiten

05/08/2012 17:24:16
Quote Anchor link
dus dit is goed?

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
114
115
<?php
include 'sql2.php'; #sql gegevens

    if($_SERVER['REQUEST_METHOD'] === 'POST') #als er op de submit knop is gedrukt
    {
        $fout              = false; #instellen op false. als er een fout is gaat deze naar true
        $foutmsg = array();
        
        
        if(empty($_POST['password'])) #als wachtwoordveld leeg is
        {
            $fout = true;
            $foutmsg[] = 'Je hebt geen wachtwoord opgegeven. <br>';
        }

        
        if(empty($_POST['email'])) #als emailveld leeg is
        {
            $fout = true;
            $foutmsg[] = 'Je hebt geen email opgegeven. <br>';
        }

        
        if(empty($_POST['minecraftnaam'])) #als minecraftnaam leeg is
        {
            $fout = true;
            $foutmsg[] = 'Je hebt geen minecraft naam opgegeven. <br>';
        }

        
        
        
        if($fout == true) #als er boven iets fout is gegaan
        {
            echo 'er zijn fouten gevonden. <br>';
        }

        
        if($fout == false) #als boven alles goed is gegaan
        {
            echo 'er zijn geen fouten gevonden. <br>';
            
                #wachtwoord versleutelen
                $hash         = hash("sha256",($_POST['minecraftnaam'])).hash("haval256,5",($_POST['password'])).hash("md5",($_POST['minecraftnaam']));
                $superhash     = crypt($hash,($_POST['password']));
                
                #sql query aanmaken om te kijken of de naam al bestaat
                $sql    =    "     SELECT minecraftname
                                FROM inloggen
                                WHERE minecraftname = '"
.mysql_real_escape_string($_POST['minecraftnaam'])."'";
                                
                if(!$res = mysql_query($sql)) #als de query mislukt is
                {
                trigger_error(mysql_error().'<br> in query: '.$sql);
                }

                
                $res2 = mysql_num_rows($res); #kijken hoevaak de gevraagde naam voorkomt
                echo $res2;
                
                if($res2 == 0) #controleren of de gebruikers naam als bestaat, zo niet ga door
                {
                
                    #sql query aanmaken om de ingevoerde gegevens op te slaan in de database
                    $sql    =    "    INSERT INTO inloggen
                                    (    
                                        password,
                                        minecraftname,
                                        email
                                    )
                                    
                                    VALUES
                                    (
                                        '"
.mysql_real_escape_string($superhash)."',
                                        '"
.mysql_real_escape_string($_POST['minecraftnaam'])."',
                                        '"
.mysql_real_escape_string($_POST['email'])."'
                                    )
                            "
;
                    if(!$res = mysql_query($sql))#als de query mislukt is
                    {
                    trigger_error(mysql_error().'<br />In query: '.$sql);
                    }

                    echo $sql;    #voor testen even laten zien wat er in de query staat                
                }
                
                else #als de gebruikers naam al bestaat
                {
                    $foutmsg[] = 'De opgegeven minecraftnaam bestaat al.';
                }
        }
    }

?>

<html>
<head>
<title>test - registeren</title>
</head>

<body>
<h1>registeren:</h1>
<form method="POST" action="registeren.php">

Je minecraft naam:    <input    name="minecraftnaam"    type="text"        size="20"    maxlength="35">    <br>
Je wachtwoord:        <input     name="password"            type="password"    size="20"    maxlength="35">    <br>
Je e-mail:            <input    name="email"            type="text"        size="20"    maxlength="35">    <br>
<!-- submit -->        <input    name="submit"            type="submit"    value="submit">                <br>

</form>
<?php
    if(count($foutmsg) > 0)
    {

        echo 'Het volgende is fout gegaan:<br><br>';
        
        foreach($foutmsg as $regel)
        {

            echo $regel;
        }
    }

?>

</body>
</html>
 
- SanThe -

- SanThe -

05/08/2012 17:38:03
Quote Anchor link
Nou ook nog de echo's op regel 32 en 37 weghalen en je html is een stuk beter. (En uiteraard regel 78)
Gewijzigd op 05/08/2012 17:38:44 door - SanThe -
 
Erwin H

Erwin H

05/08/2012 17:43:31
Quote Anchor link
En deze mysql_real_escape_string weghalen. Is nergens voor nodig want je hebt het al gehashed. Eventuele sql injectie pogingen zijn daar al mee teniet gedaan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
'".mysql_real_escape_string($superhash)."',
?>
 
Jeroen ruiten

jeroen ruiten

05/08/2012 17:52:22
Quote Anchor link
@santhe: goed van je die heb ik helemaal over het hoofd gezien en die zijn nu ook weg (er valt niets meer te controleren wat het werkt!!)

@erwin: kan een hash dan niet perongelijk een ding erinzetten wat het zelfde lijk als een sql injectie
 
Erwin H

Erwin H

05/08/2012 18:31:46
Quote Anchor link
Nee, dat gaat niet gebeuren.
 
Jeroen ruiten

jeroen ruiten

05/08/2012 19:55:29
Quote Anchor link
Iedereen harstike bedankt!!!
het is opgelost

(voor andere die dit zelfde probleem hebben)
Hier is de goede verzie:

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
<?php
include 'sql2.php'; #sql gegevens
$foutmsg     = array();     #arry aanmaken als er fouten zijn. hier de fout in opslaan

    if($_SERVER['REQUEST_METHOD'] === 'POST') #als er op de submit knop is gedrukt
    {
        $fout         = false;     #instellen op false. als er een fout is gaat deze naar true
                
        
        if(empty($_POST['password'])) #als wachtwoordveld leeg is
        {
            $fout = true;
            $foutmsg[] = 'Je hebt geen wachtwoord opgegeven. <br>'; #fout toevoegen aan array
        }
        
        if(empty($_POST['email'])) #als emailveld leeg is
        {
            $fout = true;
            $foutmsg[] = 'Je hebt geen email opgegeven. <br>'; #fout toevoegen aan array
        }
        
        if(!filter_var(($_POST['email']), FILTER_VALIDATE_EMAIL)) #als emailveld niet de juiste email-opbouw heeft voorbeeld : [email protected] is goed
        {
            $fout = true;
            $foutmsg[] = 'Het opgegeven E-mail adres is niet geldig. <br>'; #fout toevoegen aan array
        }
        
        if(empty($_POST['minecraftnaam'])) #als minecraftnaam leeg is
        {
            $fout = true;
            $foutmsg[] = 'Je hebt geen minecraft naam opgegeven. <br>'; #fout toevoegen aan array
        }
        

        if($fout == false) #als boven alles goed is gegaan
        {
            
                #wachtwoord versleutelen
                $hash         = hash("sha256",($_POST['minecraftnaam'])).hash("haval256,5",($_POST['password'])).hash("md5",($_POST['minecraftnaam']));
                $superhash     = crypt($hash,($_POST['password']));
                
                #sql query aanmaken om te kijken of de naam al bestaat
                $sql    =    "     SELECT minecraftname
                                FROM inloggen
                                WHERE minecraftname = '"
.mysql_real_escape_string($_POST['minecraftnaam'])."'";
                                
                if(!$res = mysql_query($sql)) #query aanmaken en kijken of die mislukt.
                {
                    $foutmsg[] = 'Er is een onbekende fout opgetreden. Probeer het later opnieuw'; #als de query mislukt is
                }
                
                $bestaat = mysql_num_rows($res); #kijken hoevaak de gevraagde naam voorkomt
                
                if($bestaat == 0) #controleren of de gebruikers naam als bestaat, zo niet ga door
                {
                
                    #sql query aanmaken om de ingevoerde gegevens op te slaan in de database
                    $sql    =    "    INSERT INTO inloggen
                                    (    
                                        password,
                                        minecraftname,
                                        email
                                    )
                                    
                                    VALUES
                                    (
                                        '"
.($superhash)."',
                                        '"
.mysql_real_escape_string($_POST['minecraftnaam'])."',
                                        '"
.mysql_real_escape_string($_POST['email'])."'
                                    )
                            "
;
                    if(!$res = mysql_query($sql))# query aanmaken en kijken of die mislukt.
                    {
                        $foutmsg[] = 'Er is een onbekende fout opgetreden. Probeer het later opnieuw'; # als de query mislukt is
                    }                
                }

                
                else #als de gebruikers naam al bestaat
                {
                    $foutmsg[] = 'De opgegeven minecraftnaam bestaat al.'; #fout aan array toevoegen
                }
        }
    }

?>

<html>
<head>
<title>test - registeren</title>
</head>

<body>
<h1>registeren:</h1>
<form method="POST" action="registeren.php">

Je minecraft naam:    <input    name="minecraftnaam"    type="text"        size="20"    maxlength="35">    <br>
Je wachtwoord:        <input     name="password"            type="password"    size="20"    maxlength="35">    <br>
Je e-mail:            <input    name="email"            type="text"        size="20"    maxlength="35">    <br>
<!-- submit -->        <input    name="submit"            type="submit"    value="submit">                <br>

</form>
<?php
    if(count($foutmsg) > 0) #als er fouten zijn gevonden
    {
        echo 'Het volgende is fout gegaan:<br><br>'; #dit alleen plaatsen als er fouten zijn gevonden
        
        foreach($foutmsg as $regel)#een loep voor iedere fout die is gemaakt
        {
            echo $regel; #de fout aan de gebruiker geven en zeggen hoe ze dit moeten oplossen
        }
    }

?>

</body>
</html>
Gewijzigd op 05/08/2012 21:25:16 door jeroen ruiten
 



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.