login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Meerdere malen registreren

Offline Waflix - 05/08/2011 09:11 (laatste wijziging 05/08/2011 09:18)
Avatar van WaflixLid Ik ben verder gaan werken aan mijn site, en ging mijn registratieformulier testen. Het bleek echter dat het mogelijk was om je account te kopiëren door de pagina te herladen wanneer je het bericht kreeg dat je succesvol bent geregistreerd, en dat is natuurlijk niet de bedoeling.

reg.php
  1. <?php
  2. if(isset($_POST['regSubmit'])){
  3. if( $_SESSION['security_code'] == $_POST['security_code'] && !empty($_SESSION['security_code'])){
  4. if(!strcmp($_POST['regPass1'], $_POST['regPass2'])) {
  5. if(!empty($_POST['regNaam'])){
  6. if(!empty($_POST['regPass1'])){
  7. if(!empty($_POST['regMail1'])){
  8. if(mysql_num_rows($res) == 0) {
  9. if(!strcmp($_POST['regMail1'], $_POST['regMail2'])) {
  10. $pass = md5($_POST['regPass1']);
  11. $name = $_POST['regNaam'];
  12. $mail = md5($_POST['regMail1']);
  13. mysql_query("INSERT INTO members (naam, wachtwoord, mail) VALUES ('".$name."','".$pass."','".$mail."')") or die(mysql_error());
  14. echo"You've succesfully been registered!";
  15. } else {
  16. echo"The entered e-mailadresses don't equal!";
  17. }
  18. } else {
  19. echo"The entered username or e-mailadress already exists!";
  20. }
  21. } else {
  22. echo"You must fill in your e-mailadress!";
  23. }
  24. } else {
  25. echo"You must fill in a password!";
  26. }
  27. } else {
  28. echo"You must fill in a username!";
  29. }
  30. } else {
  31. echo"The entered passwords don't equal!";
  32. }
  33. } else {
  34. echo"You didn't fill the Captcha in correctly!";
  35. }
  36. } else {
  37. ?>

Dus, bij het bericht "You've succesfully been registered!" kun je de pagina herladen om zo je account te dupliceren, omdat de gegevens ook opnieuw worden verzonden naar de database.

Hoe kan ik dit voorkomen?

5 antwoorden

Gesponsorde links
Offline GTW - 05/08/2011 09:13 (laatste wijziging 05/08/2011 09:14)
Avatar van GTW Gouden medaille

PHP gevorderde
Ik zie hier nergens een punt waar je controleert of de username al bestaat. Die check is altijd wel handig.

laat maar, zie hem al... klopt deze query wel dan? Als je hem kunt kopieren, dan vindt deze dus altijd 0.
Offline Waflix - 05/08/2011 09:14 (laatste wijziging 05/08/2011 09:21)
Avatar van Waflix Lid ^ Dat gebeurt wel:
  1. if(mysql_num_rows($res) == 0) {
  2. // Verder controleren
  3. } else {
  4. echo"The entered username or e-mailadress already exists!";
  5. }

----

De query klopt wel degelijk. Maar wanneer je de pagina herlaadt nadat je account is toegevoegd, weet hij dat het formulier al is verzonden, maar kijkt niet alles nog een keer na, hij verzend de query gewoon nog een keer. Ik had net (na een test) 3 keer hetzelfde account met hetzelfde wachtwoord en e-mailadres. (Uiteraard wel een ander ID).
----

PS: Kleine revisie in code, gaf verkeerde error weer.
PPS: Hij checkt helemaal niet of de gebruikersnaam al bestaat. Ik heb net gewoon, door opnieuw het registratieformulier in te vullen een 'admin'-account aangemaakt.
Offline lemoinet - 05/08/2011 09:26
Avatar van lemoinet PHP gevorderde je voert "mysql_num_rows($res) == 0" uit, maar ik kan nergens vinden wat "$res" is.
Offline Waflix - 05/08/2011 09:32 (laatste wijziging 05/08/2011 09:40)
Avatar van Waflix Lid ^ Weet ik. Ik dacht al dat het niet zou werken, maar het bleek ineens wel te werken. Ik kreeg namelijk een error waarin werd gezegd dat de gebruikersnaam al bestond. Achteraf bleek dat ik de haakjes verkeerd had gezet en daardoor een verkeerde error werd weergegeven.
...en nu? Hoe check ik of de naam en/of het e-mailadres al bestaat in een tabel?
Offline Martijn2008 - 06/08/2011 16:45 (laatste wijziging 06/08/2011 16:48)
Avatar van Martijn2008 PHP beginner Heb je zelf al wat code geschreven? Van enkel vragen leer je namelijk niet veel. Onderstaande code heb ik voor je geschreven, maar heb die code niet getest. Dat mag jij doen. Laat je horen of het werkt? Succes!

  1. // Deze methode voorkomt SQL injectie
  2. function EscapeString($string)
  3. {
  4. return mysql_real_escape_string($string);
  5. }
  6.  
  7. // Deze methode controleert of een gebruikersnaam al bestaat in de database
  8. function ExistAccountAlreadyByUsername($username)
  9. {
  10. $result = false;
  11. $context = mysql_query("SELECT * FROM members WHERE naam='" . EscapeString($username) . "'") or die (mysql_error());
  12. if(mysql_num_rows($context) > 0)
  13. {
  14. result = true;
  15. }
  16. return $result;
  17. }
  18.  
  19. // Deze methode controleert of een mail al bestaat in de database
  20. function ExistAccountAlreadyByMail($mail)
  21. {
  22. $result = false;
  23. $context = mysql_query("SELECT * FROM members WHERE mail='" . EscapeString($mail) . "'") or die (mysql_error());
  24. if(mysql_num_rows($context) > 0)
  25. {
  26. result = true;
  27. }
  28. return $result;
  29. }
  30.  
  31. // Aanroepen van methode ExistAccountAlreadyByUsername en POST-waarde meesturen
  32. if(ExistAccountAlreadyByUsername($_POST['regNaam']))
  33. {
  34. echo "Gebruikersnaam bestaat al";
  35. }
  36.  
  37. // Aanroepen van methode ExistAccountAlreadyByMail en POST-waarde meesturen
  38. elseif(ExistAccountAlreadyByMail($_POST['regMaill']))
  39. {
  40. echo "Mail bestaat al";
  41. }


Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.211s