درس ششم- فرستادن رایانامه و استفاده از توابع زمان و تاریخ
مقدمه
در
مجموعه درسهای گذشته با مفاهیم لازم برای ساخت یک تارنمای ساده آشنا
شدهایم و همچنین تکنیکهای پیشرفتهای را آموختیم. اما هنوز مفاهیم بیشتری
برای پوشش دادن وجود دارند که در طول دوره به آنها خواهیم پرداخت. در این
درس به یکی دیگر از این تکنیکها یعنی نحوه ارسال رایانامه میپردازیم.
فرستادن رایانامه
حتما تا به امروز کلمه «تماس با ما» را در تارنماهای بسیاری مشاهده
کردهاید. این برگه به شما اجازه میدهد که به مدیر آن تارنما یک پیغام از
طریق رایانامه بفرستید. فرستادن رایانامه در پیاچپی بسیار ساده است و
تنها با دانستن یک تابع و پارامترهایش این مهم اجرا خواهد شد.
تابع فرستادن رایانامه
mail (to, subject, body, [header] ) ;
mail (، بدنه، موضوع، به[سرایند]);
نکته: پارامترها میتوانند بصورت ایستا (متن) و یا بصورت یک متغیر باشند.
mail ($to, $subject, $body, [$header] ) ;
به یا to
به معنی گیرنده رایانامه است. در صورتی که از این تکنیک برای دریافت
رایانامههای ارسالی کاربران خود استفاده میکنید، باید نشانی رایانامهای
که میخواهید پیامهای کاربرانتان را دریافت کند در این قسمت قرار دهید.
موضوع یا subject: همین طور که از نام پیداست به معنی موضوع پیام ارسالی است.
بدنه یا :body متن پیام در این قسمت گذاشته و ارسال میشود.
سرایند یا :header در زمان ارسال هر رایانامهای، انتخابهایی و یا گزینههای دیگری مانند FROM، (Carbon Copy) CC و یا (Blind Carbon Copy) BCC وجود دارند که همه آنها در قسمت سرایند قرار میگیرند. این قسمت یک پارامتر انتخابی اشت و لزوما برای ارسال رایانامه نیازی به آن نیست، اما بهتر است که FROM در رایانامه گنجانده شود. در مورد باقی گزینهها هم، خب، انتخاب با شماست.
ساخت برگه تماس با ما
میخواهیم برگهای با عنوان تماس با ما و به شکل زیر اضافه کنیم:
فایلی با نام contactus.phpدر کنار دیگر فایلهای خود بسازید و کدهای زیر را در آن قرار دهید:
<?php
$page_title = ' تماس با ما ';
include('includes/header.html');
?>
<h1> تماس با ما </h1>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$errors = array();
if(!empty($_POST['name'])){
$name = $_POST['name']; }
else{
$name = NULL;
$errors[] = 'لطفن نام خود را وارد کنید '; }
if(!empty($_POST['email'])){
$email = $_POST['email']; }
else{
$email = NULL ;
$errors[] = ' لطفا رایانامه خود را وارد کنید '; }
if(!empty($_POST['subject'])){
$subject = $_POST['subject']; }
else{
$subject = NULL ;
$errors[] = ' لطفا موضوع خود را وارد کنید '; }
if(strlen(trim($_POST['message']))){
$message = $_POST['message']; }
else{
$message = NULL;
$errors[] = ' لطفا متن خود را وارد کنید ' ; }
if( $name && $email && $subject && $message){
$body = "نام: $name ";
$body .= "پیام: $message ";
$body = wordwrap($body, 70);
$header = ' توسط ' .$email ;
// فرستادن رایانامه
if(mail('tehranyp@yahoo.com', $subject, $body, $header)){
echo ' از تماس شما سپاسگزاریم، در نخستین فرصت با شما تماس میگیریم ';
$_POST = array(); }
else{
echo ' به دلیل مشکل فنی پیش آمده رایانامه شما فرستاده نشد ' ; } }
else{
echo '<div class="error">:خطاهای زیر صورت گرفته<br />';
if(is_array($errors)){
foreach($errors as $val){
print $val . ' - ' . '<br />' ; } }
echo '</div><span class="again"> دوباره امتحان کنید</span>'; } }
?>
<!--ساخت فرم-->
<form action="contactus.php" method="post">
<fieldset>
<legend align="right">لطفا همه موارد فرم زیر را پر کنید</legend>
<label> نام </label>
<input type="text" name="name" value="<?php if(isset($_POST['name'])){ echo $_POST['name'];}?>" />
<label> رایانامه </label>
<input type="text" name="email" value="<?php if(isset($_POST['email'])){ echo $_POST['email'];}?>"/>
<label> موضوع </label>
<input type="text" name="subject" value="<?php if(isset($_POST['subject'])){ echo $_POST['subject'];}?>" />
<label> متن </label>
<textarea name="message" rows="50" cols="200"> </textarea>
</fieldset>
<input type="hidden" name="start" value="<?php echo time(); ?>" />
<input type="submit" name="submit" value="ارسال" class="submit"/>
</form>
<?php include ('includes/footer.html'); ?>
در شرح این مجموعه کدها فقط به سراغ آنهایی که نا آشنا هستند میرویم.
if($_SERVER['REQUEST_METHOD'] == 'POST')
این شرطی درست همان کار کدهایی که قبلا برای بررسی ارسال فرم نوشتیم میکند، در درسهای قبلی ما این بخش را بصورت زیر نوشته بودیم که در اینجا با نوع دیگری هم آشنا شدیم:
if (isset($_POST['submit']))
در هر دوی این شرطیها بررسی میشود که آیا فرم ارسال شده است یا نه؟ به عبارت دیگر آیا دکمه ارسال فشرده شده است یا خیر؟
بخش بعدی را بارها دیدهایم; آگاهی از پر بودن کادرها. اما یک نکته تازه در این بخش است و آن هم بررسی یک کادر متن است، دقت کنید.
if(strlen(trim($_POST['message']))){
$message = $_POST['message'];
}
else{
$message = NULL;
$errors[] = ' لطفن متن خود را وارد کنید ' ;
}
کادر متنی را از تابع trim()میگذرانیم تا فاصلهها را از میان بردارد، بعدبا تابع strlen()طول متن ارسالی را بررسی میکنیم. در صورت خالی بودن کادر این تابع مقدار 0 باز میگرداند، این یعنی کادر خالی است، که مقدار NULL را در متغییر متن و پیام را در متغییر خطا قرار میدهیم.
if( $name && $email && $subject && $message){
$body = "نام: $name ";
$body .= "پیام: $message ";
$body = wordwrap($body, 70);
$header = ' توسط ' .$email ;
اگر متغییرها خالی نباشند، یعنی اگر کادرها پر شده باشند، نام نویسنده و پیام او را در یک متغییری با نام $body (حتما متوجه شدید که چرا این نام؟) قرار میدهیم. در خط سوم این بخش از یک تابع جدید استفاده شده است.
$body = wordwrap ($body, 70);
گفته میشود که بهتر است در هر خط رایانامه بیشتر از ۷۰ کاراکتر قرار نگیرد. خوب این تابع همین کار را انجام میدهد. یعنی متن پیام را در سطرهای ۷۰ کاراکتری قرار میدهد.
// فرستادن رایانامه
if(mail('myemail@yahoo.com', $subject, $body, $header)){
echo ' از تماس شما سپاسگزاریم، در نخستین فرصت با شما تماس میگیریم ';
$_POST = array(); }
else{
echo ' به دلیل مشکل فنی پیش آمده رایانامه شما فرستاده نشد ' ; }
این شرطی برای این نوشته شده است که بررسی کند آیا رایانامه (در اصل نحوه عملکرد تابع ارسال رایانامه) درست فرستاده شده است یا نه؟ این یک تکنیک خوب است (استفاده از شرطی به این صورت) برای اینکه در صورت عدم موفقیت کد شما بجای خطا یک پیغام مناسب نمایش داده میشود. باقی کدها هم که چاپ خطاها، در صورت بروز، و نمایش فرم است.
نکته مهم: اگر این بخش در حالت انتشار (سرور) باشد مشکلی نیست، اما، در صورتی که از رایانه شخصی خود و بطور محلی استفاده میکنید باید ابتدا شرایط لازم برای ارسال رایانامه را فراهم کنید. البته این کار فقط برای آزمایش است، ولی به هر حال میتوانید برای اطلاعات بیشتر به این مطلب مراجعه کنید.
برای این کار باید از XAMPP استفاده کنید چرا که یک قابلیت برای ارسال رایانامه در آن وجود دارد.
تنظیم زمان منطقه جغرافیایی (منطقه جغرافیایی دارای ساعت یا نصف النهار معینی)
همانند SQL، پیاچپی هم توابعی برای استفاده از
زمان و تاریخ دارد که البته میتوان قبل از استفاده از آنها زمان منطقه
جغرافیایی را تعیین کرد. برای تعیین زمان پیش فرض منطقه جغرافیایی (Default Time Zone) باید از تابع زیر بهره گرفت:
date_default_timezone('Asia/Tehran');
این تابع زمان پیش فرض سیستم شما را به تهران تغییر میدهد، در صورت عدم استفاده این تابع زمان پیش فرض، زمان سیستم سرور و یا محل سرور است.
اجازه بدهید برای فهم بهتر چگونگی استفاده از این تابع و دیگر توابع زمان در پیاچپی به سراغ برگه تماس با ما رفته و از این توابع در آن برگه استفاده کنیم. این کار خیلی راحت و بسیار ساده برای پیاده سازی در سیستم در حال رشدمان است.
تغییرات فایل تماس با ما
ابتدا در بالای فایل کدهای یزر را قرار دهید:
include('includes/header.html');
date_default_timezone_set ('Asia/Tehran');
با این کد شما سیستم زمانی خود را مطابق ساعت تهران قرار میدهی.
قسمت بعدی اضافه کردن توابع زمانی برای ثبت زمان ارسال رایانامه است، به این طریق:
if(mail('myemail@yahoo.com', $subject, $body, $header)){
echo '<p> شما در ساعت ' . date('g:i '). 'رایانامه را فرستادید</p>';
echo '<p>' . date('l F j, Y') . ' :تاریخ ارسال</p>' ;
echo '<p> مدت زمان ارسال شما از زمان شروع ' . (time() - $_POST['start']) . ' ثانیه شد </p>';
echo ' از تماس شما سپاسگزاریم، در نخستین فرصت با شما تماس میگیریم ';
$_POST = array(); } else{
echo ' به دلیل مشکل فنی پیش آمده رایانامه شما فرستاده نشد ' ; }
اگر به خروجی کار دقت کنید، متوجه چاپ شدن زمان و تاریخ ارسال بعلاوه مدت زمان صرف شده ارسال میشوید. البته این زمان و تاریخ به زبان و تقویم ایرانی نیست، این کاری است که باید انجام شود تا این قسمت هم درست شود. برای انجام این مهم میتوانید به این لینک مراجعه کنید. برای فهم چگونگی این کار نیاز به دانش بیشتر داریم، پس الان زیاد لازم نیست که در این بحث اصرار بورزیم.
تغییر در برگه سرایند header.html
نکته آخر این است که پیوند این برگه را هم باید در فهرست ناوبری سیستم
مطابق گذشته اضافه کنیم. بعد از اضافه کردن این پیوند در فایل سرایند٬
قسمت فهرست باید به شکل زیر باشد:
<div id="navigation">
<ul>
<li><a href="index.php"> خانه</a></li>
<li><a href="register.php"> ثبت نام </a></li>
<li><a href="view.php"> کاربران </a></li>
<li><a href="password.php"> بروزرسانی رمز </a></li>
<li><a href="contactus.php"> تماس با ما </a></li>
</ul>
</div>
لطفا فراموش نکنید که بخاطر عدم توانایی پیاچپی برای ارسال رایانامه ٬ این عمل با کمک یک اسامتیپی سرور مقدور است. البته راهاندازی این میل سرور محلی ممکن است با مشکلاتی برخورد کند که پیشنهاد میکنیم٬ ارسال رایانه را در حالت روی اینترنت امتحان کنید. اما اگر خواستید این کار را هم امتحان کنید٬ میتوانید از Test Mail Server نیز بهره ببرید.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.