ugrás a tartalomhoz

Forgot password recovery

cbence · 2015. Ápr. 28. (K), 03.03
Van egy elfelejtett jelszó lekérő felületem
  1. if ($emlekeztet == "igen") {  
  2.   
  3. $emlekeztetek = $_POST[emlekeztetek];  
  4.   
  5. if ($emlekeztetek != "") {  
  6.       
  7.     if ($emlekeztetek_mail == "") {  
  8.     $visszajelez_emlk = "Nem adod meg az email címet?";  
  9.     }  
  10.       
  11.     if (!preg_match("/@/",$emlekeztetek_mail) || !preg_match("/./",$emlekeztetek_mail)) {  
  12.     $visszajelez_emlk2 = "Érvénytelen e-mailcím!";  
  13.     }  
  14.   
  15.     if ($emlekeztetek_mail != "" && preg_match("/@/",$emlekeztetek_mail) && preg_match("/./",$emlekeztetek_mail)) {  
  16.       
  17.         $ellenor_emlk1 = mysql_query("SELECT * FROM reg WHERE email='$emlekeztetek_mail'");  
  18.         $ellenor_emlk2 = mysql_num_rows($ellenor_emlk1);  
  19.           
  20.         if ($ellenor_emlk2 == '1') {  
  21.         $visszajelez_emlksiker = "Rendben, a jelszavad elküldtük a megadott emailcímre!";  
  22.         mysql_query("SELECT * FROM reg WHERE email='$emlekeztetek_mail'");  
  23.         mysql_query("SELECT * FROM reg WHERE jelszo='$regpas' ORDER BY emlekeztetek_mail");  
  24.           
  25.         $header2 = "xy##kukac##gmail.com";  
  26.         $mes2 = "  
  27.   
  28.         A xyoldalon jelszó-emlékeztetőt kértél!  
  29.           
  30.         Itt a jelszavad: $regpas  
  31.       
  32.         Ha nem te kértél jelszó-emlékeztetőt, levelünk tárgytalan!  
  33.         -----------------------------------------------------------------------------------------------------  
  34.         Ez a rendszerből egy automatikusan továbbított üzenet, kérlek ne válaszolj.";   
  35.   
  36.         ini_set("SMTP","smtp.gmail.com");  
  37.         ini_set("smtp_port","587");  
  38.         ini_set("smtp_username","xy##kukac##gmail.com");  
  39.         ini_set("smtp_password","xy");  
  40.         mail($emlekeztetek_mail'Jelszó_emlékeztető'$mes2$header2);  
  41.           
  42.         }else{  
  43.         $visszajelez_emlkkudarc = "Az emailcím nem található az adatbázisban!";  
  44.         }  
  45.           
  46.               
  47.     }  
  48. }  
  49. print "<center><form id=belepes action=".$_SERVER['PHP_SELF']."?emlekeztet=igen method=post>  
  50. Email_cím: <input name=emlekeztetek_mail size=15 class=szovegdoboz maxlength=150><br><br>  
  51. <input type=submit value=Elküld class=gomb name=emlekeztetek></form><br>  
  52. <a href=index.php>Vissza a belépéshez</a></center>";  
  53.   
  54. if ($visszajelez_emlk != "") {  
  55. print "<script>  
  56. alert(\"".$visszajelez_emlk."\")  
  57. </script>";  
  58. }  
  59.   
  60. if ($visszajelez_emlk2 != "") {  
  61. print "<script>  
  62. alert(\"".$visszajelez_emlk2."\")  
  63. </script>";  
  64. }  
  65.   
  66. if ($visszajelez_emlksiker != "") {  
  67. print "<script>  
  68. alert(\"".$visszajelez_emlksiker."\")  
  69. </script>";  
  70. }  
  71.   
  72. if ($visszajelez_emlkkudarc != "") {  
  73. print "<script>  
  74. alert(\"".$visszajelez_emlkkudarc."\")  
  75. </script>";  
  76. }  
Ha valaki megfelelő e-mail formátumot (@ és .) írt be és az email szerepel az adatbázisban, akkor kiküld egy emailt a megadott címre. Eddig ennyi stimmel.
A problémám az, hogy nem tudom hogyan kell kiolvastatni az adott emailcímhez tartozó jelszót a táblázatból. Ez --> mysql_query("SELECT * FROM reg WHERE jelszo='$regpas' ORDER BY emlekeztetek_mail"); Nekem egy butaságnak tűnik. A reg-ből kellene kiolvasni a jelszo-hoz tartozó jelszót, ami a begépelt $emlekeztetek_mail-hez tartozik.
A másik és szinte majdnem az egyik legfontosabb, hogy nem tudom hogyan kell a limitet beleprogramozni, tehát hogy egy adott mailcímhez pl. 3 napon belül egy emlékeztetőt lehessen kérni. Aki nekem ebben tudna segíteni és bele tudná pötyögni nekem az adott kódba a megoldást, azt nagyon megköszönném. A Mysql-el hadilábon állok, most tanulgatom...
 
1

Mielőtt kioktatnának...

Gixx · 2015. Ápr. 30. (Cs), 11.38
...próbálok segítséget nyújtani, hogy tovább tudj haladni. Idővel majd úgyis megtanulod, mit hogy érdemes.

Szóval a mysql_query(...) egy "resource"-t ad vissza, ami önmagában nem sok mindenre jó. Olyan, mint az ebédjegy. Meg nem eheted (bár miért ne), de tudsz vele kaját szerezni.
  1. // sose rakjunk felhasznalotol erkezo adatot feldolgozatlanul az SQL lekerdezesbe  
  2. $email = mysql_real_escape_string($emlekeztetek_mail);  
  3. // ossze is lehetne fuzni, ez egy fokkal elegansabb  
  4. $sql = sprintf("SELECT * FROM reg WHERE email='%s'"$email)  
  5.   
  6. // a valaszban a resource (ebedjegy)  
  7. $result = mysql_query($sql);  
  8.   
  9. // a resource segitsegevel hozzaferhetunk az informaciokhoz  
  10. $sorok_szama = mysql_num_rows($result);  
  11.   
  12. // ezzel vegigmegyunk a talalatokon. Ha csak egy van, akkor egyszer, ha tobb,   
  13. // akkor minden, ha nincs semmi, akkor egyszer se fut le.  
  14. while ($row = mysql_fetch_assoc($result)) {  
  15.     echo $row['email'];  
  16.     echo $row['password'];  
  17.     echo $row['name'];  
  18. }  
  19.   
  20. // ha pontosan csak egyszer kell, akkor csak vedd ki a while ciklusbol  
  21. $row = mysql_fetch_assoc($result);  
  22.   
  23. // bar a script vegen ez automatikusan vegbemegy, ha kell masik lekerdezest irni,   
  24. // nem art felszabaditani a memoriat, ha mar nincs szukseg erre a resource-ra tobbe  
  25. mysql_free_result($result);  
Remélem sikerült segítenem egy kicsit.
4

Probléma

cbence · 2015. Május. 1. (P), 18.51
Szia!

Közben összedobtam úgy, ahogyan írtad, de még mindig nem működik :S - Nem írja ki a jelszót
Ráadásul, valamiért nem is az SMTP szerverről küldi ki a levelet, hanem a tárhelyéről. (Ott is hiba lehet :S)
  1. if ($emlekeztetek_mail != "" && preg_match("/@/",$emlekeztetek_mail) && preg_match("/./",$emlekeztetek_mail)) {  
  2.       
  3.         $ellenor_emlk1 = mysql_query("SELECT * FROM reg WHERE email='$emlekeztetek_mail'");  
  4.         $ellenor_emlk2 = mysql_num_rows($ellenor_emlk1);  
  5.           
  6.         if ($ellenor_emlk2 == '1') {  
  7.         $visszajelez_emlksiker = "Rendben, a jelszavad elküldtük a megadott emailcímre!";  
  8.           
  9.         $email = mysql_real_escape_string($emlekeztetek_mail);  
  10.         $sql = sprintf("SELECT * FROM reg WHERE email='%s'"$email);  
  11.         $result = mysql_query($sql);   
  12.         $sorok_szama = mysql_num_rows($result);  
  13.         while ($row = mysql_fetch_assoc($result)) {    
  14.             echo $row1['id'];    
  15.             echo $row2['nev'];    
  16.             echo $row3['jelszo'];   
  17.             echo $row4['email'];   
  18.             echo $row5['aktkod'];   
  19.         }    
  20.   
  21.         $row3 = mysql_fetch_assoc($result);  
  22.           
  23.           
  24.         $header2 = "xy##kukac##gmail.com";  
  25.         $mes2 = "  
  26.   
  27.         A xy oldalon jelszó-emlékeztetőt kértél!  
  28.           
  29.         Itt a jelszavad: $row3  
  30.       
  31.         Ha nem te kértél jelszó-emlékeztetőt, levelünk tárgytalan!  
  32.         -----------------------------------------------------------------------------------------------------  
  33.         Ez a rendszerből egy automatikusan továbbított üzenet, kérlek ne válaszolj.";   
  34.   
  35.         ini_set("SMTP","smtp.gmail.com");  
  36.         ini_set("smtp_port","587");<span style="font-weight:bold"></span>  
  37.         ini_set("smtp_username","xy##kukac##gmail.com");  
  38.         ini_set("smtp_password","xy");  
  39.         mail($emlekeztetek_mail'Jelszó_emlékeztető'$mes2$header2);  
  40.           
  41.         mysql_free_result($result);  
  42.       
5

A while ciklusban egy $row

Poetro · 2015. Május. 1. (P), 18.59
A while ciklusban egy $row változót hozol létre, de teljesen más változókat használsz a cikluson belül és kívül.

És hogy kerül egy <span> a PHP kód közepére?
6

Köszi, közben megnéztem és

cbence · 2015. Május. 1. (P), 19.14
Köszi, közben megnéztem és kivettem a span-t.
Azt nem értem igazából, hogy amikor a while-ban lefutnak a sorok, akkor a $row['jelszo']; -t hogyan tudom kivenni. $row = mysql_fetch_assoc($result); , ez miért így van, ez visszahivatkozik az elejére, ahol csak simán az emailt néztük. :S
7

A $row = mysql_fetch_assoc

Poetro · 2015. Május. 1. (P), 23.23
A $row = mysql_fetch_assoc egy egész sort ad vissza. Abban benne van az összes mező abból a sorból, amit lekérdeztél az adatbázisból.
9

Array

cbence · 2015. Május. 3. (V), 02.08
Köszönöm! Közben a mysql_fetch_array -el próbálkoztam és valóban így már minden oké! :)
  1. $email = mysql_real_escape_string($emlekeztetek_mail);  
  2.         $sql = sprintf("SELECT * FROM reg WHERE email='%s'"$email);  
  3.         $result = mysql_query($sql);   
  4.         $row = mysql_fetch_array($result);   
  5.         $row1 = $row[nev];        
  6.         $row2 = $row[jelszo];  
  7.           
  8.         $header2 = "xy##kukac##gmail.com";  
  9.         $mes2 = "  
  10.         Kedves $row1!  
  11.           
  12.         Az xy oldalon jelszó-emlékeztetőt kértél!  
  13.           
  14.         A felhasználóneved: $row1  
  15.         A jelszavad: $row2  
  16.           
  17.         Biztonsági okokból a belépésed után módosíts jelszót!  
  18.         Ha nem te kértél jelszó-emlékeztetőt, levelünk tárgytalan!  
8

Doksi

janoszen · 2015. Május. 2. (Szo), 12.11
Ha elolvasod az ini_set-tel beallitott parameterek dokumentaciojat, ra fogsz jonni, hogy ezek csak Windows alatt mukodnek. (Igen, ezert a PHP gyarosok haromszor vesszoztessenek meg.) Ettol fuggetlenul, Gmailt hasznalni automatizalt levelkuldesre nem bolcs dolog, elobb-utobb le fognak tiltani.
2

PHP 5.5-

Gixx · 2015. Ápr. 30. (Cs), 11.55
Arra azért figyelj, hogy ezt a mysql függvénytárat a PHP az 5.5-ös verzióban nyugdíjazza.

Szóval ha most tanulod, akkor érdemesebb egy frissebb PHP könyvet beszerezni, amiben már a PDO-t használják.

De addig is a PHP hivatalos dokumentáció a te barátod. A sok példa miatt alap angol tudással is el lehet boldogulni vele (nekem sikerült anno).

Vagy találtam még egy ilyet: web programozás
3

THX

cbence · 2015. Ápr. 30. (Cs), 21.50
Köszi a segítséget, jó dolgokat találtam a linkeken is! :)