بایگانی برچسب: s

آموزش PHP – جلسه دهم: پروژه ارسال ایمیل

در این جلسه از سری آموزش‌های پی‌اچ‌پی می‌خواهیم اولین پروژه کاربردی را با این زبان برنامه‌نویسی محبوب ایجاد کنیم. پروژه ما اسکریپتی برای ارسال ایمیل است. بدین صورت شما با نحوه ارسال ایمیل و توابع مربوط به آن در PHP نیز آشنا خواهید شد. در ادامه مطلب با ما همراه باشید.

اگر آموزش‌های پی‌اچ‌پی را تا اینجا دنبال کرده‌اید پس تمامی پیش‌نیازهای لازم برای شروع کار یک پروژه کاربردی را دارید. می‌خواهیم در این جلسه یک اسکریپت کاربردی برای ارسال ایمیل ایجاد کنیم و سعی می‌کنیم علاوه بر استفاده از مباحث قبلی، موارد جدیدی را هم به شما آموزش دهیم.

خب اگر یادتان باشد در جلسات اولیه گفتم که مهم‌ترین مرحله برای ایجاد یک پروژه، الگوریتم آن است. شاید بسیاری از افراد فکر کنند که یک پروژه ساده چه نیازی به الگوریتم دارد. خب شاید تا حدی گفته این افراد درست باشد زیرا بسیاری از پروژه‌های کوچک را بدون الگوریتم‌نویسی نیز می‌توان ایجاد کرد. اما اگر بخواهیم بعدا اسکریپت خود را ارتقا دهیم و امکانات جدیدی به آن اضافه کنیم یا اشکلاتش را رفع کنیم، در صورتی که از الگوریتم استفاده کرده باشیم کار ما بسیار آسان‌تر خواهد شد.

پس اولین کاری که برای ایجاد پروژه ارسال ایمیل انجام می‌دهیم ترسیم یک الگوریتم است. پیش از این‌که بخواهید الگوریتم را ایجاد کنید باید در نظر داشته باشید که اسکریپتی که قصد ایجادش را دارید قرار است چه کاری را انجام دهد؟ خب در اینجا ما می‌خواهیم سیستم ارسال ایمیل تحت وب ایجاد کنیم پس مهم‌ترین بخش‌هایی که پروژه ما باید داشته باشد به شرح زیر است:

  • یک فیلد برای وارد کردن ایمیل مقصد (آدرسی که ایمیل به آن ارسال خواهد شد)
  • یک فیلد برای وارد کردن نام ارسال کننده
  • یک فیلد برای وارد کردن موضوع ایمیل
  • یک فیلد برای نوشتن متن ایمیل
  • یک دکمه برای ارسال ایمیل
  • یک دکمه برای ریست کردن فرم
  • یک صفحه پی‌اچ‌پی که عملیات پردازش و ارسال ایمیل را انجام دهد

خب این‌ موارد مهم‌ترین بخش‌هایی هستند که ما باید ایجاد کنیم. ما باید دو فایل ایجاد کنیم که البته می‌توان کل پروژه را در یک فایل ایجاد کرد اما بهتر است هر بخش را در یک فایل جداگانه ایجاد کنیم. الگوریتم ساده‌ای که من برای این پروژه در نظر گرفته‌ام به این صورت است:

  1. کاربر اطلاعات خواسته شده را در فرم وارد می‌کند
  2. اطلاعات به صفحه بررسی و ارسال ایمیل ارسال می شوند
  3. در صفحه بررسی و ارسال ایمیل چک می‌کنیم که آیا کاربر تمامی فیلد‌ها را پر کرده یا خیر. اگر فیلدها به درستی پر شده بود به مرحله ۴ می‌رویم و اگر پر نشده بود کاربر را به مرحله ۱ انتقال می‌دهیم
  4. حال براساس اطلاعاتی که کاربر وارد کرده ایمیل موردنظر را با کمک PHP ارسال می کنیم.
  5. بررسی می‌کنیم که آیا ایمیل با موفقیت ارسال شده یا خیر. اگر با موفقیت ارسال شده بود، باید پیامی مبنی بر ارسال موفق ایمیل به کاربر نمایش داده شود در غیر این صورت پیام خطای مناسب به کاربر نمایش داده شود

همان‌طور که می‌بینید در ۵ مرحله به ساده‌ترین حالت ممکن الگوریتم پروژه ارسال ایمیل را ایجاد کردیم. البته می‌توان از الگوریتم‌های دیگری هم استفاده کرد و شاید الگوریتم موردنظر شما بسیار بهتر از الگوریتمی باشد که در بالا نوشته‌ام. اما برای یکپارچه شدن آموزش براساس همین الگوریتم پروژه را ایجاد می‌کنیم.

ابتدا نرم‌افزار زمپ را اجرا کرده و در پوشه htdocs یک پوشه جدید به نام email می‌سازیم. سپس در این پوشه دو فایل به نام‌های index.php و send.php ایجاد می‌کنیم. فایل اول قرار است فرم ما را نشان دهد و فایل دوم پردازشگر و ارسال کننده ایمیل است.

در فایل index.php مطابق با نیاز خود که در بالا به آن اشاره کردم یک فرم با فیلد‌های موردنظر ایجاد می‌کنیم. برای زیباتر شدن نتیجه کار می‌توانید از دستورات اچ‌تی‌ام‌ال بهره ببرید ولی ما به منظور ساده‌تر بودن هر چه بیشتر کدها از حداقل کد ممکن استفاده کرده‌ایم.

<form method=”post” action=”send.php”>
email to : <input type=”text” name=”email”><br>
your name : <input type=”text” name”uname”><br=
subject : <input type=”text” name=”subject”><br>
message : <textarea name=”message” rows=”3″ cols=”4″></textarea>
<input type=”reset” value=”Reset”>
<input type=”submit” value=”Send Email”>
</form>

در فرم بالا ما به تعداد مورد نیاز فیلد ایجاد کرده‌ایم. فیلد ایمیل، نام کاربر، موضوع و متن پیام و نیز دو دکمه ریست و ثبت فرم.

حالا در فایل send.php باید کد زیر را قرا دهید:

<?php
$mailto = trim($_POST[’email’]);
$username = trim($_POST[‘uname’]);
$subject = trim($_POST[‘subject’]);
$message = trim($_POST]’message’]);

//merge name and message
$final_message = $username . ” : ” . $message;

if ($mailto != “” && $username !=”” && $subject !=”” && $message != “”)
{
//we know user filled the form
$email_send = mail ($mailto, $from_mail, $final_message);
//check for send email
if ($email_send){
echo “Your Email Has Been Send Successfully!”;
}else{
echo “sorry, there is problem in sending email, try again!”;
}
}else{
echo ‘You Must Fill All Fields! Go <a href=”index.php”>Back</a>’;
}
?>

حال می‌خواهیم کد بالا را تحلیل کنیم. در واقع تمامی نکات کد بالا را قبلا یاد گرفته‌اید اما در اینجا یک مرور کلی به کد داریم. ابتدا مقادیری که کاربر در فرم وارد کرده را درون چند متغیر قرار داده‌ایم. همچنین از تابع trim پی‌اچ‌پی استفاده کرده‌ایم تا فاصله‌های اضافه اول و آخر عبارات وارد شده در هر فیلد به صورت خودکار حذف شود. سپس با یک دستور if بررسی کرده‌ایم که در صورتی‌که تمامی فیلدها خالی نباشند و کاربر یک مقدار در آن‌ها وارد کرده باشد کد بخش صحیح بودن شرط اجرا شود و در غیر این صورت پیام خطایی به او نمایش داده می‌شود و یک لینک برای بازگشت به صفحه فرم در اختیار وی قرار می‌گیرد. اما در صورت صحیح بودن شرط با استفاده از تابع mail اقدام به ارسال ایمیل می‌کنیم و سپس مقدار بازگشتی این تابع را در متغیر email_send قرار می‌دهیم. 

در مورد مقادیر بازگشتی در جلسه آموزش تابع مفصلا توضیح دادیم. اما در اینجا بد نیست بدانید در صورتی که ارسال ایمیل موفق باشد این تابع مقدار true را برمی‌گرداند و اگر ایمیل به هر دلیلی ارسال نشود مقدار بازگشتی تابع false خواهد بود.

پس در نتیجه مقدار متغیر email_send یا true می‌شود یا false. سپس با یک دستور if مجددا بررسی کرده‌ایم که اگر ارسال ایمیل موفق بوده یعنی email_send = true بوده باشد، پیام موفق بودن ارسال ایمیل و در غیر این صورت، (یعنی email_send = false بوده) پیام خطای ارسال نشدن ایمیل به کاربر نمایش می‌یابد.

نکته: ما نام کاربر و متن پیام او را به هم ترکیب کرده‌ایم و در یک متغیر دیگر به نام final_message قرار داده‌ایم تا کسی که ایمیل را دریافت می‌کند بداند این ایمیل از طرف چه شخصی برایش ارسال شده است. 

تابع ارسال ایمیل را می‌توان با تنظیمات و سفارشی‌سازی‌های زیادی مورد استفاده قرار داد. اما برای شروع کار باید بدانید که این تابع به صورت پیش‌فرض و در ساده‌ترین حالت ممکن چند ورودی دریافت می‌کند. همان‌طور که در کد زیر می‌بینید در هنگام استفاده از این تابع باید حداقل سه ورودی داشته باشد. آرگومان اول آدرس ایمیلی است که قصد داریم به آن ایمیل ارسال کنیم. آرگومان دوم موضوع ایمیل و آرگومان سوم متن ایمیل است.

<?php
mail(’email@domain.com’, ‘subject’, ’email message’);
?>

همچنین به این نکته باید توجه کنید که برای استفاده از این تابع الزاما نیاز نیست مقدار بازگشتی آن را برابر یک متغیر قرار دهیم. در واقع در کد اسکریپت ارسال ایمیل، ما به این دلیل تابع را در برابر یک متغیر قرار دادیم تا از این طریق بتوانیم کنترل بیشتری بر روی عملیات داشته باشیم و پیام خطای مناسب را ایجاد کنیم.

اگر دقت کرده‌ باشید اسکریپت نوشته شده توسط ما دقیقا منطبق بر همان الگوریتم ساده اولیه‌ای است که نوشته بودیم. یعنی تک تک مراحل به‌خوبی در پی‌اچ‌پی پیاده‌سازی شده‌اند.

با کمی تغییرات و زیباتر کردن کد بالا می‌توانید یک اسکریپت کاربرپسند و کاربردی‌تر ایجاد کنید. به عنوان تمرین از css و html به منظور زیباتر شدن فرم ارسال ایمیل و حتی صفحه ارسال ایمیل و نمایش پیام‌ها بهره ببرید. همچنین در صورتی که هرگونه سوالی در این مورد برایتان پیش آمده آن را در بخش نظرات اعلام کنید.

همچنین می‌توانید از آنچه که در این جلسه یاد گرفتید به منظور ایجاد فرم تماس با ما برای سایت خود استفاده کنید.

در جلسات آینده و در پروژه‌های پیچیده‌تر روش ارسال ایمیل با ضمیمه و نیز ایمیل‌های HTML و UTF-8 را خواهید آموخت. فعلا سعی کنید مباحثی که تا اینجا آموزش داده شده را به صورت روان و کامل یاد بگیرید چراکه رفته رفته با بکار گرفتن پروژه‌های سنگین‌تر کار شما کمی بیشتر می‌شود. 

منبع: زومیت

توسعه الگوریتمی که در زمینه یادگیری مفاهیم جدید، عملکردی مشابه انسان دارد

پژوهشگران اخیرا الگوریتمی را توسعه داده‌اند که سیستم‌های هوش مصنوعی را قادر می‌سازد تا در زمینه‌ی یادگیری مفاهیم جدید، عملکردی مشابه انسان داشته باشند. با ما همراه باشید.

“فراگیری ماشین” عبارتی نامفهوم برای توصیف روشی است که سیستم‌های مبتنی بر هوش مصنوعی به کمک آن شروع به درک دنیای پیرامون خود از طریق دریافت حجم بسیار زیادی از اطلاعات می‌کنند. اما پژوهشگران آمریکایی به تازگی موفق به توسعه‌ی الگوریتمی شده‌اند که مدت‌زمان موردنیاز AI برای فراگیری موضوعات جدید را به میزان قابل توجهی کاهش می‌دهد. پژوهشگران به کمک این الگوریتم موفق به ساخت ماشینی با قابلیت ترسیم نمادهای بصری شده‌اند. نمادهای ترسیم شده توسط این ماشین عمدتا از نمونه‌های ترسیم شده توسط انسان قابل تشخیص نیستند.

در این تحقیق آمده است که انسان‌ها با وجود تمام نقص‌های خود در یادگیری موضوعات جدید عملکرد بسیار خوبی دارند. چه در حین یادگیری رفتار یک شخصیت داستانی و چه در حال گذراندن دوره‌ی آموزش نحوه‌ی راه‌اندازی و استفاده از یک ابزار، انسان‌ها برای آنکه قادر به تکرار یک عمل خاص شوند، تنها نیاز به مشاهده‌ی چند نمونه از نحوه‌ی انجام آن دارند.

در مقایسه با انسان برای آن‌که فرآیند الگوشناسی اکثر ماشین‌ها (مانند یک کامپیوتر که در حال یادگیری شناسایی چهره‌ها یا شناسایی کاراکترهای تایپ شده روی یک چک)، عملکرد دقیقی داشته باشد، باید این ماشین‌ها به صورت گام به گام با هزاران مثال آشنا شوند.

اما به نظر می‌رسد که این روند در حال تغییر باشد. پژوهشگران اخیرا موفق به توسعه‌ی الگوریتمی خاص بر مبنای چارچوب برنامه نویسی بیز شده‌اند. این الگوریتم از طریق اصلاح کدهای خود قادر به ترسیم نمادهای گرافیکی خاصی است.
این الگوریتم به جای ترسیم مکرر کاراکتر آموخته شده‌ی یکسان قبلی، براساس یک “مدل تولید” از نحوه‌ی ترسیم کاراکتر، در هر بار نماد یاد شده را به صورت متفاوت ترسیم می‌کند. به این ترتیب هوش مصنوعی نیز مانند انسان عمل خواهد کرد. انسان هیچ‌گاه نامه‌ای را دقیقا به یک شکل نمی‌نویسد، چرا که ما به جای نحوه‌ی بازنویسی مکرر یک نامه‌ی اولیه، صرفا شکل کلی نوشتن آن را می‌آموزیم.

پژوهشگران از الگوریتم خود در بازنویسی ۱۶۰۰ نوع از کاراکترهای دست‌نویسی شده از ۵۰ سیستم نگارشی جهان شامل سانسکریت، تیبتان و حتی نمادهای ابداعی بکار رفته در سریال تلویزیونی Futurama استفاده کرده‌اند. پس از آن‌که این ماشین کاراکترهای آموخته‌ی خود را به صورت مستقل ترسیم کرد، پژوهشگران آزمایشی را موسوم به “تست بصری تورینگ” اجرا کردند. هدف از این آزمایش پی بردن به این موضوع بود که آیا افراد مختلف قادر به تشخیص نمادهای ترسیم شده توسط این ماشین از نمونه‌های دست‌نویس هستند یا خیر. در نهایت کمتر از ۲۵ درصد از این افراد قادر به تشخیص نمونه‌ی دست‌نویس از نمادهای ترسیم شده توسط ماشین شدند. بنابراین می‌توان گفت که عملکرد این ماشین تا حدود زیادی نزدیک به انسان بوده است.

ojsz3ph_cf4e6

به نظر شما در تصویر بالا در مورد هر یک از نمادها، کدام یک از جداول توسطماشین ترسیم شده و کدام یک به دست انسان رسم شده است؟ در هر ردیف از چپ به راست به ترتیب جداول B و A در ردیف اول، جداول A و B در ردیف دوم و جداول A و B در ردیف سوم توسط ماشین ترسیم شده‌اند.

جاشوا تنبام، پژوهشگر علوم شناختی دانشگاه MIT می‌گوید:

کودکان قبل از ورود به مقطع کودکستان نحوه‌ی شناسایی مفاهیم جدید را از طریق مشاهده‌ی تنها یک نمونه می‌آموزند. آنها حتی قادر به تجسم نمونه‌هایی هستند که از قبل با آن آشنایی ندارند. ما هنوز تا ساخت ماشینی با هوشمندی یک کودک راه زیادی را در پیش داریم، اما این نخستین باری است که موفق به توسعه‌ی ماشینی شدیم که قادر به یادگیری و بکارگیری حجم زیادی از مفاهیم دنیای واقعی (حتی مفاهیم بصری ساده‌ای مانند کاراکترهای دست‌نویس) است؛ به نحوی که امکان تشخیص نمادهای ترسیم شده توسط آن از نمونه‌های دست‌نویس بسیار دشوار است.

ممکن است ایده‌ی ساخت ماشینی که می‌تواند با دست‌خط خود شما را فریب دهد چندان مفید به‌ نظر نرسد اما در عمل یقینا الگوریتم “یادگیری سریع” آن کاربردهای بسیار مهمی خواهد داشت.

تنبام می‌گوید:

تصور کنید که تلفن هوشمند شما از این قابلیت بهره می‌برد؛ شما از واژه‌ای استفاده می‌کنید و تلفن‌تان معنای آن واژه را از شما می‌پرسد و در دفعات بعدی که شما این واژه را می‌گویید، قادر به تشخیص آن است. بهبود قابلیت یادگیری سریع مفاهیم جدید در ماشین‌ها، آثار شگرفی بر بسیاری از بخش‌های مرتبط با هوش مصنوعی مانند پردازش تصویر، تشخیص صدا، تشخیص چهره، فهم زبان‌های طبیعی و بازیابی اطلاعات خواهد داشت.