PDA

View Full Version : مبتدی: مشکل ارسال نکردن ایمیل به کاربر



mosavi7
چهارشنبه 16 اسفند 1391, 13:32 عصر
با سلام و عرض ادب
بنده در حال تکمیل یک سیستم ارسال تیکت هستم .
قرار بر این هست وقتی بنده جواب تیکت رو میدم یک ایمیل حاوی سوال و جواب برای کاربر ارسال بشه ...
اما بنده اومدم این کار رو انجام دادم اما هیچ ایمیلی برای کاربر ارسال نمیشه , ممنون میشم بنده رو راهنمایی کنید تا مشکل رو رفع کنم :



elseif(isset($_GET["answer"])) {
isUser();
if(isset($_POST['answer'])){
if(answer($_POST['answer'] , 1 , $_GET["answer"] )){


$to = $_POST['email'];
$subject = 'عنوان سایت';
$messages = "
نام : $_POST[uname]
موبایل : $_POST[phone]
کشور : $_POST[country]
پیام : $_POST[message]
پاسخ : $_POST[answer]
";
$headers = 'From: info@youmail.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $messages, $headers);
header("location:all.php?id=all");
}
else
$message = "مشکلی به وجود آمده است مجددا تلاش کنید" ;
}

$Posts = editTable('question',$_GET['answer']);
$inPosts = mysql_fetch_row($Posts);
$idpost = $inPosts[0];
$uname = $inPosts[1];
$email = $inPosts[2];
$phone = $inPosts[3];
$section = $inPosts[4];
$country = $inPosts[5];
$message_user = $inPosts[6];
$date = date("Y/m/d" , $inPosts[7]);
$answer = $inPosts[10];

$tabCat = editTable('categories',$section);
$inCat = mysql_fetch_row($tabCat);
$name_cat = $inCat[2];


echo <<<_END
<h1>ویرایش نوشته</h1><br />

<center><font color="red" size="2">$message</font></center>
<form method="POST" action="" id="registerForm" enctype="multipart/form-data">
<div id="caption">نام کامل </div>
<div id="field"><input name="uname" type="text" value="$uname" disabled="disabled"/> </div>

<div id="hspace"></div>
<div id="caption">ایمیل </div>
<div id="field"><input name="email" type="text" value="$email" disabled="disabled"/> </div>

<div id="hspace"></div>
<div id="caption">موبایل </div>
<div id="field"><input name="phone" type="text" value="$phone" disabled="disabled"/> </div>

<div id="hspace"></div>
<div id="caption"> انتخاب دسته </div>
<div id="field"><input name="cat" type="text" value="$name_cat" disabled="disabled"/></div>

<div id="hspace"></div>
<div id="caption"> کشور </div>
<div id="field"><input name="country" type="text" value="$country" disabled="disabled"/></div>

<div id="hspace"></div>
<div id="caption"> سوال </div>
<div id="field"><textarea class="txt_area" name="message" style=" font:bold 15px arial ; width: 500px; height: 200px" disabled="disabled">$message_user</textarea></div>


<div id="hspace"></div>
<div id="caption"> پاسخ </div>
_END;
if(!$answer)
{
echo ' <div id="field"><textarea class="txt_area" name="answer" style="width: 500px; height: 300px" ></textarea></div> ';
}
else
{
echo "<div id='field'><textarea class='txt_area' name='answer' style='width: 500px; height: 300px' disabled='disabled'>$answer</textarea></div> ";
}

echo <<<_END

<div id="hspace"></div>
<div id="caption">&nbsp;</div>
<div id="field"><input type="submit" name="submit" value=" به رروز رسانی" class="button" /></div>


</form>
_END;

}

mosavi7
شنبه 19 اسفند 1391, 17:21 عصر
عذر میخوام که تاپیک رو بالا میارم , دوستان اگر بنده رو راهنمایی کنند ممنون میشم ...

plague
یک شنبه 20 اسفند 1391, 00:58 صبح
خب برادر یکم بیشتر توضیح بده ارروری که میبینی رو بگو یا حداقل بگو دقیقا چه اتفاقی میفته وقتی ارسال میکنی (منظورم اینه که صفحه چه خروجی میده بهت یا به کجا ریدایرکت میشه )
ما که وقت نداریم این کد رو خودمون آزمایش کنیم

MMSHFE
یک شنبه 20 اسفند 1391, 01:02 صبح
فقط بعنوان یادآوری: تابع mail روی localhost کار نمیکنه.

mosavi7
یک شنبه 20 اسفند 1391, 10:50 صبح
خب برادر یکم بیشتر توضیح بده ارروری که میبینی رو بگو یا حداقل بگو دقیقا چه اتفاقی میفته وقتی ارسال میکنی (منظورم اینه که صفحه چه خروجی میده بهت یا به کجا ریدایرکت میشه )
ما که وقت نداریم این کد رو خودمون آزمایش کنیم
سلام و عرض ادب
این اسکریپت پاسخ رو به دیتابیس ارسال میکنه , و بنده میخوام اگه همه پاسخ فیلد پر شده باشه یک ایمیل هم به یوزر مورد نظر ارسال کنه .
مشکل این هست که الان بنده حتی وقتی echo $to رو هم تو اسکریپت مینویسم هیچ خروجی بهم نمیده , نمی دونم واقعا خودمم گیج شدم :(



فقط بعنوان یادآوری: تابع mail روی localhost کار نمیکنه.

رو هاست دارم اسکریپت رو تست میگیرم ...

MMSHFE
یک شنبه 20 اسفند 1391, 11:46 صبح
اون تابع answer که صدا زدین چیکار میکنه؟ کدش چیه؟ مقادیر POST_$ و GET_$ رو با دستورات زیر چاپ کنید ببینیم چی به چیه؟


echo 'Get:' . PHP_EOL . '<pre>' . print_r($_GET, true) . '</pre>' . PHP_EOL;
echo 'Post:' . PHP_EOL . '<pre>' . print_r($_POST, true) . '</pre>' . PHP_EOL;

mosavi7
یک شنبه 20 اسفند 1391, 12:50 عصر
اون تابع answer که صدا زدین چیکار میکنه؟ کدش چیه؟ مقادیر POST_$ و GET_$ رو با دستورات زیر چاپ کنید ببینیم چی به چیه؟


echo 'Get:' . PHP_EOL . '<pre>' . print_r($_GET, true) . '</pre>' . PHP_EOL;
echo 'Post:' . PHP_EOL . '<pre>' . print_r($_POST, true) . '</pre>' . PHP_EOL;


سلام و خسته نباشید , ممنون از اینکه پاسخ بنده رو دادید ...
وقتی دستورات شما رو داخل فایل گذاشتم ای خروجی رو چاپ کرد :


Get: Array ( [answer] => 128 ) Post: Array ( [answer] => 4444 [submit] => به رروز رسانی )


این فانکشن answer هست :


function answer($answer ,$public , $id )
{
$date = time();
return mysql_query("UPDATE `mosaci_ticket`.`question` SET `answer` = '$answer' , `public` = '$public' WHERE `question`.`id` =$id;");

}

من فقط میخوام وقتی بنده جواب تیکت کسی رو میدم برای شخص مورد نظر ایمیل ارسال بشه .
بازم شرمنده ام ممکن که اسکریپتم خیلی مبتدیانه و گیج کننده هست .

MMSHFE
یک شنبه 20 اسفند 1391, 15:22 عصر
خوب شما نباید اینطوری بنویسید. تابع answer رو اینطوری تغییر بدین:


function answer($answer, $public, $id) {
$date = time();
$answer = mysql_real_escape_string($answer);
$public = mysql_real_escape_string($public);
$id = mysql_real_escape_string($id);
mysql_query("UPDATE `mosaci_ticket`.`question` SET `answer` = '{$answer}' , `public` = '{$public}' WHERE `question`.`id` ={$id};");
if(mysql_affected_rows() > 0) {
return true;
}
return false;
}

mosavi7
یک شنبه 20 اسفند 1391, 17:11 عصر
خوب شما نباید اینطوری بنویسید. تابع answer رو اینطوری تغییر بدین:


function answer($answer, $public, $id) {
$date = time();
$answer = mysql_real_escape_string($answer);
$public = mysql_real_escape_string($public);
$id = mysql_real_escape_string($id);
mysql_query("UPDATE `mosaci_ticket`.`question` SET `answer` = '{$answer}' , `public` = '{$public}' WHERE `question`.`id` ={$id};");
if(mysql_affected_rows() > 0) {
return true;
}
return false;
}


با تشکر از پاسخگویی سریع شما , استاد عزیز
به نظرتون تابع mysql_real_escape_string رو تو تک تک فانکشن ها به کار ببریم و یا اینکه به صورت زیر در ابتدای فایل کانفیگ این فانکشن رو قرار بدیم ؟؟ :


function safe( &$value, $key ) { $value = trim( $value ); if( strpos( $key, 'text' ) !== false ) { $value = strip_tags( $value ); $value = htmlentities( $value, ENT_COMPAT, 'UTF-8' ); } $value = stripslashes( $value ); $value = mysql_real_escape_string( $value );}array_walk_recursive( $_POST, 'safe' );array_walk_recursive( $_GET, 'safe' );

با توجه به تاپیک :
http://barnamenevis.org/showthread.php?387144-%D8%A7%D9%85%D9%86%DB%8C%D8%AA-%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-sql-injection

MMSHFE
یک شنبه 20 اسفند 1391, 22:44 عصر
بستگی به نیازتون داره. گاهی اوقات لازم نیست که همه ورودیها برای ارسال به MySQL فیلتر بشن. مثلاً همه اطلاعاتی که ازطریق فرم ارسال میشن رو ممکنه نخوایم توی دیتابیس ذخیره کنیم. من خودم شخصاً هرکدوم رو که لازم دارم، جداگانه به تابع mysql_real_escape_string میفرستم.