login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Verschil in pagina

Offline Frederic - 27/04/2005 14:11
Avatar van FredericPHP ver gevorderde Ziet iemand een verklaring waarom deze pagina wel werkt (cookie wordt aangemaakt):
  1. <?php
  2. if(isset($_SESSION['gebruiker'])) {
  3. header("Location: ingelogged.php");
  4. }
  5. ?>
  6. <form name="form1" method="post" action="">
  7. <table border="0">
  8. <tr>
  9. <td>Gebruikersnaam:</td>
  10. <td><input name="gebruikersnaam" type="text" id="gebruikersnaam" size="35" <?php if(isset($_GET['gebruikersnaam'])) { ?>value="<?=$_GET['gebruikersnaam']?>"<?php } ?> /></td>
  11. </tr>
  12. <tr>
  13. <td>Wachtwoord:</td>
  14. <td><input name="wachtwoord" type="password" id="wachtwoord" size="35" /></td>
  15. </tr>
  16. <tr>
  17. <td>Tijd:</td>
  18. <td><select name="tijd" id="tijd">
  19. <option value="3600" selected="selected">Een uur</option>
  20. <option value="86400">Een dag</option>
  21. <option value="604800">Een week</option>
  22. <option value="2678400">Een maand</option>
  23. <option value="32140800">Een jaar</option>
  24. <option value="32140767859200">Altijd</option>
  25. </select>
  26. (cookies vereist) </td>
  27. </tr>
  28. <tr>
  29. <td colspan="2"><input type="submit" name="Submit" value="Inloggen" /></td>
  30. </tr>
  31. </table>
  32. </form>
  33. <?php if(isset($_POST['Submit'])) {
  34. $checkg = mysql_result(mysql_query("SELECT COUNT(*) FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'"),0);
  35. $checkp = mysql_result(mysql_query("SELECT COUNT(*) FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."' AND wachtwoord='".$_POST['wachtwoord']."'"),0);
  36. if($_POST['gebruikersnaam'] == "" || $_POST['wachtwoord'] == "") {
  37. $error[] = 'Vul alle velden in!';
  38. }
  39. if($checkg == 0 && $_POST['gebruikersnaam'] != "") {
  40. $error[] = 'De ingevoerde gebruikersnaam is niet geregistreerd.';
  41. }
  42. if($_POST['wachtwoord'] != "" && $_POST['gebruikersnaam'] != "" && $checkp == 0) {
  43. $error[] = 'Het ingevoerde wachtwoord is niet correct.';
  44. }
  45. $fouten = sizeof($error); // aantal errors tellen
  46. if($fouten != 0) { // Er is minstens 1 error
  47. echo 'Kan niet inloggen omwille van de volgende reden(en):';
  48. echo '<ul>';
  49. for($i = 0; $i < $fouten; $i++) {
  50. echo '<li>'.$error[$i].'</li>';
  51. }
  52. echo '</ul>';
  53. } else {
  54. $res = mysql_query("SELECT * FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'");
  55. $row = mysql_fetch_assoc($res);
  56. setcookie("gebruikersnaam",$row['gebruikersnaam'],time()+$_POST['tijd']);
  57. setcookie("wachtwoord",$row['wachtwoord'],time()+$_POST['tijd']);
  58. $_SESSION['gebruiker'] = $row['gebruikersnaam'];
  59. $_SESSION['gid'] = $row['id'];
  60. header("Location: index.php");
  61. }
  62. } ?>

en deze niet:
  1. <?php
  2. if(isset($_SESSION['gebruiker'])) {
  3. header("Location: ingelogged.php");
  4. }
  5. ?>
  6. <?php
  7. if (IsSet($_GET['melding']))
  8. {
  9. echo "<span style=\"color: #CC0000;\">".$_GET['melding']."</span>";
  10. } ?><form name="inloggen" method="post" action="">
  11. <label for="gebruikersnaam">Gebruikersnaam</label><input name="gebruikersnaam" type="text" id="gebruikersnaam" size="15" <?php if(isset($_GET['gebruikersnaam'])) { ?>value="<? echo $_GET['gebruikersnaam']?>"<?php } ?> />
  12. <label for="wachtwoord">Wachtwoord</label><input name="wachtwoord" type="password" id="wachtwoord" size="15" />
  13. <input type="submit" name="Submit" value="Inloggen" />
  14. </form>
  15. <?php if(isset($_POST['Submit'])) {
  16. $checkg = mysql_result(mysql_query("SELECT COUNT(*) FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'"),0);
  17. $checkp = mysql_result(mysql_query("SELECT COUNT(*) FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."' AND wachtwoord='".$_POST['wachtwoord']."'"),0);
  18. if($_POST['gebruikersnaam'] == "" || $_POST['wachtwoord'] == "") {
  19. $error[] = 'Vul alle velden in!';
  20. }
  21. else{
  22. if($checkg == 0 && $_POST['gebruikersnaam'] != "") {
  23. $error[] = 'Gebruikersnaam niet herkend!';
  24. }
  25. if($_POST['wachtwoord'] != "" && $_POST['gebruikersnaam'] != "" && $checkp == 0) {
  26. $error[] = 'Verkeerd wachtwoord!';
  27. }
  28. }
  29. if (isset($error))
  30. {
  31. $fouten = sizeof($error);
  32. }
  33. else
  34. {
  35. $error = "";
  36. } // aantal errors tellen
  37. if($fouten > 0) { // Er is minstens 1 error
  38. echo "<ul>";
  39. for($i = 0; $i < $fouten; $i++) {
  40. echo "<li style=\" color: #CC0000;\">".$error[$i]."</li>";
  41. }
  42. echo "</ul>";
  43. } else {
  44. $leden_sql = mysql_query("SELECT * FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'");
  45. $leden_rij = mysql_fetch_assoc($leden_sql);
  46. if (!setcookie("fadetolife_gebruikersnaam","".$leden_rij['gebruikersnaam']."",time()+32140767859200,"/")){
  47. echo "Cookie instellen mislukt";
  48. }
  49. if (!setcookie("fadetolife_wachtwoord","".$leden_rij['wachtwoord']."",time()+32140767859200,"/")){
  50. echo "Cookie instellen mislukt";
  51. }
  52. $_SESSION['gebruiker'] = $leden_rij['gebruikersnaam'];
  53. $_SESSION['gid'] = $leden_rij['id'];
  54. header("location: index.php");
  55. }
  56. }
  57. ?>

3 antwoorden

Gesponsorde links
Offline Thomas - 27/04/2005 14:34
Avatar van Thomas Moderator Dit is niet heel je script neem ik aan ?
Heb je in beide scripts ook ob_start() en session_start() staan ?
Ik zie namelijk dat je $_SESSION midden in een pagina gebruikt, en ook headers verstuurt, terwijl je pagina al is begonnen.

Het lijkt me sterk dat het niet zou werken doordat je labels gebruikt.
Wat werkt er dan niet ? Of moeten wij de "5 verschillen" zoeken ?

Het is trouwens niet bepaald logisch dat je eerst queries gaat uitvoeren (die vatbaar zijn voor MySQL-injection ?) en dan gaat controleren of de velden die je in de queries gebruikt leeg zijn...

Strip al die controles eens uit je script, en kijk dan hoe het werkt... Nette foutmeldingen aan de gebruiker is ongeveer de laatste stap die je moet zetten in een script, het lijkt mij dat eerst "de basis" het moet doen...
Offline Frederic - 27/04/2005 16:19
Avatar van Frederic PHP ver gevorderde
Citaat:
die vatbaar zijn voor MySQL-injection
welk deel bedoel je daar dan mee van de query? En hoe is dit op te lossen?
Offline Frederic - 27/04/2005 16:26
Avatar van Frederic PHP ver gevorderde Ik heb bij de registratie wel dit gedaan:
  1. if(!preg_match("/^[-_0-9a-z]{2,}$/i", $_POST['gebruikersnaam'])) {
  2. $error[] = "Een gebruikersnaam mag slechts alfanummerieke tekens bevatten (a-z, 0-9), underscore (_) of liggend streepje (-).";
  3. }

dan hoef ik toch geen schrik te hebben voor injection / gebruik van addslashes en stripslashes is toch niet nodig?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.238s