• 0
ahmedsaoud31

الدرس الرابع : إرسال المتغيرات بين صفحات الموقع وتضمين الصفحات والتعامل مع النماذج

سؤال

الحمد لله والصلاة والسلام على رسول الله

 

السلام عليكم ورحمة الله وبركاته

 

سنقوم بإذن الله بوضع الدروس تبعاً لإنهاء الدورة , وإن كان هناك أي تعليق أو إستفسار على أي جزئية من الدروس يرجى وضعها كتعليق في نفس الدرس 

 

* إرسال المتغيرات عبر صفحات الموقع

 

هذا الدرس ضمن سلسة دروس الدورة التالية لتعلم لغة php !


كثيراً ما نحتاج في الموقع لإرسال قيم المتغيرات من صفحة لصفحة أخرى داخل الموقع فهناك طرق عديدة لإرسال البيانات بين الصفحات سنتناول منها  إرسال البيانات من خلال الروابط أو إرسال البيانات من خلال النماذج

أولاً: إرسال البيانات عبر الروابط :
كثيراً ما نرى الروابط بهذا الشكل :

http://www.google.com/index.php?id=12230&page=send&sd=t3tt

ما يهمنا من الرابط هو ما بعد اسم الصفحة index.php فبعدها هناك الرمز ? ثم تأتي المتغيرات التي نريد نقلها

على سبيل المثال نريد نقل معرف الشخص id واسمه name لصفحة أخرى يكون الرابط كالتالي :

?id=31&name=ahmed

فبعد العلامة ? يأتي اسم المتغير ثم علامة الإسناد = ثم قيمة المتغير المراد نقلها وتأتي العلامة & للفصل بين عدة متغيرات نريد إرسالها بين الصفحات

كيف لي أن أجلب قيم المتغيرات من الروابط ؟
$_GET
توفر لغة php متغيرات عامة كـ $_GET للحصول على قيم المتغيرات من الروابط فعلى سبيل المثال نريد الحصول على قيمة المعرف id والاسم name من الرابط السابق يكون كالتالي :

<?php$id = $_GET['id'];$name = $_GET['name'];echo $id.'-'.$name;?>

فداخل الأقواس المربعة [] لـ $_GET يتم وضع اسم المتغير المراد جلب قيمته بين علامتي إقتباس زوجية أو فردية , ففي الكود السابق تم اسناد قيمة المتغير id الموجودة في الرابط للمتغير $id واسناد قيمة المتغير nmae الموجود في الرابط للمتغير $name وتم طباعتة القيم التي تحتويها هذه المتغيرات

قم بحفظ الكود السابق داخل صفحة ولتكن باسم get.php وقم بالدخول عليها , لا تقلق من رسائل الخطأ التي ستظهر فسيتم شرح سبب ظهورها
الآن قم بكتابة الكود التالي بعد اسم الصفحة في شريط العنوان في المتصفح وإضغط على زر enter :

?id=200&name=Mostafa

غير قيم المتغيرات لتجربة الكود

ماذا لو قمت بتغيير اسم المتغير نفسه ؟
سينتج خطأ عدم التعرف على المتغير في الرابط وهو ما ظهر عند فتح الصفحة أو مرة لعدم وجود قيم في الرابط ولتلاشي هذه الأخطاء يمكننا استخدام دالة isset للتعرف على وجود المتغير في الرابط من عدمه ويصبح الكود على الشكل التالي :

<?php$id = '';$name = '';if(isset($_GET['id']))    $id = $_GET['id'];if(isset($_GET['name']))    $name = $_GET['name'];echo $id.'-'.$name;?>

يعتبر المتغير $_GET عبارة عن مصفوفة , فمن يذكر معنا دالة foreach ؟ سنقوم الآن بطباعة محتويات المصفوفة $_GET بإستخدام دالة foreach كالتالي :

<?phpforeach($_GET as $key=>$value){    echo $key.'='.$value.'<br>';}?>

والآن سنقوم بعمل موقع بسيط متعدد الصفحات بإستخدام اللغة الهيكلية HTML ولغة التنسيق css والتالي رابط تنزيل هذا الموقع :
site1.zip


والتمرين المطلوب منك الآن هو تغيير اسم احد الصفحات وعليه تقوم بتغيير الروابط التي تشير لهذه الصفحة , ماذا ستلاحظ ؟


ستلاحظ أنه بعد تغيير اسم الصفحة فأنت مضطر لتغيير الرابط الذي يشير لهذه الصفحة في جميع الصفحات :(  , فما بالك لو لديك موقع من 1000 صفحة  :wacko:  , أعلم أن هناك بعض البرامج تقوم بعملية إستبدال النصوص في عدة ملفات دفعة واحدة وإحتجت لهذا الأمر عندما كنت أصمم مواقع كلاسيكية بدون الإعتماد على لغة برمجية , الأمر كان مرهق حقاً .

ولكن مع لغة php فالأمر بسيط , توفر لغة php دالة باسم include أي تضمين وظيفتها تضمين صفحة ضمن صفحة أخرى , والآن سنقوم بوضع كود محتوى الصفحة فقط داخل الصفحات وسنكتفي بوضع الـ header والـ footer في الصفحة الرئيسية index-page.php فقط وسنقوم بتغيير الروابط في الصفحة الرئيسية لتصبح بهذا الشكل - كما تم شرحة في استخدام $_GET - :

<div class="header">    <a href="index-page.php"> الرئيسية </a>    <a href="index-page.php?page=about-site"> عن الموقع </a>    <a href="index-page.php?page=news"> الأخبار </a>    <a href="index-page.php?page=new"> جديد الموقع </a>    <a href="index-page.php?page=contactus"> للإتصال بنا </a></div>

ويصبح كود تضمين محتوى الصفحات في الصفحة الرئيسية هو :

<div class="content">    <?php        if(isset($_GET['page']))        {            include($_GET['page'].'.php');        }        else        {            echo '<h1> محتوى الصفحة الرئيسية </h1>';        }    ?></div>

والتالي رابط تنزيل الملف بعد التعديلات :
site2.zip

 

ملاحظة : هناك دوال أخرى للتضمين كـ include_once أي تضمين الملف مرة واحدة فقط إذا كان هناك نسخة أخرى مضمَّنة من نفس الملف فإستخدام include تسبب أخطاء التضمين المتتالي لنفس الملف أي الدخول في حلقة مغلقة لعملية تضمين الملف إذا تم تضمين الملف داخل نفسه أو شئ من هذا القبيل ,  ودالة  require تعني أن هذا الملف مطلوب للإستمرار في معالجة باقي الكود وإلا لا يتم تنفيذ باقي الكود ويتم الخروج بعكس دالة include فيصدر خطأ عدم تضمين الملف ويتم معالجة باقي الكود , وهناك أيضاً دالة require_once على غرار دالة include_once .


ولكن قيم متغيرات الروابط كما نعلم يمكن تغييرها من خلال الرابط مما يجعل الرابط عرضة لتضمين ملفات خارجية وهو ما يعرف بثغرة RFI  :ph34r:  ولكن في نسخ php الحالية فالضبط الإفتراضي يمنع تضمين ملف خارجي من خادم أخر , وهناك أيضاً ثغرة تعرف بـ LFI وهي الوصول لتشغيل ملف ما على جهاز الخادم للحصول على بيانات ما أو تعديل ملف ما ومن خلال هذه الثغرة يمكن التحكم الكامل بجهاز الخادم , ولتلاشي هذه الثغرة إما أن تقوم بفلترة القيم التي يتم جلبها من الروابط أو تضمين ملفات بالإعتماد على قيمة متغير في الرابط وليكن المعرف id وعلى هذا تصبح الروابط السابقة على النحو التالي :

<div class="header">    <a href="index-page.php"> الرئيسية </a>    <a href="index-page.php?id=1"> عن الموقع </a>    <a href="index-page.php?id=2"> الأخبار </a>    <a href="index-page.php?id=3"> جديد الموقع </a>    <a href="index-page.php?id=4"> للإتصال بنا </a></div>

والكود الخاص بتضمين الصفحات سيكون على الشكل التالي :

<div class="content">    <?php        if(isset($_GET['id']))        {            switch($_GET['id'])            {                    case '1':                        include('about-site.php');                        break;                    case '2':                        include('news.php');                        break;                    case '3':                        include('new.php');                        break;                    case '4':                        include('contactus.php');                        break;                    default:                        echo '<h1 style="color:#F00;"> معرف صفحة خاطئ </h1>';            }        }        else        {            echo '<h1> محتوى الصفحة الرئيسية </h1>';        }    ?></div>

وهذا رابط تنزيل الملف بعد التعديلات :
site3.zip


ومن ملاحظتنا نجد أن اسم الصفحة أو الـ title دائماً هو "الصفحة الرئيسية" , أترك لكم هذا لتغييره ليعبر عن محتوى كل صفحة بنفس الطريقة السابقة

ملاحظة : توجد طرق أخرى لعملية تضمين الملفات منها أن يوضع راس الصفحة في صفحة منفصلة وأيضاً تززيل الصفحة وقائمة الروابط كلاً في صفحة منفصلة وتتم عملية تضمين هذه الصفحات ضمن صفحات الموقع وفي حال التعديل على أي من هذه الصفحات هو بمثابة التعديل على الموقع ككل .

ارسال المتغيرات عبر النماذج :
- النماذج في HTML هي وحدات لجلب البيانات من المستخدمين وكأمثلة عليها : عمليات تسجيل الدخول و تسجيل مستخدم جديد وتحتوي على العديد من عناصر الإدخال والإختيار على حسب الحاجة .
- أهم خصائص وسم النموذج form هي خاصية الـ action وقيمته تكون مسار ملف معالجة البيانات المرسلة من النموذج والخاصية method وهي نوع الإرسال إما POST أو GET وغالباً ما تستخدم الطريقة POST والفرق بينها وبن GET هي أن الطريقة POST تستخدم مع البيانات كبيرة الحجم .
- يتم ارسال التعرف على عناصر النموذج المرسلة من خلال خاصية الاسم name
ولجلب البيانات المرسلة في ملف المعالجة نستخدم المتغير المعرف مسبقاً في php وهو $_POST وهو عبارة عن مصفوفة تحتوي على البيانات المرسلة من النموذج .
والتالي نموذج به اسم المستخدم وكلمة المرور وذر لإرسال البيانات :

<form action="submit.php" method="POST">                <label>اسم المستخدم :</label>                <input type="text" name="username"><br>                <label>كلمة المرور : </label>                <input type="password" name="password"><br>                <input type="submit" value="أدخل القيم"></form>

- ملف معالجة البيانات هو submit.php ونوع الإرسال هو POST
- الوسم input هو أحد الوسوم الخاصة بوسم الـنموذج ولا يحتاج لوسم إغلاق ومن خواص هذا الوسم النوع type وهو نوع الحقل والخاصية name وهي اسم الحقل والذي من خلاله نستطيع جلب البيانات لهذا الحقل من ملف المعالجة .
- قمنا بعمل حقلين أحدهما من النوع text أي نص والأخر نوعه password أي حقل كلمة مرور
- والحقل الأخير من نوع submit أي ذر إرسال البيانات لملف المعالجة وبه الخاصية value وهي القيمة التي تظهر على الذر ويمكن إستخدام هذه الخاصية للحقول السابقة لوضع قيم إفتراضية للحقول .

-داخل ملف المعالجة submit.php سنضع الكود التالي لطباعة القيم الموجودة في المصفوفة $_POST :

<?phpforeach($_POST as $key=>$value){        echo $key.': '.$value.'<br>';}?>

- والتالي رابط تنزيل ملف التطبيق السابق :

site4.zip


- غير اسماء الحقول والقيم المدخلة وضع المزيد من عناصر النموذج form للتعرف عليها وكيفية جلب البيانات منها

- والمثال التالي لمجموعة مختلفة من عناصر النموذج :
site5.zip

- طبعاً هذه البيانات التي يتم طباعتها في ملف المعالجة من المفترض أن يتم تخزينها في وسيط ما للإستفادة منها كقواعد البيانات أو الملفات وسيأتي الحديث عن هذا لاحقاً بإن الله تعالى .

* التمرين :

- قم بإنشاء صفحة باسم page1.php وضع بها رابط به خمس متغيرات عند الضغط عليه يتم الإنتقال للصفحة page2.php وطباعة قيم هذه المتغيرات كل قيمة في سطر جديد .

- قم بإنشاء نموذج تسجيل يحتوي على الاسم ورقم الهوية ورقم الهاتف والبريد الإلكتروني ومربع للموافقة على الشروط ويتم طباعة هذه البيانات في صفحة معالجة البيانات فقط في حالة أن المستخدم وافق على الشروط وإلا لا يتم طباعة أي شئ .

 

* تمارين متقدمة :
- قم بعملية تحقق لقيم المدخلات السابقة وإظهار رسالة للمستخدم لتنبيهه للخطأ
- على سبيل المثال التأكد من أن القيمة المدخلة في حقل البريد الإلكتروني هي عبارة عن عنوان بريد إلكتروني صحيح وأن حقل رقم الهاتف عبارة عن أرقام فقط وهكذا ...

 

الدرس السابق | الإنتقال للموضوع الأساسي

تم تعديل بواسطه ahmedsaoud31
3

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

18 إجابة على هذا السؤال .

  • 0

شكراً على الجهد احمد

بعد التحية ,

الدرس رائع ,

لكن التمرين اول بند بيه مناسب جداً , التمرين الاخر غير مناسب

 

لتمرين :
- قم بعملية تحقق لقيم المدخلات السابقة وإظهار رسالة للمستخدم لتنبيهه للخطأ
- على سبيل المثال التأكد من أن القيمة المدخلة في حقل البريد الإلكتروني هي عبارة عن عنوان بريد إلكتروني صحيح وأن حقل رقم الهاتف عبارة عن أرقام فقط وهكذا ...

 

لا يمكن للمبتدئين التحقق من صحة البيانات فانت هنا تريدهم ان يصلوا الى Regural expressions  وهذا يحتاج لدروس

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مرحباً بك أخي حمدان ويشرفي مرورك الكريم وملاحظاتك ,

 

فعلاً لم أتطرق لشرح عملية التحقق ولكن أردت من التمرين محاولة البحث عن حل قبل أن أطرح الحلول الممكنة لهذا   ,  :)  ليس لأن يصلوا إلى Regural expressions ولكن يمكن أن يأتونا بأفكار بإستخدام ما تقدم شرحه من مبادئ اللغة مع بعض البحث عن بعض الدوال المساعدة للقيام بهذه المهمة و سيأتي لاحقاً بإذن الله الحديث عن التعابير النظامية والتعامل مع السلاسل النصية

 

وعذراً على  هذا , سأعدل الموضوع وأضيف بعض التمارين المرتبطة بما جاء في الدرس

تم تعديل بواسطه ahmedsaoud31
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بارك الله فيك أخي احمد , في انتظار الدرس القادم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

درس رائع أخي الكريم

سأراجعه مرة آخرى ومعي الحل ..

ولكن الدرس السابق طويل نوعاً ما لذلك سأراجعه فيما بعد

 

تحياتي  ^_^

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بارك الله فيك أخي احمد , في انتظار الدرس القادم

بارك الله فيك على مرورك الكريم أخي عبد اللطيف , الدرس القادم عليك أنت :)

 

درس رائع أخي الكريم

سأراجعه مرة آخرى ومعي الحل ..

ولكن الدرس السابق طويل نوعاً ما لذلك سأراجعه فيما بعد

بارك الله أخي علي

ونأسف على طول الدروس في هذه الدروة

همتك معانا إحتمال تلاقي كمان كام درس في الأيام القادمة , وإحتمال يكونوا بنفس الطول أو زيادة , أسف إستحملنا إعتبرها دورة مكثفة

في إنتظار مشاركاتك الجميلة

تم تعديل بواسطه ahmedsaoud31
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تفضل  أخي الكريم

هذا هو تمريني

 

وسأحاول حل التمارين الآخرى

 

تحياتي  ^_^

 

 

example.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

من التمارين المتقدمة إستطعت عمل دالة تقرر إذا كان البريد الإلكتروني صحيحاً أم لا  ^_^

 

مع وجود أخطاء

<?phpfunction is_email($string){$array = explode('@', $string);$array2 = explode('.', $string);if (count($array2)!=1){$email = 1;}else{$email = 0;}if (count($array)!=1){$email2 = 1;}else{$email2 = 0;}if($email+$email2==2){echo "this is e-mail";}else{echo "this is not e-mail";}}is_email("[email protected]");?>

 

تحياتي  ^_^ 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

 

عذراً عزيزي علي فلم أتمكن من مشاهدة الكود الأول لعدم وجودي على جهازي حالياً , فلا أمتلك مترجم ولا أي أدوات حالياً

من التمارين المتقدمة إستطعت عمل دالة تقرر إذا كان البريد الإلكتروني صحيحاً أم لا  happy.png

حقيقاً حل أعجبني حلك بإستخدامك دالة   explode :)

 

بعض الدوال ستساعد في تحقيق أكثر للبريد الإلكتروني

strlen هي دالة حساب عدد عناصر السلسة النصية

وبهذا يمكن الدوران على عناصر السلسة النصية بإستخادم أي من حلقات الدوران

ord  تعيد قيمة الرمز في جدول الـ  ASCII

بالإضافة لإستخادم دالتي explode و implode في التحويل من السلسة النصية لمصفوفة أو العكس كما فعلت أنت .

 

بعض صفات البريد الإلكترني :

- لا يبدأ برقم

- لا يحتوي في الغالب إلا على الأرقام والحرف الإنجليزية الكبيرة والصغيرة والعلامات _ و - و .  تقريباً لأنها تختلف من بريد لأخر

- يمكن أن يحتوي على أكثر من نقطة . بعد علامة @ إذا كان النطاق مكون من أكثر من جزء

- يحتوي على علامة @ مرة واحدة فقط

- يكون اسم البريد قبل علامة  @ محدد بطول أدنى وطول أقصى في حالة التسجيل وتختلف من موقع لأخر

 

وإذا كان التحقق يكون لأي بريد إلكتروني بشكل عام يجب أخذ هذه الإختلافات في الإعتبار

 

تحياتي لك على مشاركاتك الرائعة

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

 

عذراً عزيزي علي فلم أتمكن من مشاهدة الكود الأول لعدم وجودي على جهازي حالياً , فلا أمتلك مترجم ولا أي أدوات حالياً

حقيقاً حل أعجبني حلك بإستخدامك دالة   explode :)

 

بعض الدوال ستساعد في تحقيق أكثر للبريد الإلكتروني

strlen هي دالة حساب عدد عناصر السلسة النصية

وبهذا يمكن الدوران على عناصر السلسة النصية بإستخادم أي من حلقات الدوران

ord  تعيد قيمة الرمز في جدول الـ  ASCII

بالإضافة لإستخادم دالتي explode و implode في التحويل من السلسة النصية لمصفوفة أو العكس كما فعلت أنت .

 

بعض صفات البريد الإلكترني :

- لا يبدأ برقم

- لا يحتوي في الغالب إلا على الأرقام والحرف الإنجليزية الكبيرة والصغيرة والعلامات _ و - و .  تقريباً لأنها تختلف من بريد لأخر

- يمكن أن يحتوي على أكثر من نقطة . بعد علامة @ إذا كان النطاق مكون من أكثر من جزء

- يحتوي على علامة @ مرة واحدة فقط

- يكون اسم البريد قبل علامة  @ محدد بطول أدنى وطول أقصى في حالة التسجيل وتختلف من موقع لأخر

 

وإذا كان التحقق يكون لأي بريد إلكتروني بشكل عام يجب أخذ هذه الإختلافات في الإعتبار

 

تحياتي لك على مشاركاتك الرائعة

 

شكراً على النصائح أخي الكريم سأحاول إعادة عمل الكود مرة آخرى

 

تحياتي  ^_^

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يعطيك العافية اخي

وهذه بعض الحلول

الاول :

page1.php

<?php
echo '<center></br><a href="page2.php?id=1&name=Mohamed&username=HaCkEr-NiNjA&password=123456&[email protected]">Click here</a></center>';
?>

 

page2.php

<?php
$id = $_GET['id'];
$name = $_GET['name'];
$username = $_GET['username'];
$password = $_GET['password'];
$email = $_GET['email'];
echo $id.'</br>'.$name.'</br>'.$username.'</br>'.$password.'</br>'.$email;
?>

 

الثاني :

 

انا لم استطع وضع مربع موافقة لذلك قمت بوضع شرط وهو كتابة العبارة "I agree"

 

regester.php

<?php
echo '
<form action="information.php" method="get">
name  :<input type="text" name="name"></br>
id    :<input type="text" name="id"></br>
phone :<input type="text" name="phone"></br>
email : <input type="text" name="email"></br>
if you agree write (I agree) <input type="text" name="agree" value="i_agree"></br>
<input type="submit" value="ok"><input type="reset" value="del">
</form>
';
?>

 

information.php

<?php
if(!$agree or $agree!='I agree')
{
echo 'You did not write the words -I agree- or made ​​a mistake in writing';
}else if($agree=='I agree'){
echo '<font color="red" size="5"><p>your information:</p></font>'.$name.'</br>'.$id.'</br>'.$phone.'</br>'.$email;
}
?>

 

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

 

أسف أخي علي على التأخر في مشاهدة الملف الذي قمت بإرساله

 

الحل صحيح 100% عطاك الله العافية

 

ملاحظة : لا يتم طباعة المتغيرات الموجودة في الرابط عند الضغط عليه سواء قمنا بالموافقة على الشروط أم لا وذلك بسبب أن عناصر النموذج لا يتم إرسالها لصفحة المعالجة

إلا إذا تم الضغط على زر الإرسال وهو من النوع submit - أو من خلال لغة javaScript - , وأيضاً اللغة العربية لم تظهر عندي بشكل جيد بسبب عدم تعريف ترميز الوثيقة وإتجاه اللغة أيضاً كما تقدم شرحه في الدروس السابقة

 

 

مرحباً بك أخي محمد HaCkEr-NiNjA  , وتسعدنا مشاركتك معنا

 

- حل جيد أخي الكريم ولكن بعض التغييرات ستسبب أخطاء في الكود الأول جرب أن تغير اسم أحد المتغيرات أو تحذفه من الرابط ستجد صفحة المعالجة تصدر خطأ عدم التعرف على المتغير ولتجنب هذا الخطأ إستخدم دالة

isset للتعرف على وجود المتغير أم لا قبل طباعتة لتجنب مثل هذه الأخطاء -وقد تقدم شرح هذه الدالة في الدروس السابقة-

 

- بالنسبة للتمرين الثاني فأنت استخدمت طريقة الإرسالة GET لإرسال البيانات عبر  النموذج ولم تقم بإستقبال المتغيرات عن طريق $_GET في ملف المعالجة , وقمت بطباعة متغيرات غير معرفة .

 

- بالنسبة لوضع مربع الموافقة هو عبارة عن عنصر عادي من عناصر النموذج ولكن نوعه الـ type هو checkbox ويكون بالشكل التالي :

<input type="checkbox" name="Accept">

- كيف لي أن أعلم أن المستخدم وضع وافق على الشروط ؟

* في حالة وضع علامة صح في المربع فهذا يعني أن مربع الإختيار معرف بالنسبة لملف المعالجة , وإذا لم يتم وضع علامة صح في مربع الإختيار لا يكون هذا الحقل معرف لملف المعالجة , ونحن نعلم أن بيانات حقول النموذج يتم الوصول إليها من خلال خاصية الاسم name .

 

مثال :

- فرضاً لدي عنصر مربع إختيار ونوع الإرسال للنموذج هو POST كالتالي :

<form action="submit.php" method="POST">    <input type="checkbox" name="Accept">    <input type="submit"></form>

- داخل ملف المعالجة وهو submit.php سيتم جلب بيانات النموذج من خلال المصفوفة $_POST فداخل هذه المصفوفة توجد القيم التي تم إرسالها من النموذج للوصول للقيم المعرفة داخل هذه المصفوفة يتم من خلال اسماء حقول أو عناصر النموذج

 

- إذاً للوصول لحقل مربع الإختيار يكون هكذا $_POST['Accept']; هذه القيمة ستكون معرفة فقط إذا كان المربع قد تم وضع علامة صح به لهذا سنستخدم الدالة isset لمعرفة ما إذا كان معرف أم لا

isset($_POST['Accept']) هذه الدالة ستعيد القيمة الصحيحة true في حالة تم وضع العلامة صح في المربع وتعيد القيمة الخطأ false إذا كان المربع فارغ .

 

- راجع الحل الذي قدمه أخي علي ستجده استخدم هذه الطريقة ولكن كانت طريقة الإرسال عبر النموذج هي GET فالأمر شبه واحد .

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله خيرا اخي ahmedsaoud3i

   
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله خيراً أخي أحمد ... درس هام ورائع بالفعل ...

 

هذا هو حلي للتمرين الأول :

الملف page1 :

<html><body><a href="page2.php?a=1&b=2&c=3&d=4&e=5">Press ME :)</a></body></html>

 

والصفحة page2 :

<?phpforeach($_GET as $name=>$value){echo "$name is $value \n<br>";}?>

 

وهذا هو حلي للتمرين الثاني : homeworkFORMS.rar

بارك الله فيك وجزاك كل خير

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

 

كيف الحال مصطفى وشاكر لك على إرفاق الحل وطالما أنك هنا نناقش بعض الأمور سوياً

 

الدالة $_GET تقوم بجلب المتغيرات من الرابط و $_MOSTAFA سنجعلها تقوم بجلب المتغيرات من الرابط :D .

 

فرضاً أنك تريد إنشاء رابط بشكل معين غير الشكل الإفتراضي , بمعنى رابط على مزاجك ;) سنستخدم المتغير $_SERVER وهو متغير يجلب لنا الكثير من البيانات حول الخادم الذي نستخدمه .

 

نحن ما نحتاجه من الرابط لتنفيذ ما نريد حالياً هو رابط الصفحة الحالية وما بعدها من قيم إذاً سنستخدم $_SERVER["REQUEST_URI"] .

جرب الكود التالي :

<?phpecho $_SERVER["REQUEST_URI"];?>

ملاحظة : لازلنا لا نستطيع الإستغناء عن علامة بعد اسم الصفحة وإلا سيحث أخطاء جمة ولإزالة هذه العلامة يلزمنا بعض التعامل مع ملف htaccess. دعنا منه حالياً .

 

إذا بعد اسم الصفحة سنضع علامة ? ثم بعد ذلك المتغيرات وقيمها بالشكل الذي تريده أنت , فلنفرض أننا نريد إستخدام العلامة | فقط مثلاً في الرابط , هيا بنا ننفذ هذا الأمر كالتالي :

<?php$_MOSTAFA = array();$linkVars = explode('?',$_SERVER["REQUEST_URI"]);$linkVars = end($linkVars);$linkVars = explode('|',$linkVars);for($i=0;$i<count($linkVars);$i=$i+2){    if(isset($linkVars[$i+1]))    {        $_MOSTAFA[$linkVars[$i]] = $linkVars[$i+1];    }}?>

1- تعريف متغير عام .

2- جلب قيمة الرابط وفصلها لمصفوفة على إعتبار الرمز ؟

3-  قيمة أخر عنصر من المصفوفة وبه ما نريد بإستخدام دالة end

4- تحويل المتغيرات والقيم إلى مصفوفة على حسب الرمز الذي نختاره ويمكنك إستخدام أكثر من رمز كما هو الحال في الدالة الإفتراضية $_GET فهي تستخدم رمز المساواة = ورمز & لفصل القيم

5- المرور على قيم المصفوفة لإنشاء المصفوفة النهائية التي تحتوي على المتغيرات وقيمها

 

- وبهذا أنشأنا المتغير العام $_MOSTAFA :P

 

وعلى هذا سيكون المثال الأخير الذي قدمه مصطفى على النحو التالي :

<html><body><a href="page2.php?a|1|b|2|c|3|d|4|e|5">Press ME :)</a></body></html>

وصفحة العرض :

<?php$_MOSTAFA = array();$linkVars = explode('?',$_SERVER["REQUEST_URI"]);$linkVars = end($linkVars);$linkVars = explode('|',$linkVars);for($i=0;$i<count($linkVars);$i=$i+2){    if(isset($linkVars[$i+1]))    {        $_MOSTAFA[$linkVars[$i]] = $linkVars[$i+1];    }}foreach($_MOSTAFA as $name=>$value){    echo "$name is $value \n<br>";}?>

أتمنى أن ينال المتغير $_MOSTAFA  إعجابك يا مصطفى :)

 

دمتم في أمان الله

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله خيرا

وللأمام يا رب

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله خيرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخي ahmedsaoud31 يمنك الإستغناء عن الدالة $_SERVER لأن أي شيء بعد علامة الإستفهام يخزن في $_GET كمفتاح بدون قيمة  و سيصبح الكود أقصر و أسرع

مثال

<?php$_MOSTAFA = array();$linkVars = key($_get);$linkVars = explode('|',$linkVars);for($i=0;$i<count($linkVars);$i=$i+2){    if(isset($linkVars[$i+1]))    {        $_MOSTAFA[$linkVars[$i]] = $linkVars[$i+1];    }}foreach($_MOSTAFA as $name=>$value){    echo "$name is $value \n<br>";}?>
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

 

لمحة جميلة منك أخي عبدالقادر :) , ولكن المصفوفة $_GET تعتمد على تقسم السلسة النصة على العلامة & ثم إلى قيمة ومفتاح على العلامة = فإذا إحتوى الرابط بعد علامة ؟ على العلامة & سيتسبب هذا في عدم قراءه المتغيرات كاملة إذا إستخدمنا الطريقة السابقة .

 

دمت بود

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .