هذا موضوع حول الخيارات المتعددة. وقد عانيت كثيرا حتى وصلت إلى الحل.
لأن تحديد خيار واحد أمر سهل؛ فمثلا لو عرضت أمامك قائمة بأسماء المدن؛ لتحديد واحدة منها فإن البرمجة سهلة:
حيث تعطي لكل مدينة قيمة ، ثم تطبع هذه القيمة.
لكن لو كانت هناك قائمة فيها عدة خيارات : مثلا حدد المدن التي زرتها!
فلو أعطيت لكل مدينة قيمة فإن البرنامج سيطبع آخر قيمة مختارة؛ لأنه باختصار سيحدد القيمة الأولى، ثم يكتب عليها للثانية، ثم يكتب على الثانية من أجل الثالثة وهكذا... ثم يطبع آخر نتيحة
وإليك الأسس العامة للخيارات المتعددة، وبعد ذلك يمكنك تطويع هذه الأسس لتوافق برنامجك.
أولا : //* تحديد الاتجاه من اليمين إلى اليسار
كود:
echo " <html dir='rtl'>
ثانيًا :
المعلومات المراد عرضها. يمكنك استدعاء معلومات من قاعدة البيانات، أو من ملف نصي، أو من متغير.
في هذا التطبيق طبقت على ( المتغير ).
كود:
$city = "مكة المكرمة، المدينة النبوية، الرياض، جدة، الدمام، جلاجل، ليلى، أبها، تبوك";
ثالثًا :
نحسب عدد الفواصل في المتغير السابق؛ لكي نستطيع فصل مدينة عن الأخرى.
يمكنك وضع أي علامة للفصل كـ ( - )، أو ( * )، أو ( @ ) وهلم جرا
كود:
$number = substr_count($city, "،");
رابعًا :
نفرق البيانات حسب وجود الفواصل ثم نجعل هذه البيانات في متغير اسمه $data
كود:
$data = explode ("،",$city);
حلقة تكرار للمعلومات المراد عرضها
المتغير $number هو السابق ذكره في أول البرنامج لحساب عدد الفواصل
كود:
for ($i=0; $i<$number; $i++) {
خامسًا :
1 - نحدد نوع الأنموذج، والملف المستقبل للمعلومات. وضعت اسما للأنموذج (name='city') وهذا //ليس بلازم؛ ولكني من أجل تسهيل قراءة النماذج
2 - حدد خيار الإدخال بأنه خانة اختيار (checkbox). هناك عدة خيارات منها النقطة (radio) والفرق //بينهما أن (checkbox) تتيح لك خيارات متعددة في الوقت نفسه؛ بينما لا تتيح لك (radio) سوى //اختيار واحد
3 - سبق أن طلبنا حلقة تكرار، بحيث يطبع أسماء المدن بعددها في المتغير الأصلي $city الذي //فصلناه عن طريق ( الفاصلة) بالمتغير $data
4 - وضعت اسم المتغير للاختيارات myboxes[] فارغا لكي يتحمل عدة خيارات، ولا يكون خاصا //بخيار معين. ثم أعطيته قيمة اسم المدنية ($data[$i]).
كود:
echo "
<form name='city' method='POST' action='$CODE_SELF' >
<input type='checkbox' name='myboxes[]' value='$data[$i]' > $data[$i]<br>
";
سادسًا :
إغلاق حلقة التكرار
سابعًا :
طباعة أمر الإرسال، ثم إغلاق الأنموذج
كود:
echo "
<input type='submit' name='Submit' value='أرسل'>
</form>
";
ثامنًا :
طباعة نتائج الاختيار، وضعتها هنا كي لا يطبع البرنامج الخيارات والنتائج، فهو هنا سيطبع //النتائج، ثم يتوقف.
إذا كان الأنموذج الذي فيه الخيارات بنمط (POST) فإننا نطبع النتائج. هناك نوعان من الأنماط للأنموذج : (POST)، و (GET).
كود:
if ($REQUEST_METHOD=="POST") {
تاسعًا :
في الأنموذج وضعنا متغيرا باسم $myboxes ، وهنا نحسب عدد الخانات المختارة التي وضعت في هذا المتغير.
كود:
$num=count($myboxes);
عاشرًا:
بما أن الأنموذج يشتمل على عدة خيارات فلا بد من عمل حلقة تكرار لعرض الخيارات كلها، يمكن عمل حلقة التكرار بطريقة أخرى ... while
كود:
for ($i=0; $i<$num; $i++) {
حادي عشر :
إذا خترت ثلاث مدن مثلا، فإن المتغير $myboxes سيتحمل ثلاث قيم، لهذا نضع متغيرا جديدا //للطباعة اسمه $print_city ، وهذا المتغير يزداد قيمة بعدد القيم التي في المتغير $myboxed ، فإذا اخترت خمس مدن يزداد خمس مرات؛ لكي يعرض النتيجة كاملة
المتغير $i يرمز إلى القيمة المختارة، ولهذا يكرر الطباعة إلى أن تتوقف قيمة المتغيرات في //$myboxes، فلو اخترت ثلاث مدن مثلا : فسيطبع :
كود:
$myboxes[الرياض]-
$myboxes[جدة]-
$myboxes[الدمام]-
وهكذا
كود:
$print_city .= "$myboxes[$i]-";
ثاني عشر :
إنهاء حلقة التكرار السابقة
ثالث عشر:
طباعة النتيجة
كود:
<br>
لقد اخترت المدن التالية
<br>
$print_city
";
رابع عشر :
طباعة أمر التوجيه للصفحة الرئيسة
كود:
echo "
<br>
<a href='$CODE_SELF'> البداية</a>
";
خامس عشر :
إنهاء البرنامج ؛ لكي لا ينفذ الأوامر التالية
[CODE]
exit ();
[CODE]
سادس عشر :
إغلاق قوس : if ($REQUEST_METHOD=="POST")
إعادة تركيب البرنامج :
كود:
<?php
/*---------------------------------------------------------------------
/
/ تطبيق عملي لإظهار عدة خيارات
/ إعداد عبد الرحمن
/ ababab90@yahoo.com
/ http:///www.toarab.ws
/
/----------------------------------------------------------------------
*/
//* تحديد الاتجاه من اليمين إلى اليسار
echo " <html dir='rtl'>
<center><h1>تطبيق عملي للخيارات المتعددة<br>، إعداد الفقير إلى عفو ربه : عبد الرحمن
<br><br>
";
// المعلومات المراد عرضها. يمكنك استدعاء معلومات من قاعدة البيانات، أو من ملف نصي، أو من متغير.
//في هذا التطبيق طبقت على ( المتغير ).
$city = "مكة المكرمة، المدينة النبوية، الرياض، جدة، الدمام، جلاجل، ليلى، أبها، تبوك";
// نحسب عدد الفواصل في المتغير السابق؛ لكي نستطيع فصل مدينة عن الأخرى.
// يمكنك وضع أي علامة للفصل كـ ( - )، أو ( * )، أو ( @ ) وهلم جرا
$number = substr_count($city, "،");
// نفرق البيانات حسب وجود الفواصل ثم نجعل هذه البيانات في متغير اسمه $data
$data = explode ("،",$city);
// طباعة نتائج الاختيار، وضعتها هنا كي لا يطبع البرنامج الخيارات والنتائج، فهو هنا سيطبع //النتائج، ثم يتوقف.
// إذا كان الأنموذج الذي فيه الخيارات بنمط (POST) فإننا نطبع النتائج. هناك نوعان من الأنماط للأنموذج //: (POST)، و (GET).
if ($REQUEST_METHOD=="POST") {
// في الأنموذج وضعنا متغيرا باسم $myboxes ، وهنا نحسب عدد الخانات المختارة التي وضعت في هذا // المتغير.
$num=count($myboxes);
// بما أن الأنموذج يشتمل على عدة خيارات فلا بد من عمل حلقة تكرار لعرض الخيارات كلها، يمكن عمل //حلقة التكرار بطريقة أخرى ... while
for ($i=0; $i<$num; $i++) {
//إذا خترت ثلاث مدن مثلا، فإن المتغير $myboxes سيتحمل ثلاث قيم، لهذا نضع متغيرا جديدا //للطباعة اسمه $print_city ، وهذا المتغير يزداد قيمة بعدد القيم التي في المتغير $myboxed ، فإذا //اخترت خمس مدن يزداد خمس مرات؛ لكي يعرض النتيجة كاملة
//المتغير $i يرمز إلى القيمة المختارة، ولهذا يكرر الطباعة إلى أن تتوقف قيمة المتغيرات في //$myboxes، فلو اخترت ثلاث مدن مثلا : فسيطبع :
//$myboxes[الرياض]-
//$myboxes[جدة]-
//$myboxes[الدمام]-
//وهكذا
$print_city .= "$myboxes[$i]-";
} // إنهاء حلقة التكرار السابقة
// طباعة النتيجة
echo "
<br>
لقد اخترت المدن التالية
<br>
$print_city
";
// طباعة أمر التوجيه للصفحة الرئيسة
echo "
<br>
<a href='$PHP_SELF'> البداية</a>
";
// إنهاء البرنامج ؛ لكي لا ينفذ الأوامر التالية
exit ();
} //إغلاق قوس : if ($REQUEST_METHOD=="POST") {
// حلقة تكرار للمعلومات المراد عرضها
// المتغير $number هو السابق ذكره في أول البرنامج لحساب عدد الفواصل
for ($i=0; $i<$number; $i++) {
// 1 - نحدد نوع الأنموذج، والملف المستقبل للمعلومات. وضعت اسما للأنموذج (name='city') وهذا //ليس بلازم؛ ولكني من أجل تسهيل قراءة النماذج
// 2 - حدد خيار الإدخال بأنه خانة اختيار (checkbox). هناك عدة خيارات منها النقطة (radio) والفرق //بينهما أن (checkbox) تتيح لك خيارات متعددة في الوقت نفسه؛ بينما لا تتيح لك (radio) سوى //اختيار واحد
// 3 - سبق أن طلبنا حلقة تكرار، بحيث يطبع أسماء المدن بعددها في المتغير الأصلي $city الذي //فصلناه عن طريق ( الفاصلة) بالمتغير $data
// 4 - وضعت اسم المتغير للاختيارات myboxes[] فارغا لكي يتحمل عدة خيارات، ولا يكون خاصا //بخيار معين. ثم أعطيته قيمة اسم المدنية ($data[$i]).
echo "
<form name='city' method='POST' action='$PHP_SELF' >
<input type='checkbox' name='myboxes[]' value='$data[$i]' > $data[$i]<br>
";
} // إغلاق حلقة التكرار
// طباعة أمر الإرسال، ثم إغلاق الأنموذج
echo "
<input type='submit' name='Submit' value='أرسل'>
</form>
";
?>
لتجربة البرنامج :
http://www.toarab.ws/scripts/checkbox.php
لتحميل الملف :