login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Gegevens ophalen d.m.v. primary key

Offline Waflix - 03/08/2011 18:04 (laatste wijziging 03/08/2011 18:08)
Avatar van WaflixLid (vorige topic)

Ik maak gebruik van een inglogscript, geschreven door Dennisvb.
Ik heb enkele aanpassingen gemaakt waardoor het mogelijk wordt om naast je wachtwoord en gebruikersnaam, ook je e-mailadres te registreren. Het is mij gelukt om dit te doen, en van een testgebruiker heb ik het e-mailadres in de database zien staan.
Het probleem wat ik nu heb is dat ik het e-mailadres weer terug wil kunnen halen. In het vorige topic heb ik te horen gekregen dat dit mogelijk is door middel van de primary key. Gelieve dan ook het vorige topic te lezen.

In het geval van te weinig gegevens, gewoon vragen om gegevens!

8 antwoorden

Gesponsorde links
Offline Martijn - 03/08/2011 18:38
Avatar van Martijn Crew PHP je doet toch select id,naam,email ipv zonder de email?
Offline Waflix - 03/08/2011 19:13
Avatar van Waflix Lid ^Ja, inderdaad. Dat realiseerde ik mij ook al toen ik aan het eten was.

Dit betekent toch dat dit idee onnodig is?
(Ja, Waflix!)
Oké! Wat nu?
(Ik zal je wel even helpen met je code! Hier is wat er fout gaat: [dit wordt jouw post])
Offline Martijn - 03/08/2011 19:27
Avatar van Martijn Crew PHP Kijk hier eens naar. Niet om het over te nemen, maar hoe het werkt

http://www.site...et_sessies
Offline Waflix - 03/08/2011 20:06 (laatste wijziging 03/08/2011 20:41)
Avatar van Waflix Lid In mijn code wordt de naam geïmporteerd met de volgende code:
  1. <?= $_SESSION['suser'] ?>


Boven aan elke pagina dat de gebruikersnaam weergeeft staat de volgende code:
  1. <?php
  2. require("connect.php");
  3. requite("session.php");
  4. ?>

Dit betekend dus dat, om erachter te komen wat de gebruikersnaam is, hij eerst verbinding zoekt met de database (uiteraard). Wanneer ik kijk in dit bestand kom ik dit tegen:
  1. <?php
  2. // Uiteraard heb ik mijn wachtwoord etc. hieruit weggelaten.
  3. $host = "[...]";
  4. $user = "[...]";
  5. $pass = "[...]";
  6. $dbas = "[...]";
  7.  
  8. if(mysql_connect($host, $user, $pass)) {
  9. } else {
  10. echo "Failed to connect to database.";
  11. }
  12. ?>


In het bestand connect.php wordt er letterlijk alleen maar verbinding gemaakt met de database. Voor de rest valt er op de pagina met de geïmporteerde gebruikersnaam geen PHP te vinden. Session.php is dus toch wat ik nodig heb om erachter te komen wat ik moet aanpassen.

session.php (origineel)
  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. ?>


Na even de code te hebben doorgelezen, heb ik het volgende stukje gevonden:
  1. // geef resultaten vrij
  2. unset($row);

Wat ik denk dat er gebeurt is dat hij nu de gegevens van $res vrijgeeft die komen van de MySQL tabellen. En ik denk dan ook dat ik iets moet aanpassen in die rij!

Ik heb 'mail, ' er maar bij gezet (regel 26).
Ik heb het nu ook nog even nagekeken. Alle code klopt. Maar zelfs wanneer ik deze code gebruik:
  1. <?php
  2. // include/require hier evt nog andere zaken
  3. require ("connect.php");
  4. // we willen op deze pagina gebruik maken van beveiliging mbv sessies,
  5. // dus includen (requiren) we session.php
  6. require("session.php");
  7. ?>
  8. <html>
  9. <head>
  10. <title>sessies · voorbeeld</title>
  11. </head>
  12.  
  13. <body>
  14. <?php
  15. /*
  16.  we gaan hier kijken of de gebruiker is ingelogd, en welk
  17.  user level de gebruiker heeft. Op grond daarvan laten we
  18.  bepaalde delen al dan niet zien.
  19.  Een gebruikerslevel is een getal wat aangeeft hoeveel
  20.  "macht" je hebt. Vaak is het zo: hoe hoger het getal, hoe
  21.  meer je mag.
  22.  bijvoorbeeld:
  23.  Voor een bepaalde bewerking heb je gebruikers-
  24.  niveau 1 nodig, maar voor een andere bewerking heb je niveau
  25.  2 nodig. Een gebruiker die beide bewerkingen mag uitvoeren
  26.  heeft gebruikersniveau 1+2 = 3. MAAR: Een gebruiker die om
  27.  een of andere reden alleen de tweede bewerking mag uitvoeren
  28.  heeft gebruikersniveau 0+2 = 2. Dus je telt de nummers die
  29.  bij bepaalde rechten horen bij elkaar op.
  30.  Het nummer dat het recht geeft op een bepaalde bewerking is
  31.  altijd een macht van 2.
  32.  bijvoorbeeld:
  33.  recht #1 (bv inloggen) heeft gebruikers niveau 2^0 = 1
  34.  recht #2 (bv je eigen info veranderen) heeft gebr. niveau 2^1 = 2
  35.  recht #3 (bv nieuws toevoegen) heeft gebruikers niveau 2^2 = 4
  36.  recht #4 (bv members toevoegen) heeft gebruikersniveau 2^3 = 8
  37.  enz.
  38.  Iemand die al deze bewerkingen mag uitvoeren heeft dus
  39.  gebruikersniveau 1+2+4+8 = 15 (of 2^4 - 1)
  40.  Iemand die alleen recht #1 en recht #3 heeft, heeft
  41.  dus gebruikersniveau 1+4 = 5
  42.  */
  43. // controle op ingelogd zijn:
  44. if(isset($_SESSION['suser'])) {
  45. ?>
  46. user <b><?= $_SESSION['suser'] ?></b> is logged in.<br />
  47. <?php
  48. /*
  49.   vervolgens kijken we naar het userlevel, we vergelijken
  50.   bitsgewijs het gebruikerslevel - dit doen we met behulp van
  51.   een enkele '&' (de bitwise comparator)
  52.   *** LET OP ***
  53.   Enkel controleren met & is niet genoeg !
  54.   Stel dat je level 9 moet hebben voor een bepaalde bewerking, en je hebt
  55.   maar level 1. 1 & 9 is gelijk aan 1, en dan zou if(1 & 9) { ... } true opleveren
  56.   Je moet dus expliciet controleren of je level hoog genoeg is.
  57.   */
  58. if(($_SESSION['slevel'] & 1) == 1) {
  59. // voer code uit behorend bij recht #1
  60. ?>
  61. Je hebt recht #1.<br />
  62. <?php
  63. } else {
  64. // geef een melding dat je de acties
  65. // behorend bij recht #1 niet mag uitvoeren
  66. ?>
  67. Je hebt recht #1 NIET.<br />
  68. <?php
  69. }
  70.  
  71. if(($_SESSION['slevel'] & 2) == 2) {
  72. // voer code uit behorend bij recht #2
  73. ?>
  74. Je hebt recht #2.<br />
  75. <?php
  76. } else {
  77. ?>
  78. Je hebt recht #2 NIET.<br />
  79. <?php
  80. }
  81. if(($_SESSION['slevel'] & 4) == 4) {
  82. // voer code uit behorend bij recht #3
  83. ?>
  84. Je hebt recht #3.<br />
  85. <?php
  86. } else {
  87. ?>
  88. Je hebt recht #3 NIET.<br />
  89. <?php
  90. }
  91. if(($_SESSION['slevel'] & 8) == 8) {
  92. // voer code uit behorend bij recht #4
  93. ?>
  94. Je hebt recht #4.<br />
  95. <?php
  96. } else {
  97. ?>
  98. Je hebt recht #4 NIET.<br />
  99. <?php
  100. }
  101. // et cetera
  102. ?>
  103. <a href="logout.php">uitloggen</a><br />
  104. <?php
  105. } else {
  106. ?>
  107. Je bent op dit moment niet ingelogd.<br />
  108. <a href="login.php">inloggen</a><br />
  109. <?php
  110. }
  111. ?>
  112. </body>
  113. </html>


en dan bij regel 46 dit erbij zet:
  1. <?= $_SESSION['smail'] ?>


lukt het niet.
(PS: Ik heb ook nog bij 'session.php' geprobeert dit:
  1. $_SESSION['smail'] = $mail;

te plaatsen na regel 31 (regel 32, dus). Maar dat werkt niet.)

Conclusie: Ik heb nu werkelijk geen idee wat te doen.
----
----
EDIT!
Na nog eens even de code goed te hebben bekeken, ben ik erachter gekomen dat alle informatie van de gebruiker wordt geïmporteerd uit de database van het ID dat gelijk is aan het ID van de ingelogde gebruiker. Dus als de ingelogde gebruiker bijvoorbeeld "$id = 1" heeft, worden alle gegevens (gebruikersnaam, wachtwoord etc.) naar binnen gebracht.
Het stuk code dat dit doet?

  1. $res = mysql_query("SELECT id, pass, level, last_ip FROM users WHERE id='".$id."'") or die(mysql_error());

Even in het Nederlands: Haal de volgende gegevens uit de database waarmee ik ben verbonden uit tabel 'users': id, pass, level, last_ip op de plaats waar het ID in de database gelijk is aan het ID van de op het moment ingelogde gebruiker. Niet mogelijk? SQL_error!
Dit betekent dus dat ik in dat lijstje het woord "mail" er ook bij moet zetten. Want dat is ten slotte de naam van de kolom waar het e-mailadres in staat.
----

Ik heb net even Martijns post gelezen (de post hieronder) en ik ga maar even overnieuw beginnen!
Offline Martijn - 03/08/2011 20:35
Avatar van Martijn Crew PHP als ik eerlijk moet zijn, ik zou overnieuw beginnen met die tutorial die ik gaf. Degene die jij gevolgd hebt is wat gevorderder, en een stuk lastiger te overzien. Bovendien vind k uberhaupt niet zo duidelijk of taktisch in elkaar gezet, maar dat daar gelaten

Die ik gaf is minimalistisch, maar duidelijk naar mijn mening. Simpel uit te breiden naar wat jij wilt, en geeft aan hoe je met die sessie waardes je informatie weer terug krijgt
Offline Waflix - 03/08/2011 21:01
Avatar van Waflix Lid Of ik heb je tutorial helemaal verkeerd gevolgt, maar ik heb nergens iets kunnen vinden over hoe te communiceren met de database.
Offline Martijn - 03/08/2011 21:23
Avatar van Martijn Crew PHP de connect moet je zelf maken ja, maar meer dan dat is ook niet nodig. Staat allemaal uitgelegd
Offline Waflix - 03/08/2011 21:36
Avatar van Waflix Lid Ik ben op het moment al bezig met het maken van het registratie formulier!
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.274s