Multidesk.be » Forums » PHP » Heel eenvoudig authenticatiesysteem

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door Ezio op vrijdag 11 juli 2014 om 16:54:05.
Ezio's avatar
Multiviteit: 973
Hey,

Als oefening wil ik een heel simpel authenticatiesysteem ontwikkelen met PHP. De ingevoerde gegevens moeten stroken met voorgedefineerde variabelen ($Gebruikersnaam en $Wachtwoord).
Indien de gegevens correct zijn, wordt het opgeslagen in een sessie.
Om dit te verwezenlijken schreef ik onderstaan PHP-scriptje. Vreemd genoeg krijg ik het formulier (met de tekstvakken) niet eens te zien. Ik krijg een error bij regel 41 (net voor de body-tag).
Iemand van jullie die er raad mee weet? Thx! :)

PHP
  1.  
  2. <? php
  3. $Gebruikersnaam = 'Thibault';
  4. $Wachtwoord = '007';
  5. ?>
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  7. <html xmlns="http://www.w3.org/1999/xhtml">
  8. <head>
  9. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  10. <title>Inloggen</title>
  11. </head>
  12.  
  13. <body>
  14. <p>Log in met volgende gegevens: <br />
  15. Gebruikersnaam: <?php echo $Gebruikersnaam ?> <br />
  16. Wachtwoord: <?php echo $Wachtwoord ?> <br />
  17.  
  18. <form action="Inloggen.php" method="post" name="Inloggen">
  19. Naam:
  20. <input name="Naam" type="text" /> <br />
  21. Wachtwoord:
  22. <input type="password" name="Wachtwoord" /><br />
  23. <input type="submit" name="Verzenden" value="KnopGeklikt" />
  24. </form>
  25.  
  26. <?php
  27. // Als er op de knop geklikt werd kijken we of de gebruikersnaam en wachtwoord overeenkomen met de voorgedefinieerde gegevens
  28.  
  29. If (isset($_POST['Verzenden'])) {
  30.         // De knop verzenden werd ingedrukt
  31.         // we controleren nu of het gebruikersnaam en wachtwoord kloppen
  32.         if ($_POST['Naam'] == $Gebruikersnaam && $_POST['Wachtwoord'] == $Wachtwoord) {
  33.                 echo "De ingevoerde gegevens zijn correct, u wordt nu doorgestuurd naar de volgende pagina";
  34.                 //Logingegevens opslaan in sessie
  35.                 $_SESSION['Gebruikersnaam'] == $_POST['Naam'];
  36.                 $_SESSION['Wachtwoord'] == $_POST['Wachtwoord'];
  37. } else {
  38.         echo "De ingevoerde gebruikersgegevens komen niet overeen met de voorgedefineerde gegevens, gelieve ze opnieuw in te voeren.";
  39. ?>
  40.  
  41. </body>
  42. </html>
  43.  
I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #1 geschreven door Cdude op vrijdag 11 juli 2014 om 19:00:08.
Cdude's avatar
Multiviteit: 5427
Eat my shorts :)
Gokje voor zover ik het begrijp maar moet dien 'echo' daar wel staan in PHP ?
http://php.net/manual/en/function.echo.php
"Two things are infinite: the universe and human stupidity; and I'm not sure about the universe."
"Friendship is like peeing in your pants : everybody can see it but only u can feel it's warmth"
^ Reactie #2 geschreven door thekid op zaterdag 12 juli 2014 om 00:33:27.
thekid's avatar
Multiviteit: 5273
Moderator
uw if is niet afgesloten (er ontbreekt een } op lijn 40 ;))

Verder, ter info, het heeft absoluut geen zin je php om de validatie onderaan na het renderen van uw script te doen. Op dat moment is het al te laat om een echte validatie/evaluatie te doen.

Kies beter voor 1 van de volgende:
- post naar een login validatie pagina, die kan een session variabele zetten die je dan naar kunt verwijzen op de rest van je website. De aparte validatie pagina kan je dan doorverwijzen naar de "succesvol ingelogd pagina", of naar "foutieve invoer pagina"

- zet je validatie alvorens de form te tonen, en laat naar gelang correct ingelogd te zijn de login form tonen, of de welkom gebruiker form

- valideer je input door middel van een post naar een "webservice", je pagina hoeft niet te herladen zolang een verkeerd wachtwoord ingegeven wordt (hiervoor kan jquery je zeker een dienst bewijzen ;))

Randinformatie

btw, html5 heeft <button type="submit">Inloggen</button> ipv input type="submit"

btw2, wachtwoord zou ik ook niet zomaar in je sessie bewaren, heb je eigenlijk verder niet meer nodig ;)


Dixit

Dixit Cdude op 11/07/2014 19:00:08:

Gokje voor zover ik het begrijp maar moet dien 'echo' daar wel staan in PHP ?
http://php.net/manual/en/function.echo.php


je maakt het zelf een stuk makkelijker door zoveel mogelijk logische code van layout/html te scheiden. Zo'n shorthand functies zijn meestal van nut voor counters, korte timestamps, niet om forms of berichten te tonen ;)
Deze tekst werd het laatst bewerkt voor 23.29 % door thekid op zaterdag 12 juli 2014 om 00:45:00.
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #3 geschreven door Ezio op zaterdag 12 juli 2014 om 13:37:41.
Ezio's avatar
Multiviteit: 973
Thx voor je uitgebreide input, heb er veel uit geleerd en nu werkt alles :D Als Cdude geen vragen meer heeft mag er voor mij een slotje op ;)
I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #4 geschreven door Cdude op zaterdag 12 juli 2014 om 13:45:18.
Cdude's avatar
Multiviteit: 5427
Eat my shorts :)
als dat niet teveel moeite is, plaats je werkende code eens aub?
"Two things are infinite: the universe and human stupidity; and I'm not sure about the universe."
"Friendship is like peeing in your pants : everybody can see it but only u can feel it's warmth"
^ Reactie #5 geschreven door Ezio op zaterdag 12 juli 2014 om 14:21:30.
Ezio's avatar
Multiviteit: 973
wou daarnet wat uitbreiden, en daar werkt er nog iets niet. Wanneer de gebruiker succesvol is ingelogd wil ik een gepersonaliseerd welkomstbericht tonen. Waar ik dit precies doe, zie je in regel 22. Het probleem is dat hij enkel toont "Welkom". De sessie toont hij dus niet. Vreemd...

PHP
  1.  
  2. <?php
  3.  
  4. // Voorgedefnineerde gegevens
  5. $CorrecteGebruikersnaam = 'Thibault';
  6. $CorrectWachtwoord = '007';
  7.  
  8.  
  9. // Als er op de knop geklikt werd kijken we of de gebruikersnaam en wachtwoord overeenkomen met de voorgedefinieerde gegevens
  10.  
  11. If (isset($_POST['btnVerzenden'])) {
  12.         // De knop verzenden werd ingedrukt
  13.         // we controleren nu of de gebruikersnaam en het wachtwoord kloppen
  14.         if (($_POST['Naam'] == $CorrecteGebruikersnaam) && ($_POST['Wachtwoord'] == $CorrectWachtwoord)) {
  15.                
  16.                 //Logingegevens opslaan in sessie
  17.                 $_SESSION['Gebruikersnaam'] == $_POST['Naam'];
  18.                 $_SESSION['Wachtwoord'] == $_POST['Wachtwoord'];
  19.                                
  20.                                 // Bevestiging geven aan de gebruiker dat hij is ingelogd
  21.                                 echo "Welkom ". $_SESSION['Gebruikersnaam'];
  22. } else {
  23.         echo "De ingevoerde gebruikersgegevens komen niet overeen met de voorgedefineerde gegevens, gelieve ze opnieuw in te voeren.";
  24. }
  25. }
  26.  
  27. ?>
  28. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  29. <html xmlns="http://www.w3.org/1999/xhtml">
  30. <head>
  31. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  32. <title>AuthenticatieNieuw</title>
  33. </head>
  34.  
  35. <body>
  36. <p>Log in met volgende gegevens: <br />
  37. Gebruikersnaam: Thibault; <br />
  38. Wachtwoord: 007;</p>
  39.  
  40. <form action="AuthenticatieNieuw.php" method="post" name="Inloggen">
  41. Naam:
  42. <input name="Naam" type="text" /> <br />
  43. Wachtwoord:
  44. <input type="password" name="Wachtwoord" /><br />
  45. <input type="submit" name="btnVerzenden" value="Verzenden" />
  46. </form>
  47.  
  48. </body>
  49. </html>
  50.  
Deze tekst werd het laatst bewerkt voor 0.25 % door Ezio op zaterdag 12 juli 2014 om 14:21:59.
I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #6 geschreven door thekid op zaterdag 12 juli 2014 om 16:16:07.
thekid's avatar
Multiviteit: 5273
Moderator
Ik zou zeggen, de spatie voor uw session statement :)
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #7 geschreven door Ezio op zaterdag 12 juli 2014 om 17:52:13.
Ezio's avatar
Multiviteit: 973
Bedoel je hier?
PHP
  1. // Bevestiging geven aan de gebruiker dat hij is ingelogd
  2.                                 echo "Welkom ". $_SESSION['Gebruikersnaam'];

Heb de spatie hier nu gewist, maar het werkt nog steeds niet :/
I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #8 geschreven door thekid op zondag 13 juli 2014 om 11:16:48.
thekid's avatar
Multiviteit: 5273
Moderator
Ja heb het ook eens getest en heb hetzelfde, ik onderzoek maar eens :)

vermoedelijk kan het session object niet direct afgebeeld worden, maar misschien via parameters of na conversie :)
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #9 geschreven door Ezio op zondag 13 juli 2014 om 12:31:10.
Ezio's avatar
Multiviteit: 973
Vreemd, dit werkt bijvoorbeeld wel:
PHP
  1.  
  2. <?php
  3.  
  4. $_SESSION['Sessie'] = "Thibault";
  5.  
  6. echo "Hallo ".$_SESSION['Sessie'];
  7. ?>
  8.  


En als je een spatie voor de sessie zet, werkt het nog steeds :P

Thx voor je onderzoekje :)
I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #10 geschreven door thekid op dinsdag 15 juli 2014 om 23:24:36.
thekid's avatar
Multiviteit: 5273
Moderator
Kan je eens testen of deze werkt op je apache server?
Bijlage: 8919d1417294cddf1ff4271030a2453e.zip

Ik heb ook "probleem" gehad met het niet bewaren van sessies, met uw testpagina. Toen heb ik het iets anders geschreven en gaat het wel. Je kan eens proberen om alle fouten / waarschuwing weer te geven in je scriptje (zie init.php), en de sessie enkel starten als deze effectief nog niet gestart is. (ook init.php)

init.php
PHP
  1. <?
  2. // enable displaying warnings & errors
  3. ini_set('display_errors', 1);
  4.  
  5. // start new session in case there is none there
  6. if(session_id() == '') {
  7.     session_start();
  8. }
  9. ?>
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen