login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Slaat gegevens niet op

Offline rredspike1 - 17/06/2008 14:29
Avatar van rredspike1Lid
  1. <?php
  2. include('config/verbinden.php');
  3.  
  4. if(isset($_POST['aanmelden'])){
  5. $gebruikersnaam = $_POST['gebruikersnaam'];
  6. $wachtwoord = md5($_POST['wachtwoord']);
  7.  
  8. $sql = mysql_query("SELECT gebruikersnaam, wachtwoord FROM gebruikers WHERE gebruikersnaam ='".$_POST['gebruikersnaam']."' AND wachtwoord='".$_POST['wachtwoord']."'")or die(mysql_error());
  9. $ingelogd = mysql_num_rows($sql);
  10. if ($ingelogd == true)
  11. {
  12. // Correcte inlog, onthoud de gebruiker.
  13. $_SESSION['gebruikersnaam'] = $row['id'];
  14. echo '<center><br><br><br><br><br><br><br><br><br><br><br><br><br>
  15. <font face="arial" size="2">Uw wordt doorgestuurd naar uw pagina!<br>
  16. in 3 seconden...</font>
  17. <meta http-equiv="refresh" content="3;URL=main.php" /></center>';
  18. }
  19. else
  20. {
  21. echo "Combinatie fout, probeer het opnieuw.";
  22. // echo laten zien met foutmelding
  23. }
  24. }
  25. else
  26. {


Slaat de gegevens niet op in $_SESSION['gebruikersnaam'];

Kan dit ook anders?

ps; gaat wel verder naar main.php alleen kan geen gegevens ophalen...vanuit $_SESSION

14 antwoorden

Gesponsorde links
Offline lemoinet - 17/06/2008 14:30
Avatar van lemoinet PHP gevorderde misschien nog ergens mysql_fetch_assoc plaatsen
Offline Wim - 17/06/2008 14:31
Avatar van Wim Crew algemeen je $row bestaat ook helemaal niet
Offline rredspike1 - 17/06/2008 14:37 (laatste wijziging 17/06/2008 14:44)
Avatar van rredspike1 Lid hahaha!

en hoe maak ik dit aan?

Heb nu eraan toegevoegd
  1. $row = mysql_fetch_assoc($sql);


  1. <?php
  2. include('config/verbinden.php');
  3.  
  4. if(isset($_POST['aanmelden'])){
  5. $gebruikersnaam = $_POST['gebruikersnaam'];
  6. $wachtwoord = md5($_POST['wachtwoord']);
  7.  
  8. $sql = mysql_query("SELECT gebruikersnaam, wachtwoord FROM gebruikers WHERE gebruikersnaam ='".$_POST['gebruikersnaam']."' AND wachtwoord='".$_POST['wachtwoord']."'")or die(mysql_error());
  9. $ingelogd = mysql_num_rows($sql);
  10. $row = mysql_fetch_assoc($sql);
  11. if ($ingelogd == true)
  12. {
  13. // Correcte inlog, onthoud de gebruiker.
  14. $_SESSION['gebruikersnaam'] = $row['id'];
  15. echo '<center><br><br><br><br><br><br><br><br><br><br><br><br><br>
  16. <font face="arial" size="2">Uw wordt doorgestuurd naar uw pagina!<br>
  17. in 3 seconden...</font>
  18. <meta http-equiv="refresh" content="3;URL=main.php" /></center>';
  19. }
  20. else
  21. {
  22. echo "Combinatie fout, probeer het opnieuw.";
  23. // echo laten zien met foutmelding
  24. }
  25. }
  26. else
  27. {


Als ik dan word doorverwezen naar de main.php

krijg ik geen Welkom <b>naam_gebruiker</b> te zien.
main.php code:

  1. <?php
  2. if (isset($_SESSION['gebruikersnaam']));
  3. {
  4. echo "Welkom".$gebruikersnaam;
  5. }
  6. ?>
Offline lemoinet - 17/06/2008 14:48
Avatar van lemoinet PHP gevorderde
  1. $sql = mysql_query("SELECT id, gebruikersnaam, wachtwoord FROM gebruikers WHERE gebruikersnaam ='".$_POST['gebruikersnaam']."' AND wachtwoord='".$_POST['wachtwoord']."'");
Offline Wim - 17/06/2008 14:59
Avatar van Wim Crew algemeen je main is ook verkeerd:
echo "Welkom ".$_SESSION['gebruikersnaam'];

Trouwens, je kan best een LIMIT 1 achter je query zetten zodat hij stopt met zoeken vanaf hij 1 match heeft (en er zal er ook maar maximaal 1 zijn). Kan bij een grote database behoorlijk wat laadtijd schelen.

Verder,
Persoonlijk zou ik trouwens de gebruikersnaam en wachtwoord niet ophalen. Ik zou dus volgende query gebruiken:
  1. SELECT id
  2. FROM gebruikers
  3. WHERE gebruikersnaam ='".$_POST['gebruikersnaam']."' AND wachtwoord='".$_POST['wachtwoord']."'
  4. LIMIT 1
Offline Joost - 17/06/2008 15:49 (laatste wijziging 17/06/2008 15:50)
Avatar van Joost PHP expert main.php

  1. <?php
  2. if (isset($_SESSION['gebruikersnaam'])){
  3. echo "Welkom".$gebruikersnaam;
  4. }
  5. ?>


Let wel op de beveiliging van het script, de oorspronkelijke van jou is niet veilig.
Offline rredspike1 - 17/06/2008 16:10
Avatar van rredspike1 Lid Hi Medieval en hoe zou ik het beter kunnen beveiligen?

Tips? Welkom

Echt alvast bedankt voor zover!
Offline Joost - 17/06/2008 16:21 (laatste wijziging 17/06/2008 16:22)
Avatar van Joost PHP expert Je zal moeten controleren wat de gebruiker bij gebruikersnaam heeft ingevuld.
Mogen dit alleen letters en cijfers zijn, kan je deze code gebruiken:

  1. if(!ctype_alnum($gebruikersnaam)){
  2. die("Ongeldige Gebruikersnaam!");
  3. } else {
  4.  
  5. // geldige gebruikersnaam
  6.  
  7. }


Je kan ook de ingevoerde gegevens vanuit POST met de functie mysql_real_escape_string veranderen dat alleen geldige MySQL tekens in de input voorkomen.
Zo kan je SQL Injections voorkomen.

Je maakt volgensmij ook een foutje door eerst de variabele $wachtwoord de waarde van md5($_POST['wachtwoord']) te geven, en daarna in de query $_POST['wachtwoord']. Het lijkt me dat daar ook $wachtwoord moet staan.

Wil je meer weten over de beveiliging en gegevensvalidatie, kan je even hier kijken:

http://www.site...svalidatie
http://www.unixwiz.net/techtips/sql-injection.html


Offline Wim - 17/06/2008 17:05
Avatar van Wim Crew algemeen ctype_alnum($gebruikersnaam)

volledig overbodig. Deze check doe je namelijk bij het registreren en moet je dus niet altijd doen.

Verder moet je $_SESSION['gebruikersnaam'] gebruiken, anders ga je in de toekomst problemen krijgen met een upgrade van je php versie
Offline Joost - 17/06/2008 17:08
Avatar van Joost PHP expert Als je dat niet zou doen, kan je daar invoeren wat je wilt, waarbij je SQL Injecties kan veroorzaken.
Denk dan bijvoorbeeld aan iets ' OR '1'='1
Dat zal nog steeds een SQL Injectie tot gevolg hebben, en dan zul je op het eerste account inloggen dat MySQL tegen komt...
Offline Wim - 17/06/2008 17:31
Avatar van Wim Crew algemeen PHP.net: mysql_real_escape_string is genoeg. Het geen dat je dan zal zien is dat er geen records gevonden worden
Offline Joost - 17/06/2008 18:02
Avatar van Joost PHP expert Als je letterlijk leest staat er: Je kan ook ...

Maar dat maakt verder niet uit, ik denk dat de TS het wel begrijpt nu. 
Offline Wim - 17/06/2008 20:55
Avatar van Wim Crew algemeen dan nog steeds is het veiliger om alles te escapen imo! je moest maar eens een keertje ' vergeten in je query
Offline Gerard - 18/06/2008 01:54
Avatar van Gerard Ouwe rakker je kan het beter een keer teveel controleren dan te weinig. 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.398s