الاثنين، 13 أغسطس 2012

شرح برمجة نموذج إتصل بنا

بسم الله الرحمن الرحيم،

جائتنى البارحة أولى التساؤلات التى تصلني عبر بريدي الذى وضعته فى صفحة اسألنى، وهو من الأخ عبدالحق عبدو، وهذا هو نص الرسالة التى جائتنى:

السلام عليكم أنا قمت بتصميم موقع بسيط على استضافة مجانية وأريد أن أعرف  كيف يمكنني في صفحة إتصل بنا يصلني التبليغ لرسائل الزوار مع العلم أني ليس لدي مستوى في لغة  php مع العلم أن لدي سكريبت جاهز بي اش بي لكن عند عملية الارسال يضهر لي   كود بي اش بي الدي في سكريبت http://almanararbos.funpic.org/index.html شكرا لكم
الإجابة:
          حسنًا، لأنني لم استطيع الإطلاع على الشيفرة المصدرية التى كتبتها انت بخصوص نموذج إتصل بنا، فسأقوم معك ببرمجة نموذج إتصل بنا بسيط يمكنك تطويره حسب ما تريد أنت بعد ذلك، ولنبدأ بسم الله.
تأكد فى البداية أنك قمت ببرمجة ملف الإتصال بقاعدة البيانات بالشكل المطلوب فى البرنامج لديك.
فى هذا الشرح لن أقوم بالتركيز على التصميم بتاتًا، فسأقوم ببرمجة نموذج إتصل بنا بسيط جدًا، ولأنني أيضًا لم أعرف قصدك يا عبدالحق هل تريد نموذج الإتصال يرسل إلى بريد إلكتروني أم تريده مرتبطًا بقاعدة البيانات، لكنى اعتقد انك تقصد الإرسال إلى بريد إلكتروني؛ لأن هذا هو الشائع، وهذ ما سأقوم بشرحه -إن شاء الله-.
سنقوم بستمية ملف contact.php وسنقوم بوضع أساس html5 بسيط فيه كالشيفرة التالية:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Contact Us</title>
</head>
<body>


</body>
</html>
والآن سنقوم بوضع نموذج بسيط يحتوى على حقل الاسم والبريد وعنوان الرسالة ومحتوى الرسالة، وأخيرًا زر الإرسال. لتكون شيفرة الصفحة كالتالى:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Contact Us</title>
</head>
<body>
<h2>Contact Us</h2><br>
<form action="" method="post">
Your name: <input type="text"
name="name"><br> Your E-Mail: <input type="email"
name="email"><br>
Subject: <input type="text" name="subject"
size="40"><br>
Message: <textarea name="msg"></textarea>
</form>
</body>
</html>
والآن سنبدأ بكتابة شيفرة PHP، والتي ستكون ببساطة مجرد سحب للمتغيرات الأربعة، الاسم، والبريد، والعنوان، والرسالة، ثم سنقوم بإرسال الرسالة إلى البريد المُراد الإرسال إليه عبر دالة mail ومن ثم التحقق من إذا كانت الرسالة تم إرسالها أم لا وعرض رسائل تفيد بذلك، حسنًا، الآن فوق هذا النموذج سنبدأ بكتاية شيفرة PHP وسنقوم بسحب البيانات التى تم إدخالها فى النموذج، وهى كالتالى: name,email,subject,msg، سنقوم بسحبهم عبر المتغير $_POST ووضعهم فى متغيرات جديد ، لكن سنقوم بعمل متغير ولنسمه header وسنقوم بدمج كلمة ترحيبية بسيطة فى هذا المتغير مع المتغير name و email كالشيفرة التالية:
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$msg = $_POST['msg'];
$header = "<br>My name is ".$name." and this is my Email ".$email."<br>";
?>
والآن سنقوم بإضافة قيمة المتغير header إلى آخر المتغير msg لكي تعرض فى آخر الرسالة اسم باعث الرسالة وبريده الإلكتروني، فنضيف هذا السطر:
$msg .= $header;
والآن نقوم بإرسال الرسالة عبر دالة mail، وتأخذ دالة mail ثلاثة بارامترات رئيسية، الأولي وهو البريد المرسل إليه، وهو فى حالتنا بريدك الإلكتروني الذي تريد أن تصل إليك الرسالة عليه، والثاني وهو عنوان الرسالة، والثالث وهو نص الرسالة، وبذلك نستطيع إرسال الرسالة عبر كتابة السطر التالي:
mail("ahmed2ubuntu@gmail.com",$subject,$msg);
بالطبع مع إستبدال البريد الذي وضعته ببريدك أنت، فتصبح شيفرة الصفحة كاملة كالتالى:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Contact Us</title>
</head>
<body>
<h2>Contact Us</h2><br>
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$msg = $_POST['msg'];
$header = "<br>My name is ".$name." and this is my Email ".$email."<br>";
$msg .= $header;
mail("ahmed2ubuntu@gmail.com",$subject,$msg);
?>
<form action="" method="post">
Your name: <input type="text"
name="name"><br>
Your E-Mail: <input type="email"
name="email"><br>
Subject: <input type="text" name="subject"
size="40"><br>
Message: <textarea name="msg"></textarea>
</form>
</body>
</html>
لكن نريد وضع شرط للتحقق من إذا ما كان تم إرسال الرسالة أم لا، لذلك سنضع دالة Mail فى متغير والتحقق من هذا المتغير، فإذا كان يخرج True فقد تم إرسال الرسالة وعندها سيتم عرض رسالة للمستخدم لإخباره بنجاح الإرسال، وإن كان يخرج False فسيظهر خطأ للمستخدم لأنه لم يتم إرسال الرسالة، فسنقوم بحذف السطر الموجود به الدالة Mail ونقوم بإستبداله بتلك الشيفرة:
$send = mail("ahmed2ubuntu@gmail.com",$subject,$msg);
if($send){
echo "Sent!";
}else{
"There is something went wrong!";
}
لتصبح الشيفرة الكاملة الخاصة بملف contact.php بهذا الشكل:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Contact Us</title>
</head>
<body>
<h2>Contact Us</h2><br>
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$msg = $_POST['msg'];
$header = "<br>My name is ".$name." and this is my Email ".$email."<br>";
$msg .= $header;
$send = mail("ahmed2ubuntu@gmail.com",$subject,$msg);
if($send){
echo "Sent!";
}else{
"There is something went wrong!";
}
?>
<form action="" method="post">
Your name: <input type="text"
name="name"><br>
Your E-Mail: <input type="email"
name="email"><br>
Subject: <input type="text" name="subject"
size="40"><br>
Message: <textarea name="msg"></textarea>
</form>
</body>
</html>
آسف على ضعف الشرح تلك المرة؛ لأنني حاليًا مقبل على سفر غدًا صباحًا -بإذن الله- وسأعاود التدوين بعد العيد إن شاء الله، بالتوفيق.
المزيد من المواضيع:

4 التعليقات:

  1. لا تنسو الاهتمام بثغرات النموذج هذا ^_^

    ردحذف
    الردود
    1. انا شرحت بس بسرعة عشان بجهز نفسي للسفر، بس إن شاء الله أكيد هشرح نفس الدرس ده بس كامل إن شاء الله فى وقت لاحق :)

      حذف
  2. والله اني لا أعرف كيف أشكرك شرح روعة عندي بعد الملاحضات لم أفهمها ساقوم برسال بريد إليك شكراً

    ردحذف
  3. بالنسبة لإستفسار الأخ عبدالحق الأخير فقد أرسل رسالة إلى بهذا المحتوى:
    السلام عليكم باراك الله فيك على الشرح أنا قمت بنسخ الكود وغيرت ايميل وقمت بحفضه لكن هل يجب عمل دلك في السيرفر المحلي لتجربته لأني جربته على سطح المكتب لكن بدون جدوى وهده صورة توضيحية
    بارك الله فيك
    وقد كانت إجابتى:
    أى شيفرات PHP يجب أن توضع بداخل السيرفر المحلي وتجربتها بداخل السيرفر المحلي عبر إستعراض الملفات على http://localhost او ما كان يعمل عليه سيرفرك المحلي، المهم أن تقوم بتجربة شيفرات PHP بداخ السيرفر المحلي لكي تعمل.
    بالتوفيق.

    عرضت هذا لنشر الفائدة، بالتوفيق.

    ردحذف