Şifremi Unuttum Bölümü Otomatik Gönderme

index.php

<?php
	try {
		$db = new PDO('mysql:hostname=localhost;dbname=rinryesi_unuttum;', 'rinryesi_unuttum', 'Cancan.123');
	}catch (PDOException $e) {
		die($e->getMessage());
	}
	
	function createHash($uzunluk = 16) {
		$karekterler = 'qwertyuıopasdfghjklizxcvbnmQWERTYUIOPASDFGHJKLİZXCVBNM1234567890';
		return substr(str_shuffle($karekterler), 0, $uzunluk);
	}
?>
<center><div style="width:860px; background:#607d8b; border:1px; solid #ddd; border-radius:10px; margin:10px; auto; padding:15px;">
		<?php
		 
		 $domainalma = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
		 $domainklasor = "$_SERVER[REQUEST_URI]";
		
		  if(@$_POST["ara"]) {
			$eposta = $_POST["eposta"];
			$query = $db->prepare('SELECT eposta, isim, hash FROM uyeler WHERE eposta = ?');
			$query->execute([$eposta]);
			if($query->rowCount()) {
				$row = $query ->fetch(PDO::FETCH_ASSOC);
			$isim = "Sayın:".$row["isim"]."";
			$mail = "Şifrenizi Yenilemek İçin Lütfen Bağlantıyı Tıklayınız ".$domainalma."index.php?yenile=".$row["hash"]."";
				
				echo"<form method=\"POST\" action=\"send.php\">". "			
					<input type=\"text\" name=\"mail\" value=\"$eposta\" id=\"mail\">". "			
					<input type=\"text\" name=\"ad_soyad\" value=\"$isim\" id=\"ad_soyad\">". "			
					<textarea rows=\"21\" name=\"mesaj\" id=\"mesaj\">$mail</textarea>". "			
					<input type=\"submit\" value=\"Şifreyi E-Postama Gönder\">". "
					</form>"."";
				// Mail Gönderdik 
			}else {
				echo'Böyle bir Eposta yok';
			}
		} 
		
		if(isset($_GET["yenile"])) {
			$hash = $_GET["yenile"];
			$query = $db->prepare('SELECT * FROM uyeler WHERE hash = ?');
			$query->execute([$hash]);
			if($query->rowCount())	{
				if(@$_POST["SifreYenile"]) {
					$sifre = $_POST["sifre"]; 
					$yeniHash = createHash();
					$query = $db->prepare('UPDATE uyeler SET sifre = ?, hash = ? WHERE hash = ?');
					$query->execute([$sifre, $yeniHash, $hash]);
					echo'Şifre Güncellenmiştir.';
				}
				?>
				<br/>
				<form  action="" method="POST">
					Yeni Şifre Girin :	<input type="password" name="sifre" />
					<input type="submit" value="Şifreyi Yenile" name="SifreYenile" />
				</form>
				<?php
			}else {
				header("Location:/$domainklasor/");
			}
		}else {
		?>
	<form action="" method="POST">
		Eposta Adresiniz : <input type="text" name="eposta" />
		<br/>
		<br/>
		<input type="submit" value="Yeni Şifre Gönder" name="ara" />
	</form>
	<?php } ?>
</div></center>

send.php

<?php

/////////////////DIKKAT-DIKKAT/////////////////////////////
//ALTTAKi BOLUME MAiL ADRESiNiZ VE MAiL SiFRENiZi YAZINIZ//
///////////////////////////////////////////////////////////

$mail_adresiniz	= "mailadi";
$mail_sifreniz	= "mailsifre";
$gidecek_adres=$_POST['mail'];
$domain_adresi	= "domainadı";	//www olmadan yazınız

///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////


require("include/class.php");

$gelen_ad=$_POST['ad_soyad']; // değişkenlerimizi aldık
$gelen_mail=$_POST['mail']; // değişkenlerimizi aldık
$gelen_mesaj=$_POST['mesaj']; // değişkenlerimizi aldık

if(empty($gelen_ad)  and empty($gelen_mail) and empty($gelen_mesaj)) {
    echo "Lütfen Boş Geçmeyiniz.";
} else { 
  $mail = new PHPMail();
  $mail->Host       = "smtp.".$domain_adresi;
  $mail->SMTPAuth   = true;
  $mail->Username   = $mail_adresiniz;
  $mail->Password   = $mail_sifreniz;
  $mail->IsSMTP();
  $mail->From       = $mail_adresiniz;
  $mail->FromName   = $mail_adresiniz;
  $mail->AddAddress($gidecek_adres);
  $mail->CharSet = 'UTF-8';
  $mail->Subject = $gelen_mail; // gönderenin mail adresi 
  $mail->Body       = $gelen_ad."\n".$gelen_mesaj;
  $mail->AltBody    = "";

  if($mail->Send()) {
      //mail gonderildilirse  
      $mesaj="Mail Gönderildi: 3 Saniye Sonra Otomatik Yönlendiriliceksiniz..";
      echo '<script language="javascript">';
      echo "alert('$mesaj')";
      echo '</script>';
      header('Refresh: 3; url=index.php'); 
      //  header ana sayfaya yönlendirme kodu 
  } else {
      $mesajhata="Mail gönderilirken bir hata olustu: 3 Saniye Sonra Otomatik Yönlendiriliceksiniz..";
      echo '<script language="javascript">';
      echo "alert('$mesajhata')". $mail->ErrorInfo;
      echo '</script>';
      header('Refresh: 3; url=index.php');
      //echo 'Mail gönderilirken bir hata olustu: ' . $mail->ErrorInfo;
  }
}

?>

Merhaba Arkadaşlar şifremi unuttum bölümü yapmak istedim mail göndererek fakat e-posta kontrol ettirip şifreyi sıfırlama yöntemini yaptım fakat E-posta gönderirken kodlar çok açıkta kalmaktadır kod düzenlenerek başkasının şifresi de değiştirilebilir hale geldi bu konu hakkında yardımlarınızı rica ederim. Aşağıdaki Örnek Görüntüdür.

Gönderdiğin resimden fazla birşey anlamadım. Kullanıcı kendisine gelen E-Posta'nın içeriğini kendisi mi belirliyor? Ya da şöyle sorayım, sorun gönderirken mi yaşanıyor yoksa gönderildikten sonra sıfırlama bağlantısı üzerinden değişiklikler yapılarak mı?

E-posta arayıp buluyor ve yeni şifre gönderiyor fakat eposta gönderdiğim link e-posta yolu değiştirilerek başka kullanıcının şifresinide yenileme imkanı veriyor yani yeni şifre talep et dediğin şifreyi send yapacak dosyanın gidicek e-posta yolunu değiştirmektekdir.

üstte görmüş olduğunuz alan form olarak ekledim bunun burda görüntülenmeden mail olarak gönderilmesini istiyorum şuanki haliyle başka bir kullanıcı diğer kullanıcıların e-posta adresine uşalarak istediği şifreyi değiştirebilecek halde "Şifreyi E-posta Gönder Butonu yerine bilgiler görüntülenmeden send.php Post ve farklı bir method  varsa yardımcı olabilirseniz sevinirim Teşekkürler.

Anladığıma göre şifre sıfırlama işlemi yaparken iki aşama kullanıyorsunuz. Kullanıcı ilk resimdeki alana şifresini unuttuğu mail adresini yazıyor. İkinci aşamada ise kullanıcı kendine gelecek maili düzenliyor. Bu yöntem biraz karmaşık daha da basitleştirebiliriz.

Örneğin şuan kullanılan şifre sıfırlama yöntemlerinde kullanıcı sistemde kayıtlı olan mail adresini yazıp gönderir. Eğer yazdığı mail adresi sistemde kayıtlı ise bu mail adresine şifre sıfırlama bağlantısı gönderilir.

Olayı tamamen yanlış anlamış olabilirim. Eğer yanlış anladıysam daha açık bir dille yazarsanız daha sağlıklı cevaplar verebilirim.

$isim = "Sayın:".$row["isim"]."";
			$mail = "Şifrenizi Yenilemek İçin Lütfen Bağlantıyı Tıklayınız ".$domainalma."index.php?yenile=".$row["hash"]."";
				
				echo"<form method=\"POST\" action=\"send.php\">". "			
					<input type=\"text\" name=\"mail\" value=\"$eposta\" id=\"mail\">". "			
					<input type=\"text\" name=\"ad_soyad\" value=\"$isim\" id=\"ad_soyad\">". "			
					<textarea rows=\"21\" name=\"mesaj\" id=\"mesaj\">$mail</textarea>". "			
					<input type=\"submit\" value=\"Şifreyi E-Postama Gönder\">". "
					</form>"."";

İndex.php de yer alan form budur hocam şimdi bu direk send.php iletiyor mesajı yani dolaylı bir şekilde ben epostayi zaten kontrol ettiriyorum varmi yok mu diye varsa link oluşturup benim karşıma cikariyor ve bu yukarıda yazmıs olduğum formun içine yaziyo . Fakat ben bu formun icine yazilmadan direk epostaya gönderilmesini istiyorum  yukarıda formda başka bir üye başka bir üyenin sifresini bile değitire bilecek halde kontrol yapildiktan sonra şifre yenileme direk maile atilsin ve gönderildi mesaji iletilsin istiyorum smtp mail olarak yapamadim bununla ilgili yardiminzi rica ederim

Sorun çözülmüştür. Teşekkürler Hocam

Cevap Yaz

Cevap yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git