[PHP] Controle op dubbele gebruikersnaam werkt niet.

Pagina: 1
Acties:
  • 188 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

Of het ligt aan mij of ik snap het niet. :)
Ik wil een gebruiker aanmaken.
Dan controlleerd hij of die gebruiker en het emailadres bestaat.

Vreemd genoeg de database is leeg. Dus 0 gebruikers.
Ik voeg een nieuwe toe en dan zegt hij dat gebruikersnaam en emailadres al bestaan. Maar hij voegt hem wel toe. dus het lijkt dat ie hem er 2 keer inzet. ga ik daarna een nieuwe invoegen dan doe hij dat gewoon 2 keer.

Ik heb deze functie voor het opslaan van mijn gegevens.
PHP:
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
<? 
    function opslaan(){ 
        $sqlgnaam = mysql_query("SELECT gebruikersnaam FROM gebruikers WHERE gebruikersnaam = '".$_POST['gebruikersnaam']."' LIMIT 0,1 "); 
        $sqlemail = mysql_query("SELECT email FROM gebruikers WHERE email = '".$_POST['email']."' LIMIT 0,1 "); 
        mysql_num_rows($sqlemail); 
        mysql_num_rows($sqlnaam); 
        if(mysql_num_rows($sqlemail) == 1 && mysql_num_rows($sqlgnaam) == 1){ 
            echo "Gebruikersnaam en EmailAdres bestaan al."; 
            exit(); 
        }else if (mysql_num_rows($sqlgnaam) == 1){ 
            echo "Gebruikersnaam bestaat al."; 
            exit(); 
        }else if(mysql_num_rows($sqlemail) == 1){ 
            echo "Email adres bestaat al."; 
            exit(); 
        } 
        if (strtolower($_POST['gebruikersnaam']) == strtolower($_POST["wachtwoord"])){ 
            echo "Gebruik een ander wachtwoord of gebruikersnaam."; 
            exit(); 
        } 
        $wachtwoord = md5($_POST['wachtwoord']); 
        $sql = "INSERT INTO gebruikers (`id`,`naam`,`gebruikersnaam`,`email`,`wachtwoord`,`groep`,`actief`,`registratiedatum`,
`laatstebezoek`) VALUES ('', '".$_POST['naam']."', '".$_POST['gebruikersnaam']."', '".$_POST['email']."',
 '".$wachtwoord."', '".$_POST['groep']."', '1', NOW(), NOW())"; 
        mysql_query("$sql") or die(mysql_error()); 
        echo "<script>document.location.href='gebruikers.php'</script>"; 
    } 
?>

[ Voor 26% gewijzigd door Verwijderd op 12-09-2004 16:38 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Je kunt beter SELECT COUNT(*) FROM gebruikers where gebruikersnaam = '' doen ipv die vage query met die limit...

waarschijnlijk kom je dan vanzelf achter je probleem, want ik ga het niet doorspitten zo (tip zet er een [ php ] tags omheen...)

[ Voor 40% gewijzigd door Verwijderd op 12-09-2004 15:56 ]


Acties:
  • 0 Henk 'm!

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 15-08 22:46

KompjoeFriek

Statsidioot

zoiets?
PHP:
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
    function opslaan(){ 
        $sqlgnaam = mysql_query("SELECT gebruikersnaam FROM gebruikers
    WHERE gebruikersnaam = '".$_POST['gebruikersnaam']."' LIMIT 0,1 "); 
        $naamrows = mysql_num_rows($sqlnaam);
        $sqlemail = mysql_query("SELECT email FROM gebruikers
    WHERE email = '".$_POST['email']."' LIMIT 0,1 "); 
        $emailrows = mysql_num_rows($sqlemail);
        //mysql_num_rows($sqlemail); 
        //mysql_num_rows($sqlnaam); 
        if($naamrows == 1 && $emailrows == 1){ 
            echo "Gebruikersnaam en EmailAdres bestaan al."; 
            exit(); 
        }else if ($naamrows == 1){ 
            echo "Gebruikersnaam bestaat al."; 
            exit(); 
        }else if($emailrows == 1){ 
            echo "Email adres bestaat al."; 
            exit(); 
        } 
        if (strtolower($_POST['gebruikersnaam']) == strtolower($_POST["wachtwoord"])){ 
            echo "Gebruik een ander wachtwoord of gebruikersnaam."; 
            exit(); 
        } 
        $wachtwoord = md5($_POST['wachtwoord']); 
        $sql = "INSERT INTO gebruikers
    (`id`,`naam`,`gebruikersnaam`,`email`,`wachtwoord`,`groep`,`actief`,
    `registratiedatum`,`laatstebezoek`) VALUES 
    ('', '".$_POST['naam']."', '".$_POST['gebruikersnaam']."', '".$_POST['email']."', 
    '".$wachtwoord."', '".$_POST['groep']."', '1', NOW(), NOW())"; 
        mysql_query("$sql") or die(mysql_error()); 
        echo "<script>document.location.href='gebruikers.php'</script>"; 
    }
mysql_num_rows werkt alleen net na een query, toch?

WhatPulse! - Rosetta@Home - Docking@Home


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

mysql_num_rows(); geeft het aantal rijen terug dat de laatste query opleverde. je kan de resource meegeven, dan geeft hij van de resource terug. Geen probleem dus. Ik zou even controleren of je query goed is in phpMyAdmin o.i.d.
Limit is niet nodig: je checkt of er een 2e bij komt. Als je dan bij je if-statement checkt of hij >0 is, werkt het zeker.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik vermoed dat de code van KomjoeFriek je probleem oplost; die ziet er gewoon goed uit, maar ik heb wel 2 offtopic opmerkingen voor de topicstarter:
Ten eerste:
PHP:
1
mysql_query("$sql") or die(mysql_error());

Waarom zet je een variabele tussen quotes? Dit is lelijk, nergens voor nodig, en het kost zelfs een paar nanoseconden extra om te parsen. :)

PHP:
1
echo "<script>document.location.href='gebruikers.php'</script>";

Waarom doe je dit met Javascript? Je kan meestal beter een location header setten, mits je tenminste niets hebt afgedrukt naar het scherm (en dat gebeurt, in ieder geval in deze functie, niet).

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Omdat ik de sql ff echode. Doe meestal wel gewoon zonder de ""
PHP:
1
2
3
<?
mysql_query("$sql") or die(mysql_error());
?> 


Omdat ik de header al van te voren mee stuur:
PHP:
1
2
3
 <?
echo "<script>document.location.href='gebruikers.php'</script>";
?>  


Maar hij voegt nog steeds toe, dubbel zelfs. terwijl hij wel de error geeft dat de gebruikersnaam en email adres al bestaan terwijl er 1 ding in de database staat van een compleet ander persoon.

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
offtopic:
[google=sql+injection]

Acties:
  • 0 Henk 'm!

  • Hmmbob
  • Registratie: September 2001
  • Laatst online: 21:13
Werkt de code van Kompjoefreak? in jouw code zit namelijk een foutje:

PHP:
1
2
$sqlgnaam = mysql_query("bla"); 
mysql_num_rows($sqlnaam);


$sqlnaam komt niet overeen, bij de bovenste staat er een G extra in

Sometimes you need to plan for coincidence


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    function opslaan(){
        $sqlnaam = mysql_query("SELECT gebruikersnaam FROM gebruikers WHERE gebruikersnaam = '".$_POST['gebruikersnaam']."' LIMIT 0,1 ");
        $sqlemail = mysql_query("SELECT email FROM gebruikers WHERE email = '".$_POST['email']."' LIMIT 0,1 ");

        if(mysql_fetch_assoc($sqlnaam)){
            echo "Gebruikersnaam bestaat al.";
            exit();
        }else if(mysql_fetch_assoc($sqlemail)){
            echo "Email adres bestaat al.";
            exit();
        }else{
            $wachtwoord = md5($_POST['wachtwoord']);
            $sql = "INSERT INTO gebruikers (`id`,`naam`,`gebruikersnaam`,`email`,`wachtwoord`,`groep`,`actief`
,`registratiedatum`,`laatstebezoek`) VALUES('', '".$_POST['naam']."', '".$_POST['gebruikersnaam']."', '".$_POST['email']."', '".$wachtwoord."',
 '".$_POST['groep']."', '1', NOW(), NOW())";
            mysql_query("$sql") or die(mysql_error());
            echo "<script>document.location.href='gebruikers.php'</script>";
        }
    }


Ja ik had het al gezien. Nu heb ik het zo gedaan
phpMyAdmin ernaast de hele tabel leeg gemaakt.
Toen opnieuw gebruiker aangmaakt.
weer foutmelding dat gebruiker al bestaat.
Maar wel dat er een nieuwe gebruiker is toegevoegd.

Ik ga nu googlelen naar injection

[ Voor 17% gewijzigd door Verwijderd op 12-09-2004 17:03 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 12 september 2004 @ 16:47:
Omdat ik de sql ff echode. Doe meestal wel gewoon zonder de ""
Meestal? Doe het maar gerust altijd. Het staat knullig, en het is nergens voor nodig dat je quotes gebruikt. :)
Verwijderd schreef op 12 september 2004 @ 16:47:
Omdat ik de header al van te voren mee stuur:
Dan nog is een location header setten beter. Speel wat met output buffering indien nodig, zodat je laterna nog headers kan setten.
Verwijderd schreef op 12 september 2004 @ 16:47:
Maar hij voegt nog steeds toe, dubbel zelfs. terwijl hij wel de error geeft dat de gebruikersnaam en email adres al bestaan terwijl er 1 ding in de database staat van een compleet ander persoon.
Volgens mij roep je je functie twee keer aan ofzo. Dan voegt ie eerst zonder probleem iemand toe, en daarna probeert ie dat nog eens, maar dan bestaat die gebruiker al. Vervolgens wordt ie alsnog een extra keer toegevoegd.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Volgens mij roep je je functie twee keer aan ofzo. Dan voegt ie eerst zonder probleem iemand toe, en daarna probeert ie dat nog eens, maar dan bestaat die gebruiker al. Vervolgens wordt ie alsnog een extra keer toegevoegd.
Tsja dacht ik ook al.
Ik roep hem zo aan in mijn formulier:
PHP:
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
<?
function formulier(){
echo "<table width=\"300\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"tablebox\">
            <form action=\"".$formaction."\" method=\"post\" name=\"formulier\" onSubmit=\"return check()\">
            <tr class=tabletitel>
                <td colspan=2>".$titel." account.</td>
            </tr>
            <tr id=error>
                <td colspan=2><input type=\"text\" name=\"errorveld\" class=\"errorveld\" value=\"Vul de gegevens in van het 
nieuwe account.\" readonly></td>
            </tr>
            <tr>
                <td>Naam:</td>
                <td><input type=\"text\" name=\"naam\" value=\"".$sql['naam']."\"></td>
            </tr>
            <tr>
                <td>Gebruikersnaam:</td>
                <td><input type=\"text\" name=\"gebruikersnaam\" value=\"".$sql['gebruikersnaam']."\" $readonly></td>
            </tr>
            <tr>
                <td>Email:</td>
                <td><input type=\"text\" name=\"email\" value=\"".$sql['email']."\"></td>
            </tr>
            <tr>
                <td>".$wachtwoordnieuw." Wachtwoord:</td>
                <td><input type=\"password\" name=\"".$wachtwoordnieuw."wachtwoord\" value=\"\"></td>
            </tr>
            <tr>
                <td>Bevestig ".$wachtwoordnieuw." wachtwoord:</td>
                <td><input type=\"password\" name=\"".$wachtwoordnieuw."wachtwoord2\" value=\"\"></td>
            </tr>
            <tr>
                <td colspan=2 align=\"right\"><input type=\"hidden\" name=\"id\" value=\"".$sql['id']."\">
                <input type=\"button\" value=\"Annuleren\" 
onClick=\"document.location.href='gebruikers.php';\"> <input type=\"submit\" value=\"Opslaan\"></td>
            </tr></form>
        </table>";
    }

    switch($_GET['optie']){
        case "verwijder":
            verwijder();
        break;
        case "opslaan":
            opslaan();
        break;
        default:
            begin();
        break;
    }
?>
Pagina: 1