Autor Zpráva
anonymní
Profil *
Ahoj, na mnoha stránkách s přihlášením se vyskytuje odkaz "Zapomněli jste heslo?". Jak se to v php řeší?
Nastíním moji vizi:
Při registraci budu chtít po uživateli login, heslo a e-mail - vše uložím do databáze. Poté co uživatel klikne na "Zapomněli jste heslo?" se mu zobrazí formulář aby zadal login a e-mail. A podle těchto údajů zjistim jeho heslo a pošlu mu ho e-mailem?

A co když ale mám jeho heslo uložené jako hash? Co mu pak pošlu?
Díky
SkIpPeR
Profil
ja to mam řešený takhle:
<h3>Odeslání zapomenutého hesla</h3> 
<p>
	Zapomenuli jste heslo?<br/> 
	Nic se neděje. Vygenerujeme Vám nové, které zašleme na Vámi zadaný e-mail při registraci.
</p>
			<form action="./zpracuj/prihlaseni-zapomenute-heslo_zpracuj.php" method="post">
				Zadejte email: <input type="text" name="LostPassEmail" class="input" size='30' maxlength='50'/><br/>
				<input type="submit" value="Odešli" class="input"/>
			</form>

<?php 
ob_start();
session_start();
include'../index/function.php'; 
include'../index/config.php'; 
	mysql_connect($dbserver, $dblogin, $dbheslo);
	mysql_select_db($dbnazev)or die('Nepodařilo se připojit k databázi. <b>Systém není naistalován!</b><br />
													Před instalací je nutno vyplnit údaje v souboru "config.php"!<br />
													<a href="install.php">Instalace systému</a>');
	mysql_query("SET NAMES 'utf8'");
	if(isset($_POST['LostPassEmail'])){
			$mail=$_POST['LostPassEmail'];		
				$mailexist=mysql_num_rows(mysql_query("SELECT `mail` FROM uzivatele WHERE `mail`='$mail' "));
					if($mailexist==0){
						$bl="../index.php?page=prihlaseni-zapomenute-heslo&Alert=10";
						header("location: $bl");
					}else{
						$NoveHeslo=DejNahodneCislo();
						$NoveHeslo2=md5($NoveHeslo);
						$UpdatePass=mysql_query("UPDATE uzivatele SET `heslo`='$NoveHeslo2' WHERE `mail`='$mail'") or die (mysql_error());
						if(!$UpdatePass){
							$bl="../index.php?page=prihlaseni-zapomenute-heslo&Alert=13";
							header("location: $bl");					
						}else{
							$subject = "Odeslani zapomenuteho hesla";
							$headers = "Content-Type: text/html; charset=utf8\n"; 
							$zprava = "Vase nove heslo je: ".$NoveHeslo."<br> S pozdavem Blinds.tym";
							$PosliMail=mail($mail, $subject, $zprava, $headers);
							if(!$PosliMail){
								$bl="../index.php?page=prihlaseni-zapomenute-heslo&Alert=12";
								header("location: $bl");								
							}else{
							$bl="../index.php?Alert=11";
							header("location: $bl");		
							}	
						}
					}
	}else{
		echo "Nemas tu co delat, nebyl odeslany zadny email.";
	} // konec kontroly zda je povolene zasilani hesla na mail.
ob_end_flush();
?>
Radek9
Profil
anonymní:
Já vygeneruji náhodné heslo, uložím do souboru s uživatelem a pošlu mu ho na mail.
anonymní
Profil *
SkIpPeR:
Ale pak mu přijde zašifrované heslo ve tvaru 15fdg4d5fg4fd5g4dfg nebo ne?

Radek9:
Takže vůbec nepoužíváš hash?
Taps
Profil
anonymní:
je celkem jedno zda se odešle hash nebo nějaké jiné zašifrované heslo. Ve většině případů to bývá tak že pokud uživatel zapomene heslo tak se mu na email odešle nějaké náhodně vygenerované heslo, které si pak po přihlášení změní.
SkIpPeR
Profil
v PHP si musíš ještě udělat funkci
function DejNahodneCislo(){
	$num = rand(100000, 999999);
	return $num;
}

to ti vytvoří kód, a to se našte do proměné $NoveHeslo=DejNahodneCislo();
zakoduje se to až $NoveHeslo2=md5($NoveHeslo);
ale e-mail pošlu s proměnou $zprava = "Vase nove heslo je: ".$NoveHeslo."<br> S pozdavem Administrator";
Radek9
Profil
anonymní:
Používám. Proto generuji nové.
RockFire
Profil
Jenom pro upřesnění. Odešleš mu heslo bez hashe a do db uložíš zahashované heslo.
SkIpPeR
Profil
mužeš to udělat jako to mam ja, plus si tam mužeš přidat porovnávání i s přezdívkou (jménem)
staco
Profil
Ahojte zacinam s PHP a neviem si rady ako poslat uzivatelovi nove heslo tak aby sa stare vymazalo z databazy a nove vlozilo do databazy
Nove heslo mi vygeneruje a uspesne odosle ale potrebujem zistit ako vymazat to stare a nove ulozit do databazy k prislusnemu uzivatelovi(customer_id)Uz som skusal vselico ale nefunguje mi to

Toto je html pre tlacitko a vola mi dalsi script a transact_user - poslat nove heslo = to funguje

<h1>Pripomenutie zabudnuteho hesla</h1>
<p>Zabudli ste svoje heslo? Zadajte svoju emailovu adresu a my Vam posleme nove 
heslo na Vas email!</p>
<form method="post" action="cms_transact_user.php">
 <div>
  <label for="email">Emailova adresa:</label>
  <input type="text" id="email" name="email" maxlength="100"/>
  <input type="submit" name="action" value="Poslat nove heslo!"/>
 </div>
</form>

Tu je switch pre "Poslat nove heslo" ,ktore mi uspesne posle nove vygenerovane heslo


 case 'Poslat nove heslo!':
    $mail = new PHPMailer();
  $mail->IsSMTP();  // k odeslání e-mailu použijeme SMTP server
  $mail->SMTPDebug = 1;
  $mail->SMTPSecure = 'tls';
  $mail->Host = 'smtp.gmail.com';  // zadáme adresu SMTP serveru
  $mail->Port = 25;
  $mail->SMTPAuth = true;
  $mail->SetLanguage("sk");               // nastavíme true v případě, že server vyžaduje SMTP autentizaci
  $mail->Username = "....";   // uživatelské jméno pro SMTP autentizaci
  $mail->Password = "....";            // heslo pro SMTP autentizaci
 
  $mail->SetFrom = "....@gmail.com";
$mail->AddReplyTo = "....@gmail.com";
 

  $mail->Subject = "Obnovenie hesla pre web Lydka-Kozmetika !";    // nastavíme předmět e-mailu
 
  $mail->WordWrap = 50;   // je vhodné taky nastavit zalomení (po 50 znacích)
  $mail->CharSet = "utf-8";   // nastavíme kódování, ve kterém odesíláme e-mail 
   $mail->AddAttachment("images/phpmailer.gif");      // attachment
   $mail->AddAttachment("images/phpmailer_mini.gif"); // attachment
   
  $email = (isset($_POST['email'])) ? $_POST['email'] : ''; //overenie existencie email 
        if (!empty($email)) //email nie je prazdny
        {
            $sql = 'SELECT email FROM cms_users WHERE email="' . //vyber z databazy 
                mysql_real_escape_string($email, $db) . '"'; 
$result = mysql_query($sql, $db) or die(mysql_error($db));}   //vlozenie do result

  $password = strtoupper(substr(sha1(time()), rand(0, 32), 8));//generovanie noveho hesla
  $body = 'Vyzera to tak ze ste zabudli heslo, eh? Netrapte sa. ' . 
                    'Vytvorili sme Vam nove!' . "\n\n";
                $body .= 'Vase nove heslo je: ' . $password;

while ($row = mysql_fetch_array ($result)) {
  
  $mail->AltBody    = "Pohlad html !"; //
  $mail->MsgHTML($body);
  $mail->AddAddress($row["email"]);
   
  
  if(!$mail->Send()) {
    echo "Mailer Error (" . str_replace("@", "@", $row["email"]) . ') ' . $mail->ErrorInfo . '<br />';
  } 
    
    
  }
  // Odstranenie adersy a prilohy z pamete
  $mail->ClearAddresses();
  $mail->ClearAttachments();
  
            mysql_free_result($result);
            
        }
        redirect('cms_login.php');
        break


A tu je tabulka cms_user


$sql = 'CREATE TABLE IF NOT EXISTS cms_users (
        customer_id      INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
        email        VARCHAR(100)     NOT NULL UNIQUE,
        password     CHAR(41)         NOT NULL,
        name         VARCHAR(100)     NOT NULL,
        access_level TINYINT UNSIGNED NOT NULL DEFAULT 1,

        PRIMARY KEY (customer_id)
    )
    ENGINE=MyISAM';
staco
Profil
Tak je to vyriesene
vlozil som do kodu toto riadok 37 a funguje to


 $sql = 'UPDATE cms_users SET password = PASSWORD("' .  mysql_real_escape_string($password, $db) . '")
       WHERE email = "' . mysql_real_escape_string($email) . '" ';
       
         mysql_query($sql, $db) or die(mysql_error())

case 'Poslat nove heslo!':
    $mail = new PHPMailer();
  $mail->IsSMTP();  // k odeslání e-mailu použijeme SMTP server
    $password = strtoupper(substr(sha1(time()), rand(0, 32), 8));
   $body = 'Vyzera to tak ze ste zabudli heslo, eh? Netrapte sa. ' . 
                    'Vytvorili sme Vam nove!' . "\n\n";
                $body .= 'Vase nove heslo je: ' . $password;
  $mail->SMTPDebug = 1;
  $mail->SMTPSecure = 'tls';
  $mail->Host = 'smtp.gmail.com';  // zadáme adresu SMTP serveru
  $mail->Port = 25;
  $mail->SMTPAuth = true;
  $mail->SetLanguage("sk");               // nastavíme true v případě, že server vyžaduje SMTP autentizaci
  $mail->Username = "mstacoo";   // uživatelské jméno pro SMTP autentizaci
  $mail->Password = "slobodaxllx";            // heslo pro SMTP autentizaci
 
  $mail->SetFrom = "mstacoo@gmail.com";
$mail->AddReplyTo = "lydasi@gmail.com";
 

  $mail->Subject = "Obnovenie hesla pre web Lydka-Kozmetika !";    // nastavíme předmět e-mailu
 
  $mail->WordWrap = 50;   // je vhodné taky nastavit zalomení (po 50 znacích)
  $mail->CharSet = "utf-8";   // nastavíme kódování, ve kterém odesíláme e-mail 
   $mail->AddAttachment("images/phpmailer.gif");      // attachment
   $mail->AddAttachment("images/phpmailer_mini.gif"); // attachment
   
  $email = (isset($_POST['email'])) ? $_POST['email'] : ''; //overenie existencie email 
        if (!empty($email)) //email nie je prazdny
        {
            $sql = 'SELECT email FROM cms_users WHERE email="' . //vyber z databazy 
                mysql_real_escape_string($email, $db) . '"'; 
$result = mysql_query($sql, $db) or die(mysql_error($db));}   //vlozenie do result

  
  
  $sql = 'UPDATE cms_users SET password = PASSWORD("' .  mysql_real_escape_string($password, $db) . '")
       WHERE email = "' . mysql_real_escape_string($email) . '" ';
       
         mysql_query($sql, $db) or die(mysql_error());
        
 

while ($row = mysql_fetch_array ($result)) {
  
  $mail->AltBody    = "Pohlad html !"; //
  $mail->MsgHTML($body);
  $mail->AddAddress($row["email"]);
   
  
        
        
    
 

  if(!$mail->Send()) {
    echo "Mailer Error (" . str_replace("@", "@", $row["email"]) . ') ' . $mail->ErrorInfo . '<br />';
  } else {
    echo "Message sent to :" . $row["email"] . ' (' . str_replace("@", "@", $row["email"]) . ')<br />';
    
    
  }
  // Clear all addresses and attachments for next loop
  $mail->ClearAddresses();
  $mail->ClearAttachments();
  
            mysql_free_result($result);
            
        }
        redirect('cms_login.php');
        break;

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: