ugrás a tartalomhoz

Forgot password recovery

cbence · 2015. Ápr. 28. (K), 03.03
Van egy elfelejtett jelszó lekérő felületem


if ($emlekeztet == "igen") {

$emlekeztetek = $_POST[emlekeztetek];

if ($emlekeztetek != "") {
	
	if ($emlekeztetek_mail == "") {
	$visszajelez_emlk = "Nem adod meg az email címet?";
	}
	
	if (!preg_match("/@/",$emlekeztetek_mail) || !preg_match("/./",$emlekeztetek_mail)) {
	$visszajelez_emlk2 = "Érvénytelen e-mailcím!";
	}

	if ($emlekeztetek_mail != "" && preg_match("/@/",$emlekeztetek_mail) && preg_match("/./",$emlekeztetek_mail)) {
	
		$ellenor_emlk1 = mysql_query("SELECT * FROM reg WHERE email='$emlekeztetek_mail'");
		$ellenor_emlk2 = mysql_num_rows($ellenor_emlk1);
		
		if ($ellenor_emlk2 == '1') {
		$visszajelez_emlksiker = "Rendben, a jelszavad elküldtük a megadott emailcímre!";
		mysql_query("SELECT * FROM reg WHERE email='$emlekeztetek_mail'");
		mysql_query("SELECT * FROM reg WHERE jelszo='$regpas' ORDER BY emlekeztetek_mail");
		
		$header2 = "xy##kukac##gmail.com";
		$mes2 = "

		A xyoldalon jelszó-emlékeztetőt kértél!
		
		Itt a jelszavad: $regpas
	
		Ha nem te kértél jelszó-emlékeztetőt, levelünk tárgytalan!
		-----------------------------------------------------------------------------------------------------
		Ez a rendszerből egy automatikusan továbbított üzenet, kérlek ne válaszolj."; 

		ini_set("SMTP","smtp.gmail.com");
		ini_set("smtp_port","587");
		ini_set("smtp_username","xy##kukac##gmail.com");
		ini_set("smtp_password","xy");
		mail($emlekeztetek_mail, 'Jelszó_emlékeztető', $mes2, $header2);
		
		}else{
		$visszajelez_emlkkudarc = "Az emailcím nem található az adatbázisban!";
		}
		
			
	}
}
print "<center><form id=belepes action=".$_SERVER['PHP_SELF']."?emlekeztet=igen method=post>
Email_cím: <input name=emlekeztetek_mail size=15 class=szovegdoboz maxlength=150><br><br>
<input type=submit value=Elküld class=gomb name=emlekeztetek></form><br>
<a href=index.php>Vissza a belépéshez</a></center>";

if ($visszajelez_emlk != "") {
print "<script>
alert(\"".$visszajelez_emlk."\")
</script>";
}

if ($visszajelez_emlk2 != "") {
print "<script>
alert(\"".$visszajelez_emlk2."\")
</script>";
}

if ($visszajelez_emlksiker != "") {
print "<script>
alert(\"".$visszajelez_emlksiker."\")
</script>";
}

if ($visszajelez_emlkkudarc != "") {
print "<script>
alert(\"".$visszajelez_emlkkudarc."\")
</script>";
}

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.

// sose rakjunk felhasznalotol erkezo adatot feldolgozatlanul az SQL lekerdezesbe
$email = mysql_real_escape_string($emlekeztetek_mail);
// ossze is lehetne fuzni, ez egy fokkal elegansabb
$sql = sprintf("SELECT * FROM reg WHERE email='%s'", $email)

// a valaszban a resource (ebedjegy)
$result = mysql_query($sql);

// a resource segitsegevel hozzaferhetunk az informaciokhoz
$sorok_szama = mysql_num_rows($result);

// ezzel vegigmegyunk a talalatokon. Ha csak egy van, akkor egyszer, ha tobb, 
// akkor minden, ha nincs semmi, akkor egyszer se fut le.
while ($row = mysql_fetch_assoc($result)) {
    echo $row['email'];
    echo $row['password'];
    echo $row['name'];
}

// ha pontosan csak egyszer kell, akkor csak vedd ki a while ciklusbol
$row = mysql_fetch_assoc($result);

// bar a script vegen ez automatikusan vegbemegy, ha kell masik lekerdezest irni, 
// nem art felszabaditani a memoriat, ha mar nincs szukseg erre a resource-ra tobbe
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)
if ($emlekeztetek_mail != "" && preg_match("/@/",$emlekeztetek_mail) && preg_match("/./",$emlekeztetek_mail)) {
	
		$ellenor_emlk1 = mysql_query("SELECT * FROM reg WHERE email='$emlekeztetek_mail'");
		$ellenor_emlk2 = mysql_num_rows($ellenor_emlk1);
		
		if ($ellenor_emlk2 == '1') {
		$visszajelez_emlksiker = "Rendben, a jelszavad elküldtük a megadott emailcímre!";
		
		$email = mysql_real_escape_string($emlekeztetek_mail);
		$sql = sprintf("SELECT * FROM reg WHERE email='%s'", $email);
		$result = mysql_query($sql); 
		$sorok_szama = mysql_num_rows($result);
		while ($row = mysql_fetch_assoc($result)) {  
			echo $row1['id'];  
			echo $row2['nev'];  
			echo $row3['jelszo']; 
			echo $row4['email']; 
			echo $row5['aktkod']; 
		}  

		$row3 = mysql_fetch_assoc($result);
		
		
		$header2 = "xy##kukac##gmail.com";
		$mes2 = "

		A xy oldalon jelszó-emlékeztetőt kértél!
		
		Itt a jelszavad: $row3
	
		Ha nem te kértél jelszó-emlékeztetőt, levelünk tárgytalan!
		-----------------------------------------------------------------------------------------------------
		Ez a rendszerből egy automatikusan továbbított üzenet, kérlek ne válaszolj."; 

		ini_set("SMTP","smtp.gmail.com");
		ini_set("smtp_port","587");
		ini_set("smtp_username","xy##kukac##gmail.com");
		ini_set("smtp_password","xy");
		mail($emlekeztetek_mail, 'Jelszó_emlékeztető', $mes2, $header2);
		
		mysql_free_result($result);
	
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é! :)


$email = mysql_real_escape_string($emlekeztetek_mail);
		$sql = sprintf("SELECT * FROM reg WHERE email='%s'", $email);
		$result = mysql_query($sql); 
		$row = mysql_fetch_array($result); 
		$row1 = $row[nev]; 		
		$row2 = $row[jelszo];
		
		$header2 = "xy##kukac##gmail.com";
		$mes2 = "
		Kedves $row1!
		
		Az xy oldalon jelszó-emlékeztetőt kértél!
		
		A felhasználóneved: $row1
		A jelszavad: $row2
		
		Biztonsági okokból a belépésed után módosíts jelszót!
		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! :)