login  Naam:   Wachtwoord: 
Registreer je!
 Forum

E-Mailadres weergeven (Opgelost)

Offline Waflix - 03/08/2011 17:11
Avatar van WaflixLid Jawel hoor, ik heb weer een vraag.

Deze keer maak ik gebruik van een inlogscript, geschreven door Dennisvb.
Ik heb het wat uitgebreid door ook de mogelijkheid toe te voegen je e-mailadres in te voeren. Dat heb ik gedaan door een kolom toe te voegen genaamd 'mail'.
Helaas lukt het mij maar niet om dit e-mailadres weer te geven op mijn site, en ik heb weten te concluderen dat dit komt door een fout in het bestand 'session.php'.
Originele code session.php
  1. <?php
  2. session_start(); // start een sessie of zet een sessie voort
  3.  
  4. // als de gebruiker is ingelogd
  5. if(isset($_SESSION['suser'])) {
  6. // het volgende timeout deel is optioneel - dit mag worden weggelaten
  7. // * timeout gedeelte *
  8. $now = time();
  9. // als er meer tijd is verstreken dan smaxidle
  10. // sinds het aanmaken van de sessie
  11. if($now - $_SESSION['stime'] > $_SESSION['smaxidle']) {
  12. // breek de sessie af, de gebruiker dient opnieuw in te loggen
  13. $_SESSION = array();
  14. } else {
  15. // ververs anders de sessietijd. Dit zorgt er voor
  16. // dat de gebruiker ingelogd blijft zolang deze actief is.
  17. $_SESSION['stime'] = $now;
  18. }
  19. // * einde timeout gedeelte *
  20. // v1.2 extra functionaliteit, onthouden login
  21. } elseif(isset($_COOKIE['login_cookie'])) {
  22. // bekijk de waarden van de cookie en als deze kloppen met de database - start alsnog een sessie
  23. // aanname - er is een verbinding met de database
  24. list($id, $wacht) = split(";", $_COOKIE['login_cookie']);
  25. $res = mysql_query("SELECT id, pass, level, last_ip FROM users WHERE id='".$id."'") or die(mysql_error());
  26. if(mysql_num_rows($res) > 0) {
  27. $row = mysql_fetch_assoc($res);
  28. if(!strcmp($wacht, $row['pass']) && $_SERVER['REMOTE_ADDR'] == $row['last_ip']) {
  29. // init session
  30. $_SESSION['suser'] = $naam;
  31. $_SESSION['slevel'] = $row['level'];
  32. $_SESSION['stime'] = time();
  33. $_SESSION['smaxidle'] = 60 * 60;
  34.  
  35. // update cookie
  36. // gebruik hierbij wederom het id en het versleutelde wachtwoord
  37. setcookie("login_cookie", $id.";".$wacht, time()+3600*24*31*2, "/");
  38. } else {
  39. // password of ip komt niet overeen - unset het cookie en beeindig de sessie
  40. setcookie("login_cookie", "", time(), "/");
  41. $_SESSION = array();
  42. }
  43. // geef resultaten vrij
  44. unset($row);
  45. } else {
  46. // gebruiker onbekend, cookie vervalst ?
  47. $_SESSION = array();
  48. }
  49. // ververs de pagina
  50. header("Location: ".$_SERVER['REQUEST_URI']);
  51. }
  52. ?>


Mijn aangepaste (vooral ook mee gerommelde) code
  1. <?php
  2.  
  3. if(isset($_SESSION['suser'])) {
  4. $now = time();
  5. if($now - $_SESSION['stime'] > $_SESSION['smaxidle']) {
  6. $_SESSION = array();
  7. } else {
  8. $_SESSION['stime'] = $now;
  9. }
  10. } elseif(isset($_COOKIE['login_cookie'])) {
  11. list($id, $wacht) = split(";", $_COOKIE['login_cookie']);
  12. if( isset($_SESSION['mail'])) {
  13. $res = mysql_query("SELECT id, pass, mail, level, last_ip FROM users WHERE id='".$id."'") or die(mysql_error());
  14. } else {
  15. $res = mysql_query("SELECT id, pass, level, last_ip FROM users WHERE id='".$id."'") or die(mysql_error());
  16. }
  17. if(mysql_num_rows($res) > 0) {
  18. $row = mysql_fetch_assoc($res);
  19. if(!strcmp($wacht, $row['pass']) && $_SERVER['REMOTE_ADDR'] == $row['last_ip']) {
  20. if( isset($_SESSION['mail'])) {
  21. $_SESSION['suser'] = $naam;
  22. $_SESSION['mail'] = $mail;
  23. $_SESSION['slevel'] = $row['level'];
  24. $_SESSION['stime'] = time();
  25. $_SESSION['smaxidle'] = 60 * 60;
  26. } else {
  27. $_SESSION['suser'] = $naam;
  28. $_SESSION['slevel'] = $row['level'];
  29. $_SESSION['stime'] = time();
  30. $_SESSION['smaxidle'] = 60 * 60;
  31. }
  32.  
  33. setcookie("login_cookie", $id.";".$wacht, time()+3600*24*31*2, "/");
  34. } else {
  35. setcookie("login_cookie", "", time(), "/");
  36. $_SESSION = array();
  37. }
  38. unset($row);
  39. } else {
  40. $_SESSION = array();
  41. }
  42. header("Location: ".$_SERVER['REQUEST_URI']);
  43. }
  44. ?>

5 antwoorden

Gesponsorde links
Offline lemoinet - 03/08/2011 17:35
Avatar van lemoinet PHP gevorderde en als je

  1. $_SESSION['mail'] = $mail;


verandert in

  1. $_SESSION['mail'] = $row['mail'];
Offline Martijn2008 - 03/08/2011 17:36
Avatar van Martijn2008 PHP beginner Ik denk dat je de code als volgt moet aanpassen:

Regel 14:
  1. if(!isset($_SESSION['mail'])) {


Regel 24:

  1. $_SESSION['mail'] = $row['mail'];


Bij regel 23 zet ik m'n vraagtekens, omdat je variabele $naam nooit eerder in het script hebt gedefinieerd. Overigens wil ik je erop wijzen dat je de comments beter in de code kunt laten staan. Als je later wijzigingen wilt maken kun je sneller begrijpen hoe en waarom je bepaalde aannames/besluiten hebt genomen. Waarom wil je een e-mailadres eigenlijk in een sessie-object stoppen, dat kun je toch gewoon aan de hand van het gebuikers_ID uit de database lezen?
Offline Waflix - 03/08/2011 17:49
Avatar van Waflix Lid
lemoinet schreef:
en als je

[..code..]

verandert in

[..code..]


Helaas, maar dit werkt niet.
----
Martijn2008 schreef:
Ik denk dat je de code als volgt moet aanpassen:

Regel 14:
[..code..]

Regel 24:

[..code..]

Bij regel 23 zet ik m'n vraagtekens, omdat je variabele $naam nooit eerder in het script hebt gedefinieerd. Overigens wil ik je erop wijzen dat je de comments beter in de code kunt laten staan. Als je later wijzigingen wilt maken kun je sneller begrijpen hoe en waarom je bepaalde aannames/besluiten hebt genomen. Waarom wil je een e-mailadres eigenlijk in een sessie-object stoppen, dat kun je toch gewoon aan de hand van het gebuikers_ID uit de database lezen?


Die regel 23 zit ook in het originele script, en zonder al mijn aanpassingen werkt dit gewoon.
In mijn aangepaste bestanden (zoals deze) zitten geen comments, maar in de back-up bestanden (de originele bestanden) staan wel de comments erbij. Dus dat wordt geen probleem. Doch bedankt voor de tip.
En hoe zou ik dan het e-mailadres aand de hand van het ID kunnen lezen, volgens jou? (Ik zeg niet dat het onmogelijk is, het is gewoon een vraag)
Offline Martijn2008 - 03/08/2011 17:53 (laatste wijziging 03/08/2011 17:56)
Avatar van Martijn2008 PHP beginner Is je probleem nu verholpen? Om gegevens uit je database op te halen aan de hand van de primary key(id) willen de andere Sitemasters en ik je graag helpen. Denk dan dat je dit topic het best dan kunt sluiten en een nieuwe kunt aanmaken.
Offline Waflix - 03/08/2011 18:04
Avatar van Waflix Lid ^ Helaas heeft het bewerken van beide regels niets opgeleverd.

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