الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

لماذا ترسل ال Mail() مرتين ؟!

بدأه موظف في 31 مايو 2008 · 4 رد · 616 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله وبركاته،،،

أريد عمل فورم يقوم بإرسال كلمة السر للمستخدم في حال نسيها على إيميله، الأمر سار بشكل جيد كما أريده عدا مسألة واحدة، أن ال php mail() function ترسل الإيميل مرتين !

هل من حل لهذا الأمر كي أرسل إيميل واحد فقط؟.

هذا هو السكربت الذي أستخدمه:

  <?php
$to = "user@hotmail.com"; 
$subject = "إسترجاع كلمة السر"; 
$email = $_POST['email']; 
$message = 'عزيزي المستخدم، كلمة السر لك هي: '; 
$pass = $row_getPassword['pwd'];
$message = $message . $pass;
$headers = "From: مدير الموقع";
$sent=mail($to, $subject, $message, $headers);
if( $_POST && $sent ){
echo'تم إرسال كلمة السر';
}
php if ( $_POST && !$sent ){ echo'عفواً...حصل خلل ما..حاول مرة أخرى !';}
?></div>

شكراً للجميع

تم تعديل هذه المشاركة بواسطة موظف في 31 مايو 2008 في 21:45

#2

ممكن الكود كامل ومعاه ال Html

---

توقعى ان فى جزء من الصفحة دى Html و انت بتعرض فية ال Form بتاعه الارسال و هنا يتم تنفيذ الكود مرتين مرة عند فتح الصفحة ومرة عند Submit

#3

شكراً لك أخي "ASDen" على ردك. ربما ما تظنه صحيح دالة ال mail() تنفذ مرتين مرة عند تحميل الصفحة لسبب ما و مرة في السكربت المقصود لعملها، حاولت مراجعة الكود علني أجد مكان التنفيذ الإضافي لكني لم أجد شيء حسب ظني، عموماً هذا هو الكود كاملاً:

<?php require_once('Connections/getRealestate.php'); ?>
<?php
$colname_getPassword = "-1";
if (isset($_POST['email'])) {
  $colname_getPassword = (get_magic_quotes_gpc()) ? $_POST['email'] : addslashes($_POST['email']);
}
mysql_select_db($database_getRealestate, $getRealestate);
$query_getPassword = sprintf("SELECT * FROM users WHERE email = '%s'", $colname_getPassword);
$getPassword = mysql_query($query_getPassword, $getRealestate) or die(mysql_error());
$row_getPassword = mysql_fetch_assoc($getPassword);
$totalRows_getPassword = mysql_num_rows($getPassword);

@mysql_query("SET NAMES 'cp1256' COLLATE 'cp1256_general_ci' ");

@mysql_query("SET character_set_server='cp1256'; ");

@mysql_query("SET character_set_client='cp1256'; ");

@mysql_query("SET character_set_results='cp1256'; ");

@mysql_query("SET character_set_connection='cp1256'; ");

@mysql_query("SET character_set_database='cp1256'; ");

@mysql_query("SET collation_connection='cp1256_general_ci'; ");

@mysql_query("SET collation_database='cp1256_general_ci'; ");

@mysql_query("SET collation_server='cp1256_general_ci'; ");
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256" />
<title>إرسال كلمة السر</title>
<link href="admin.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
#bgLayer {
	position:absolute;
	left:285px;
	top:65px;
	width:461px;
	height:459px;
	z-index:1;
	background-image: url(newuserBg.jpg);
}
#lostPassLayer {
	position:absolute;
	left:28px;
	top:233px;
	width:420px;
	height:170px;
	z-index:2;
}
#lostpass {
	position:absolute;
	left:77px;
	top:116px;
	width:174px;
	height:79px;
	z-index:2;
}
#sentLayer {
	position:absolute;
	left:71px;
	top:158px;
	width:207px;
	height:64px;
	z-index:3;
}
#faildLayer {
	position:absolute;
	left:69px;
	top:179px;
	width:204px;
	height:48px;
	z-index:3;
}
-->
</style>
<script type="text/JavaScript">
<!--
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
	d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers.document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function P7_getWD(tDim){ //v2.6 by PVII
 var sh=0,sw=0,rt=0;if(window.innerWidth){sh=window.innerHeight;sw=window.innerWidth;
 }else if(document.body){sh=document.body.clientHeight;sw=document.body.clientWidth;
 if(document.body.offsetHeight==sh&&document.documentElement&&document.documentElement.clientHeight){
  sh=document.documentElement.clientHeight;}
 if(document.body.offsetWidth==sw&&document.documentElement&&document.documentElement.clientWidth) {
 sw=document.documentElement.clientWidth;}}rt=(tDim=="width")?sw:sh;return rt;
}

function P7_getLDims(el) { //v2.6 by PVII
 var x,ll=0,tl=0,hh=0,ww=0,wx,g,gg;
 if((g=MM_findObj(el))!=null){gg=(document.layers)?g:g.style;ll=parseInt(gg.left);
 tt=parseInt(gg.top);if(isNaN(ll)){if(g.currentStyle){ll=parseInt(g.currentStyle.left);
 }else if(document.defaultView&&document.defaultView.getComputedStyle){
 ll=parseInt(document.defaultView.getComputedStyle(g,"").getPropertyValue("left"));
 }if(isNaN(ll)){ll=0;}}if(isNaN(tt)){if(g.currentStyle){tt=parseInt(g.currentStyle.top);
 }else if(document.defaultView&&document.defaultView.getComputedStyle){
 tt=parseInt(document.defaultView.getComputedStyle(g,"").getPropertyValue("top"));}if(isNaN(tt)){tt=0;}}
 if(document.all||document.getElementById){ww=parseInt(g.offsetWidth);hh=parseInt(g.offsetHeight);
 if(!ww){ww=parseInt(g.style.pixelWidth);if(!ww){ww=parseInt(g.style.width);}}if(!hh){
 hh=parseInt(g.style.pixelHeight);}if(g.hasChildNodes&&g.childNodes){for(x=0;x<g.childNodes.length;x++){
 wx=parseInt(g.childNodes[x].offsetWidth);if(wx>ww){ww=wx;}}}}else if(document.layers){
 ww=parseInt(g.clip.width);hh=parseInt(g.clip.height);}}var aR=[ll,tt,hh,ww];return aR;
}

function P7_alignRR() { //v2.6 by PVII
 var i;if(!document.p7alignRR) {return;}if(document.layers){
 if(innerWidth!=document.p7RRiw || innerHeight!=document.p7RRih){location.reload();}
 }else{document.p7RR=1;for(i=0;i<p7aRR.length;i++){eval(p7aRR);}document.p7RR=0;}
}

function P7_alignWD2() { //v2.6 by PVII
 var g,gg,lp=0,tp=0,aL,lh,lw,ww,wh,pa='px',args=P7_alignWD2.arguments;if(document.layers||window.opera){pa='';}
 for(var i=0;i<args.length;i+=4){if((g=MM_findObj(args))!=null){gg=(document.layers)?g:g.style;
 mm=parseInt(args[i+1]);mr=parseInt(args[i+2]);ml=parseInt(args[i+3]);ww=parseInt(P7_getWD('width'));
 wh=parseInt(P7_getWD('height'));aL=P7_getLDims(args);lh=aL[2];lw=aL[3];tp=aL[1];lp=aL[0];
 if(mm==1){lp=mr;}if(mm==2){lp=parseInt((ww-lw-mr)/2);if(lp<0){lp=0;}}if(mm==3){lp=ww-lw-mr;if(lp<ml){lp=ml;}}
 if(mm==4){tp=parseInt((wh-lh-mr)/2);if(tp<0){tp=0;}}if(mm==5){tp=parseInt((wh-lh)/2);lp=parseInt((ww-lw)/2);
 if((lp-mr)<=0){lp=mr;}if((tp-ml)<=0){tp=ml;}}if(mm==6){tp=wh-lh-mr;}gg.top=tp+pa;gg.left=lp+pa;
 if(!document.p7alignRR){p7aRR=new Array();document.p7alignRR=true;document.p7RR=0;
 if(document.layers){document.p7RRiw=innerWidth;document.p7RRih=innerHeight;}onresize=P7_alignRR
;}
 if(document.p7RR==0){p7aRR[p7aRR.length]="P7_alignWD2('"+args+"',"+mm+","+mr+","+ml+")";}}}
}
//-->
</script>
</head>

<body onload="P7_alignWD2('bgLayer',5,0,0)">
<div id="bgLayer">
  <h1 align="right">صفحة الدخول                          </h1>
  <p align="right"> </p>

<p align="right"> </p>

  <p align="right"> </p>
  <div id="lostpass">
<p> </p>
	<p> </p>
	<p>أدخل بريدك الذي سجلت فيه: </p>
	<form id="lostPassform" name="lostPassform" method="post" action="">
	  <input name="email" type="text" id="email" />
	  <br />
	  <input name="sendEmail" type="submit" id="sendEmail" value="أرسل كلمة السر" />
  </form>
	<p> </p>
  <?php
$to = "user@hotmail.com"; 
$subject = "إسترجاع كلمة السر"; 
$email = $_POST['email']; 
$message = 'عزيزي المستخدم، كلمة السر لك هي: '; 
$pass = $row_getPassword['pwd'];
$message = $message . $pass;
$headers = "From: مدير الموقع";
$sent=mail($to, $subject, $message, $headers);
if( $_POST && $sent ){
echo'تم إرسال كلمة السر';
}
if ( $_POST && !$sent ){ echo'عفواً...حصل خلل ما..حاول مرة أخرى !';}
?></div>
</div>

<p> </p>
</body>
</html>

<?php
mysql_free_result($getPassword);
?>
#4
$to = "user@hotmail.com";
$subject = "إسترجاع كلمة السر";
$email = $_POST['email'];
$message = 'عزيزي المستخدم، كلمة السر لك هي: ';
$pass = $row_getPassword['pwd'];
$message = $message . $pass;
$headers = "From: مدير الموقع";

قبل هذا الجزء لابد أن تتأكد من أن

$_POST['email']

موجوده (ب isset ) قبل الدخول فى الجزئية السابقة

#5

شكراً لك أخي الكريم "ASDen"، حلت المشكلة بفضل الله تعالى.

كنت أعتقد أن هناك مشكلة بدالة ال mail() ذاتها، لكن جملتك عن أن الكود نفسه من المحتمل أن يكون يتم تنفيذه مرتين، مرة عند تحميل الصفحة و مرة عند الإرسال جعلتني أراجع بعض الأمور، و انتبهت حينها أن الإيميلين المرسلين أحدهما يكون تم إرسال كلمة السر فيه و الآخر لا ترسل ، أي أن الكود فعلاً يتم تنفيذه مرة واحدة على الأقل قبل الضغط على إرسال، عموماً قمت بتغليف كامل الكود بشرط if التالي فحلت المشكلة:

if($_POST) {



// الكود الأساسي

}

الآن كل شيء يعمل كما يجب تماماً.

شكراً لك مرة أخرى على مساعدتك أخي "ASDen".

مواضيع مشابهة