و ). لهذا، يتم استخدام مجموعة من السمات formaction وformmethod وformenctype وformtarget، وهي نظائر للسمات المقابلة بدون بادئة النموذج. يوضح المثال 4 استخدام هذه السمات.مثال 4: إرسال النموذج
HTML5 IE Cr Op Sa Fx
تقديم النموذج
جميع سمات النماذج الجديدة غير مدعومة من قبل بعض المتصفحات، وخاصة Internet Explorer وSafari.
إحدى الوظائف الأكثر شيوعًا في الموقع هي نموذج الطلب أو الطلب، حيث يتم إرسال البيانات منه عبر البريد الإلكتروني إلى مالك الموقع. كقاعدة عامة، هذه النماذج بسيطة وتتكون من حقلين أو ثلاثة حقول لإدخال البيانات. كيفية إنشاء نموذج الطلب هذا؟ وهذا يتطلب استخدام لغة ترميز HTML ولغة برمجة PHP.
لغة ترميز HTML نفسها بسيطة؛ كل ما عليك فعله هو معرفة كيفية ومكان وضع علامات معينة. مع لغة برمجة PHP، الأمور أكثر تعقيدًا بعض الشيء.
بالنسبة للمبرمج، فإن إنشاء مثل هذا النموذج ليس بالأمر الصعب، ولكن بالنسبة لمصمم تخطيط HTML، قد تبدو بعض الإجراءات صعبة.
إنشاء نموذج إرسال البيانات في HTML السطر الأول سيكون على النحو التالي
الآن دعونا نجمع كل شيء معًا.
الآن دعونا نجعل الحقول في النموذج إلزامية. لدينا الكود التالي:
قم بإنشاء ملف يقبل البيانات من نموذج HTML سيكون هذا ملفًا يسمى send.php
في الملف، في المرحلة الأولى، تحتاج إلى قبول البيانات من مصفوفة النشر. للقيام بذلك، نقوم بإنشاء متغيرين:
$fio = $_POST["fio"]; $email = $_POST["email"];
تُسبق أسماء المتغيرات في PHP بعلامة $ ويتم وضع فاصلة منقوطة في نهاية كل سطر. $_POST عبارة عن مصفوفة يتم إرسال البيانات من النموذج إليها. في نموذج html، يتم تحديد طريقة الإرسال على أنها طريقة = "post". لذلك، يتم قبول متغيرين من نموذج html. لحماية موقعك، تحتاج إلى تمرير هذه المتغيرات من خلال عدة مرشحات - وظائف php.
ستقوم الوظيفة الأولى بتحويل جميع الأحرف التي سيحاول المستخدم إضافتها إلى النموذج:
في هذه الحالة، لا يتم إنشاء متغيرات جديدة في PHP، ولكن يتم استخدام المتغيرات الموجودة. ما سيفعله الفلتر هو تحويل الشخصية "<" в "<". Также он поступить с другими символами, встречающимися в html коде.
تقوم الوظيفة الثانية بفك ترميز عنوان URL إذا حاول المستخدم إضافته إلى النموذج.
$fio = urldecode($fio); $email = urldecode($email);
أما الدالة الثالثة فسوف نقوم بإزالة المسافات من بداية السطر ونهايته إن وجدت:
$fio = تقليم($fio); البريد الإلكتروني $ = تقليم($email);
هناك وظائف أخرى تسمح لك بتصفية متغيرات PHP. ويعتمد استخدامها على مدى قلقك من أن أحد المهاجمين سيحاول إضافة رمز برنامج إلى نموذج إرسال البريد الإلكتروني بتنسيق html هذا.
التحقق من صحة البيانات المنقولة من نموذج HTML إلى ملف PHP
للتحقق مما إذا كان هذا الرمز يعمل وما إذا كان يتم نقل البيانات، يمكنك ببساطة عرضه على الشاشة باستخدام وظيفة الصدى:
صدى $FIO; صدى " "; صدى $FIO;
السطر الثاني هنا ضروري لفصل مخرجات متغيرات php إلى أسطر مختلفة.
إرسال البيانات المستلمة من نموذج HTML إلى البريد الإلكتروني باستخدام PHP لإرسال البيانات عبر البريد الإلكتروني، تحتاج إلى استخدام وظيفة البريد في PHP.
mail("إلى أي عنوان سيتم إرساله"، "موضوع الرسالة"، "الرسالة (نص الرسالة)"،"من: من أي بريد إلكتروني يتم إرسال الرسالة \r\n");
على سبيل المثال، تحتاج إلى إرسال البيانات إلى البريد الإلكتروني لمالك الموقع أو مديره [البريد الإلكتروني محمي] .
يجب أن يكون موضوع الرسالة واضحا، ويجب أن تحتوي رسالة الرسالة على ما حدده المستخدم في نموذج HTML.
بريد(" [البريد الإلكتروني محمي] "، "الطلب من الموقع"، "الاسم الكامل:".$fio.". البريد الإلكتروني: ".$email،"من: [البريد الإلكتروني محمي] \r\n");
من الضروري إضافة شرط يتحقق مما إذا كان النموذج قد تم إرساله باستخدام PHP إلى عنوان البريد الإلكتروني المحدد.
إذا (البريد(" [البريد الإلكتروني محمي] "، "الطلب من الموقع"، "الاسم الكامل:".$fio.". البريد الإلكتروني: ".$email،"من: [البريد الإلكتروني محمي] \r\n")) { صدى "تم إرسال الرسالة بنجاح"؛ ) آخر ( }
وبالتالي، فإن رمز البرنامج الخاص بملف send.php، الذي سيرسل بيانات نموذج HTML إلى البريد، سيبدو كما يلي:
$fio = $_POST["fio"]; $email = $_POST["email"]; $fio = htmlspecialchars($fio); $email = htmlspecialchars($email); $fio = urldecode($fio); $email = urldecode($email); $fio = تقليم($fio); البريد الإلكتروني $ = تقليم($email); // صدى $fio؛ //صدى " "; // صدى $ البريد الإلكتروني؛ إذا (البريد(" [البريد الإلكتروني محمي] "، "الطلب من الموقع"، "الاسم الكامل:".$fio.". البريد الإلكتروني: ".$email،"من: [البريد الإلكتروني محمي] \r\n")) (صدى "تم إرسال الرسالة بنجاح"؛ ) آخر ( صدى "حدثت أخطاء أثناء إرسال الرسالة"؛ }?>
تم التعليق على ثلاثة أسطر للتحقق من نقل البيانات إلى الملف. إذا لزم الأمر، يمكن إزالتها، لأنها كانت هناك حاجة إليها فقط لتصحيح الأخطاء.
نضع كود HTML وPHP لإرسال النموذج في ملف واحد في التعليقات على هذه المقالة، يطرح العديد من الأشخاص سؤالاً حول كيفية التأكد من أن نموذج HTML ورمز PHP لإرسال البيانات إلى البريد الإلكتروني موجودان في ملف واحد، وليس ملفين.
لتنفيذ هذا العمل، تحتاج إلى وضع كود HTML الخاص بالنموذج في ملف send.php وإضافة شرط يتحقق من وجود المتغيرات في مصفوفة POST (يتم إرسال هذه المصفوفة من النموذج). أي أنه إذا كانت المتغيرات في المصفوفة غير موجودة، فأنت بحاجة إلى إظهار النموذج للمستخدم. بخلاف ذلك، ستحتاج إلى تلقي البيانات من المصفوفة وإرسالها إلى المستلم.
دعونا نرى كيفية تغيير كود PHP في ملف send.php:
نموذج الطلب من الموقع // تحقق من وجود المتغيرات في مصفوفة POST إذا(!isset($_POST["fio"]) و !isset($_POST["email"]))( ?>
) آخر ( // اعرض النموذج $fio = $_POST["fio"]; $email = $_POST["email"]; $fio = htmlspecialchars($fio); $email = htmlspecialchars($email); $fio = urldecode($fio); $email = urldecode($email); $fio = تقليم($fio); البريد الإلكتروني $ = تقليم($email); إذا (البريد(" [البريد الإلكتروني محمي] "، "الطلب من الموقع"، "الاسم الكامل:".$fio.". البريد الإلكتروني: ".$email،"من: [البريد الإلكتروني محمي] \r\n"))( صدى "تم إرسال الرسالة بنجاح"; ) آخر ( صدى "حدثت أخطاء أثناء إرسال الرسالة"؛ } } ?>
نتحقق من وجود متغير في مصفوفة POST باستخدام دالة PHP isset(). علامة التعجب قبل هذه الدالة في الحالة تعني النفي. أي أنه إذا كان المتغير غير موجود، فعلينا إظهار النموذج الخاص بنا. إذا لم أضع علامة تعجب، فإن الشرط يعني حرفيًا "إذا كان موجودًا، فقم بإظهار النموذج". وهذا خطأ في حالتنا. وبطبيعة الحال، يمكنك إعادة تسميته إلى Index.php. إذا قمت بإعادة تسمية الملف، فلا تنس إعادة تسمية اسم الملف في السطر
من خلال حفظ هذا الرمز في ملف HTML وعرضه باستخدام متصفحك المفضل، سترى نموذج HTML مألوفًا:
علامة
، في الواقع يقوم بتعيين النموذج. سماتها اختيارية على حد سواء:
الإجراء - يحدد عنوان URL (الكامل أو النسبي) الذي سيتم إرسال النموذج إليه.
إذا لم يتم تحديد هذه السمة، فإن معظم المتصفحات (على وجه التحديد، جميع المتصفحات المعروفة بالنسبة لي) ترسل النموذج إلى المستند الحالي، أي "إلى نفسها". يعد هذا اختصارًا مناسبًا، ولكن وفقًا لمعيار HTML، تكون سمة الإجراء مطلوبة. هذه هي طريقة GET.
علامة POST - يتم إرسال بيانات النموذج في نص الطلب. إذا لم يكن الأمر واضحًا تمامًا (أو غير واضح تمامًا) فلا تقلق، فسنعود إلى هذه المشكلة قريبًا.
إذا لم يتم تحديد سمة الطريقة، فسيتم افتراض GET.
- يحدد عنصر النموذج المحدد بواسطة سمة النوع:
القيم الأخرى ممكنة (و تحدد القيمة "نص" حقل إدخال نص من سطر واحد
تحدد قيمة "إرسال" زرًا يرسل النموذج إلى الخادم عند النقر عليه
- ليست العلامة الوحيدة التي تحدد عنصر النموذج).
فماذا يحدث عندما نضغط على "موافق"؟
يقوم الخادم بتحليل الطلب المستلم وإنشاء استجابة وإرساله إلى المتصفح وإغلاق الاتصال
يعرض المتصفح المستند المستلم من الخادم
يبدو إرسال نفس الطلب يدويًا (باستخدام telnet) كما يلي (بافتراض أن اسم مجال الموقع هو www.example.com):
Telnet www.example.com 80 GET /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP/1.0\r\n المضيف: www.example.com\r\n \r\n
كما خمنت على الأرجح، فإن النقر على زر الإرسال في النموذج باستخدام طريقة الإرسال "GET" هو نفس كتابة عنوان URL المقابل (مع علامة استفهام وبيانات النموذج في النهاية) في شريط عناوين المتصفح:
http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK
في الواقع، يتم استخدام طريقة GET عندما تطلب مستندًا من الخادم بمجرد إدخال عنوان URL الخاص به أو النقر فوق رابط. عند الاستخدام
يحتوي النموذج الموضح في الأسطر 8-12 على عنصرين: الاسم وزر موافق. تحدد سمة الطريقة طريقة إرسال النموذج POST، بينما تحدد سمة الإجراء عنوان URL الذي يتم إرسال النموذج إليه، ويتم ملؤه بقيمة متغير خادم PHP_SELF - عنوان البرنامج النصي قيد التشغيل حاليًا.
=$_SERVER["PHP_SELF"]?>- نموذج مختصر ل echo $_SERVER["PHP_SELF"]; ?> .
لنفترض أننا أدخلنا القيمة Vasya في حقل الاسم وقمنا بالنقر فوق الزر "موافق". في هذه الحالة، يرسل المتصفح طلب POST إلى الخادم. نص الطلب: name=Vasya&okbutton=OK . يقوم PHP تلقائيًا بملء المصفوفة $_POST:
$_POST ["الاسم" ] = "فاسيا" $_POST ["okbutton"] = "موافق"
في الواقع، يتم إرسال القيمة "Vasya" بواسطة المتصفح في شكل urlencode؛ بالنسبة لترميز windows-1251، تبدو هذه القيمة مثل %C2%E0%F1%FF . ولكن بما أن PHP تقوم تلقائيًا بمعالجة فك التشفير اللازم، فيمكننا "نسيان" هذه الميزة - حتى يتعين علينا التعامل مع طلبات HTTP يدويًا.
نظرًا لأن نص الطلب يحدد الأسماء والقيم فقط، ولكن ليس أنواع عناصر النموذج، فليس لدى PHP أي فكرة عما إذا كان $_POST["name"] يطابق سلسلة إدخال أو زر أو مربع قائمة. لكننا بشكل عام لا نحتاج إلى هذه المعلومات على الإطلاق. :)
نظرًا لأننا لا نحتاج إلى معرفة ما يقوله زر الإرسال، فيمكننا إزالة سمة الاسم في السطر 11، وتقصير وصف الزر إلى . في هذه الحالة، سيرسل المتصفح طلب POST name=Vasya.
والآن نفس الشيء، ولكن بالنسبة لنموذج GET:
إذا (isset($_GET [ "الاسم" ])) ( صدى " مرحبًا، " . $_GET [ "الاسم" ] . " !"
;
}
?>
على السطر 8 يمكن للمرء أن يكتب بنفس السهولة
لا يتم استخدام تقنيات جديدة هنا. اكتشف ذلك، قم بتشغيل الكود، حاول التعديل...
لنغير المثال الأخير حتى لا يضطر المستخدم إلى ملء الحقول مرة أخرى. للقيام بذلك، املأ سمات القيمة لعناصر النموذج بالقيم التي أدخلناها للتو.
$name = isset($_POST [ "name" ]) ؟ $_POST [ "الاسم" ] : "" ; $year = isset($_POST [ "السنة" ]) ؟ $_POST [ "السنة" ] : "" ;إذا (isset($_POST [ "اسم"]، $_POST [ "السنة" ])) ( إذا ($_POST [ "الاسم" ] == "" ) ( صدى "الرجاء إدخال اسم! "
;
) وإلا إذا ($_POST [ "السنة"]<
1900
||
$_POST
[
"year"
] >
2004
) {
صدى "الرجاء تحديد سنة الميلاد! النطاق الصالح للقيم: 1900..2004 "
;
) آخر ( صدى "مرحبا". $_POST [ "الاسم" ] . "! "
;
$العمر = 2004 - $_POST [ "السنة"]; صدى "لك". $ العمر . " سنين "
;
}
صدى "
"
;
}
?>
قد يكون السطران 4 و 5 مربكين إلى حد ما، كل شيء بسيط للغاية: يمكن كتابة السطر 4 على النحو التالي:
إذا (isset($_POST [ "الاسم" ])) $name = $_POST ["name"]; آخر $الاسم = "" ;
قد يطرح السؤال - لماذا لا نحذف الأسطر 4-5 ونكتب:
أدخل اسمك:
">
أدخل سنة ميلادك:
">
النقطة المهمة هي أنه إذا لم يتم تعريف متغيرات POST هذه - وسيكون هذا هو الحال إذا لم يتم ملء النموذج بعد - فسوف تصدر PHP تحذيرات حول استخدام المتغيرات غير المهيأة (وبشكل معقول تمامًا: تسمح لك هذه الرسالة بـ يعثر بسرعة على الأخطاء المطبعية التي يصعب اكتشافها في أسماء المتغيرات، ويحذر أيضًا من "الثغرات" المحتملة في الموقع). يمكنك، بالطبع، وضع رمز isset مباشرة في النموذج، لكنه سيكون مرهقًا للغاية.
فهمتها؟ حاول الآن العثور على الخطأ في الكود المحدد. حسنًا، ليس خطأً بالضبط، بل عيبًا.
أتش تي أم أل Specialchars()
لم تجد ذلك؟ سأعطيك تلميحا. أدخل، على سبيل المثال، في حقل "الاسم" علامة اقتباس مزدوجة وبعض النص، على سبيل المثال، "Va" أرسل النموذج، وألقِ نظرة على الكود المصدري للصفحة الناتجة، وسيكون للسطر الرابع شيء مثل:
أدخل اسمك:
وهذا هو، لا شيء جيد. ماذا لو قام مستخدم ماكر بإدخال كود JavaScript؟
لحل هذه المشكلة، تحتاج إلى استخدام الدالة htmlspecialchars()، والتي ستستبدل الأحرف الخاصة بتمثيل HTML الخاص بها (على سبيل المثال، اقتباس بـ "):
$name = isset($_POST [ "name" ]) ؟ htmlspecialchars ($_POST [ "name" ]) : "" ؛ $year = isset($_POST [ "السنة" ]) ؟ htmlspecialchars ($_POST [ "السنة"]) : "" ؛إذا (isset($_POST [ "اسم"]، $_POST [ "السنة" ])) ( إذا ($_POST [ "الاسم" ] == "" ) ( صدى "الرجاء إدخال اسم! "
;
) وإلا إذا ($_POST [ "السنة"]<
1900
||
$_POST
[
"year"
] >
2004
) {
صدى "الرجاء تحديد سنة الميلاد! النطاق الصالح للقيم: 1900..2004 "
;
) آخر ( صدى "مرحبا". $اسم . "! "
;
$العمر = 2004 - $_POST [ "السنة"]; صدى "لك". $ العمر . " سنين "
;
}
صدى "
"
;
}
?>
كرر التجربة وتأكد من صحة كود HTML الآن.
تذكر - يجب استخدام الدالة htmlspecialchars() عند عرض محتويات متغير قد يحتوي على أحرف HTML خاصة.
فبينفو ()
تعد وظيفة phpinfo() واحدة من أهم الوظائف في لغة PHP. يعرض معلومات حول إعدادات PHP وقيم متغيرات التكوين المختلفة...
لماذا أذكر ذلك في مقال عن النماذج؟ phpinfo() هي أداة تصحيح أخطاء مناسبة. يقوم phpinfo()، من بين أمور أخرى، بطباعة قيم كافة المتغيرات $_GET و$_POST و$_SERVER. لذا، إذا ضاع أحد متغيرات النموذج، فإن أسهل طريقة لمعرفة الخطأ هي استخدام الدالة phpinfo(). للتأكد من أن الدالة تعرض قيم المتغيرات فقط (دون الحاجة إلى التمرير خلال عشرات الصفحات)، يجب استدعاؤها على النحو التالي: phpinfo(INFO_VARIABLES); أو - وهو نفس الشيء تمامًا - phpinfo(32) ؛.
phpinfo(32); ?>
أو على سبيل المثال هذا الموقف: تريد معرفة عنوان IP الخاص بالزائر. تتذكر أن المتغير المقابل يتم تخزينه في مصفوفة $_SERVER، ولكن - لسوء الحظ - نسيت اسم المتغير بالضبط. مرة أخرى، اتصل بـ phpinfo(32); ، ابحث عن عنوان IP الخاص بك في العلامة وابحث عنه في السطر $_SERVER["REMOTE_ADDR"] .
العمل المخبري 1. بروتوكول HTTP. طرق الحصول والنشر. نماذج HTML.
الجزء النظري
دورة حياة طلب HTTP
المتصفح يفتح الاتصال مع الخادم يرسل المتصفح طلبًا إلى الخادم لاستلام الصفحة يقوم الخادم بإنشاء استجابة (في أغلب الأحيان رمز HTML) للمتصفح و يغلق الاتصال يقوم المتصفح بمعالجة كود HTML ويعرض الصفحة
انتبه إلى أبرزها عريض . حتى قبل أن ترى الصفحة المطلوبة على الشاشة، يكون الاتصال بالخادم مغلقًا، وقد نسي أمرك. وعندما تدخل عنوانًا مختلفًا (أو نفسه)، أو تنقر على رابط، أو تنقر على زر نموذج HTML، فسوف يتكرر نفس النمط مرة أخرى.
ويسمى هذا النوع من العمل "خادم العميل" . العميل في هذه الحالة هو المتصفح.
لذلك، يستمر الاتصال بخادم الويب لبضع ثوانٍ فقط (أو أجزاء من الثواني) - وهذه هي الفترة الزمنية بين النقر على الرابط (أو أي نوع آخر من الطلبات) وبدء عرض الصفحة. تعرض معظم المتصفحات نوعًا من المؤشرات أثناء الاتصال، على سبيل المثال، يعرض MS Internet Explorer رسمًا متحركًا في الزاوية اليمنى العليا.
للتخلص إلى الأبد من تصور HTTP باعتباره "صندوقًا أسود"، فلنتظاهر بأننا متصفح يستخدم telnet:
هيا نطلق التلنت ya.ru 80 دعونا ندخل ما يلي في نافذة المحطة الطرفية (إذا لم يتم عرض الإدخال، فلا بأس):
الحصول على / HTTP/1.0 [اضغط أدخل هنا] المضيف: ya.ru [هنا اضغط على Enter مرتين]
الضغط على Enter يتوافق عادةً مع مجموعة الأحرف CR + LF، المشار إليها بـ \r\n . سيتم استخدام هذا الترميز أدناه.
سيتم تشغيل كود HTML الخاص بالصفحة http://ya.ru/ عبر الشاشة. كما ترون، لا شيء معقد.
يمكن عرض الكود المصدري للصفحة الحالية في أي متصفح تقريبًا عن طريق تحديد "عرض|المصدر" من القائمة.
الصور والإطارات - كل هذه طلبات إضافية، بالضبط نفس الشيء. في الواقع، من أين تأتي الصور في نافذة المتصفح: عند تحليل (معالجة) كود HTML، يأتي المتصفح عبر العلامة https://i1.wp.com/ صورة"> يقدم طلبًا إضافيًا إلى الخادم - request صور ، ويعرضها في المكان الذي توجد به العلامة .
يحاول:
التلنت www.google.ru 80
احصل على /php/php5ru.png HTTP/1.0 \r\n المضيف: ya.ru \r\n\r\n
ما ستراه إذا قمت بعرض ملف png هذا في محرر النصوص سوف يومض عبر الشاشة.
أنا-2. نماذج HTML. طرق إرسال البيانات إلى الخادم
من المحتمل أنك واجهت بالفعل نماذج HTML:
أدخل اسمك: