مصفوفة ادوات HTML و PHP

ASP, PHP, JavaScript, JSP, ... etc
قوانين المنتدى
صورة العضو الشخصية
Dr.Pain
Creative
Creative
مشاركات: 307
اشترك في: السبت نوفمبر 19, 2005 12:58 pm
مكان: كنت في عــــــــــــدن الحبيبة على قلبي ^_^

مصفوفة ادوات HTML و PHP

مشاركةبواسطة Dr.Pain » الثلاثاء فبراير 28, 2006 10:23 am

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


كل الذين يعملون في مجال البرمجة يعرفون ما معنى المصفوفة :

كود: تحديد الكل

int x[10] ;
x[6]=300  ;
cout<<x[6]

Dim ar(10) As String
ar(6) = 300
MsgBox ar(6)


ولكن دعني اعرفك على نوع جديد من المصفوفات الا وهو مصفوفة الادوات وبالذات مصفوفة أدوات HTML , وبالامكان تعريف مصفوفة ادوات HTML بانها عبارة عن مجموعه من ادوات HTML التي تحمل نفس الاسم .

فلو فرضنا انه لدينا صندوقي نص واردنا ان نحولهما الى مصفوفة فان طريقة تحويلهما الى مصفوفة تكون بإعطائهما نفس الاسم مع اتباع الاسم بالقوسين [] :

كود: تحديد الكل

<INPUT TYPE='text' NAME='TextArray[]'>
<INPUT TYPE='text' NAME='TextArray[]'>


هل لاحظت ماذا تحمل الخاصية NAME , نعم انها تحمل القيمة TextArray متبوعه بالقوسين [] .

اذن الان وبكل بساطة اصبحت لدي مصفوفة ادوات وللتعرف اكثر على طريقة التعامل مع تلك المصفوفة دعنا نقوم ببناء مستند PHP يحمل الاسم Index.php والذي يحتوي على ثلاثة صناديق نص على شكل مصفوفة وكذا زر Submit :


كود: تحديد الكل

<?php

echo "

<FORM METHOD='POST' ACTION=''>
<INPUT TYPE='text' NAME='TextArray[]'>
<INPUT TYPE='text' NAME='TextArray[]'>
<INPUT TYPE='text' NAME='TextArray[]'>
<INPUT TYPE='submit' value=' Send Control Array'>
</FORM>
";

?>


قم باستعراض الملف السابق ستلاحظ انك تحصلت على ثلاتة صناديق نص وزر يقوم بارسال بيانات صناديق النصوص .

والان وقبل بكتابة الكود اللازم لاستقبال قيم تلك المصفوفة دعنى نفصل العملية نظريا !!!!!

ان الذي سيحصل ان قيم صناديق النص سوف ترسل الى المخدم على شكل مصفوفة تحمل الاسم TextArray بحيث ان :

كود: تحديد الكل

TextArray[0]


يمثل قيمة صندوق النص الاول .

كود: تحديد الكل

TextArray[1]


يمثل قيمة صندوق النص الثاني ......... وهكذا .

والشئ الذي سيجعلنا نتعامل مع هذه المصفوفة هو استقبال المصمفوفة من خلال ال :

كود: تحديد الكل

$_POST[Array name][index]


اذن لاستقبال عناصر المصفوفة المسماة TextArray فاننا سوف نكتب شيئا مماثلا للاتي :


كود: تحديد الكل

echo $_POST[TextArray][0]."<br>";
echo $_POST[TextArray][1]."<br>";
echo $_POST[TextArray][2];


وذلك لان اول عنصر في المصفوفة يحمل ال Index صفر ..!!

اذن كا ما قمنا به هو استقبال المصفوفة عن طريق ال POST مع تمرير اسم المصفوفة ومن ثم رقم العنصر داخل المصفوفة TextArray .....

قم باستعراض الملف وقم بكتابة اي شي داخل صناديق النص ومن ثم قم بالضغط على زر الارسال .

رائعا اليس كذلك ..

نعم ان ذلك كان رائعا لكنني اظن انا شكل الكود معقد قليلا لذا دعنى نبسط الكود قليلا وذلك من خلال استقبال مصفوفة الادوات الى داخل متغير مصفوفة ومن ثم سنتعامل مع ذلك المتغير بدلا من ال POST :

كود: تحديد الكل

$Arr = $_POST[TextArray] ;
echo $Arr[0]."<br>";
echo $Arr[1]."<br>";
echo $Arr[2];


اعتقد ان شكل الكود اصبح ابسط الان ...


المزيد ايضا ...

بالامكان الحصول على طول المصفوفة بواسطة الداله sizeof :

كود: تحديد الكل

sizeof(ArrayName)


والان يمكننا استخراج طول المصفوفة TextArray بواسطة كتابة شيئا كهذا :

كود: تحديد الكل

echo sizeof($_POST[TextArray]);


وكذلك يمكننا الدوران على عناصر المصفوفة بالشكل الاتي :

كود: تحديد الكل

for($i = 0 ; $i < sizeof($_POST[TextArray]) ; $i++)

{
   echo "<h1>".$_POST[TextArray][$i]."</h1>";
}


في العادة ان اردنا ان نتاكد من ان المتغير يحمل قيمة فاننا نستخدم الدالة isset فلو كان لدينا المتغير a واردنا ان نتاكد من انه يحمل قيمة فاننا سوف نكتب شيئا كالاتي :

كود: تحديد الكل

$a ;

if(isset($a))
{
echo "a has a vlaue";
}
else
{
echo "a hasn't a value";
}



في هذه الحالة نلاحظ ان a لا يحمل قيمة لذا فاننا سوف نتحصل على الرسالة a hasn't a value ولكن ان اعطينا a قيمة كالاتي :


كود: تحديد الكل

$a =100;

if(isset($a))
{
echo "a has a vlaue";
}
else
{
echo "a hasn't a value";
}



فاننا سوف نتحصل على الرسالة a has a value .

بالمثل فانه بالامكان التاكد من ان العنصر داخل المصفوفة يحمل قيمة او لا اثناء عملية الدوران كالاتي :

كود: تحديد الكل

for($i = 0 ; $i < sizeof($_POST[TextArray]) ; $i++)

{

   if(isset($_POST[TextArray][$i]))
      {
         echo "<H1>".$_POST[TextArray][$i]."</h1>";
      }
}



كما قلنا سابقا ان اسم مصفوفة الادوات هو TextArray واننا لو اردنا قراءة قيمة العنصر الاول فاننا سوف نكتب شيئا كالاتي :

كود: تحديد الكل

TextArray[0]


فاذا كانت القيمة التي يحملها العنصر رقم صفر او اي عنصر اخر عبارة عن قيمة نصية String فانه بالامكان الوصول الى عناصر تلك القيمة النصية بذكر رقم ال Indexالخاص بها .

فلو فرضنا ان العنصر رقم صفر يحمل القيمة Green فانه بالامكان الوصول الى احد حروف القيمة Green بواسطة ذكر رقم ال Index الخاص بالحرف .

فاذا اردنا الوصول الى الحرف G فاننا سوف نكتب شيئا كالاتي :

كود: تحديد الكل

TextArray[0][0]


نظرا لان ال Index الخاص باول عنصر في المصفوفة TextArray هو صفر وكذا ال Index الخاص بالحرف G هو صفر .

وبما ان القيمة :

كود: تحديد الكل

TextArray[0][0]


تمثل قيمة نصية فانه بالامكان الحصول على طول تلك القيمة بواسطة الدالة strlen التي تقوم باحظار طول السلسلة الممرة لها كوسيط :

كود: تحديد الكل

echo strlen($_POST[TextArray][0]);


والان بما اننا حصلنا على طول السلسة فانه بالامكان القيام بعملية الدوران بكل سهولة :

كود: تحديد الكل

for($i = 0 ; $i < strlen($_POST[TextArray][0]) ; $i++)
{
echo "<h1>".$_POST[TextArray][0][$i];
}


والان بالامكان الدوران على كامل المصفوفة TextArray وكذا على قيم كل عنصر من عناصر المصفوفة :


كود: تحديد الكل

for($i = 0 ; $i < sizeof($_POST[TextArray]) ; $i++)

{
         
         echo "<H1>Element No : $i<br>Value :".$_POST[TextArray][$i]."<br>";
         echo "The elements of the element No $i is :<br>";
         for($j = 0 ; $j < strlen($_POST[TextArray][$i]) ; $j++)
            {
               echo $_POST[TextArray][$i][$j]."<br>";
            }
         echo "<hr>";
}



لاحظ انني لم اقم باختبار القيم بواسطة الدالة isset وذلك من اجل تبسيط الكود فقط ليس الا .


حسنا ذلك كان بالنسبة لصناديق النص , ولكن ماذا عن ال CheckBox ؟؟؟!!!!!

حسنا اقول لك ان ما سبق ينطبق ايضا على ال CheckBox عدل المستند وذلك باضافة ال CheckBox التالية مع اعطائهم الاسمCheckBoxArray كالتالي :

كود: تحديد الكل

VB.Net<INPUT TYPE='checkbox' NAME='CheckBoxArray[]' value='VB.Net'>
ASP.Net<INPUT TYPE='checkbox' NAME='CheckBoxArray[]' value='ASP.Net'>
Flash MX<INPUT TYPE='checkbox' NAME='CheckBoxArray[]' value='Flash MX'>
SQL Server<INPUT TYPE='checkbox' NAME='CheckBoxArray[]' value='SQL Server'>


حيث اننا سوف نفترض هنا ان المستخدم سوف يقوم باختيار مجموعة الكتب التي يريدها ومن ثم سوف يقوم بارسالها .

بعد ان يقوم المستخدم بارسال الكتب التي قام بانتقائها فاننا سوف نتلقاها ومن ثم سوف نقوم بعرض ما قام المستخدم باختياره وذلك كالاتي :

كود: تحديد الكل

for($i = 0 ; $i < sizeof($_POST[CheckBoxArray]) ; $i++)
{
      echo $_POST[CheckBoxArray][$i];
}


لاحظ انني لم استخدم الداله isset وذلك لاختبار قيمة العنصر وذلك لان العناصر التي ثم اختيارها هي فقط التي سوف ترسل , وللتحقق من ذلك استخدم الدالة sizeof :


كود: تحديد الكل

echo sizeof($_POST[CheckBoxArray]);



وكذلك الحال بالنسبة لعنصر ال Select وهو في حالة ال ListBox والاختيار المتعدد :

كود: تحديد الكل

<SELECT NAME='ListBoxArray[]' size='3' MULTIPLE>
<option>Car</option>
<option>House</option>
<option>Education</option>
</SELECT>


هذا هو الكود اللازم لاظهر قيم ال LsitBox :

كود: تحديد الكل

for($i = 0 ; $i < sizeof($_POST[ListBoxArray]) ; $i++)
{
      echo $_POST[ListBoxArray][$i];
      
}


كلنا نعرف ان لغة PHP مرنة للغاية بحيث اننا نستطيع ان نقوم بتعريف مصفوفة تحمل في طياتها انواع مختلفة من البيانات كالتالي :

كود: تحديد الكل

$ar[0]=100;
$ar[1]="Dr.pain";
$ar[2]=10.2;

for($i = 0 ; $i < sizeof($ar) ; $i++)
{
echo "<h1>".$ar[$i];
}


هل لاحظت ان القيمة الاولى تحمل قيمة صحيحة والثانية نصية والثالثة كسرية .

مصفوفة الادوات بالمثل بحيث بالامكان ان تكون مكونات المصفوفة عبارة ازرار وصناديق نص وازرار اختيار وووووووووووو ... الخ .

الان دعنى نقوم ببناء مصفوفة من هذا النوع :

كود: تحديد الكل

 <FORM METHOD='POST' ACTION='index.php'>

SharedArray(Text Box)<INPUT TYPE='text' NAME='SharedArray[]'><br>
SharedArray(Check Box)<INPUT TYPE='checkbox' NAME='SharedArray[]' value='SharedArray(Check Box)'><br>
SharedArray(Radio)<INPUT TYPE='radio' NAME='SharedArray[]' value='SharedArray(Radio)'><BR>
SharedArray(TEXTAREA)<TEXTAREA NAME='SharedArray[]' ROWS='10' COLS='100'></TEXTAREA><BR>
SharedArray(Combo Box)<SELECT NAME='SharedArray[]'>
<Option>car
<Option>house
<Option>Building
</SELECT><BR>
SharedArray(List Box)<SELECT NAME='SharedArray[]' size='3' multiple>
<Option>Blue
<Option>Green
<Option>Red
</SELECT><BR><BR><BR>
SharedArray(Button)<INPUT TYPE='submit' value=' Send Control Array' NAME='SharedArray[]'>
</FORM>


عملية الدوران سوف تكون بالشكل التالي :

كود: تحديد الكل

for($i = 0 ; $i < sizeof($_POST[SharedArray]) ; $i++)
{
      echo "<h1>".$_POST[SharedArray][$i]."<br>";
      
}



ملاحظــــــــــــــــــــــــــه هامـــــــــــــــــــــــــة :

في حالتنا السابقة نلاحظ ان ال ListBox يحتوي على ثلاث قيم :

كود: تحديد الكل

SharedArray(List Box)<SELECT NAME='SharedArray[]' size='3' multiple>
<Option>Blue
<Option>Green
<Option>Red
</SELECT>


فما هي يا ترى الطريقة التي سوف تعامل بها هذه العناصر في مصفوفة النوع المتعدد ؟؟!!!!!

تلك العناصر تعامل على اساس انها عنصر مستقل بذاته داخل المصفوفة , فلو اخترت الثلاث القيم كلها مجتمعه فان كل عنصر سوف يعطى Index خاص به يميزه عن بقية العناصر وكانه عنصر مستقل بذاته .

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

اذا احتوت المصفوفة على ازرار Button فان قيمها لن ترسل , فقط قيم الازرار من النوع Submit هي التي ترسل وهذه ايضا لا ترسل كلها فقط الزر الذي قام بالارسال هو الذي ترسل قيمته .

الان دعنا نقوم بضرب مثال اخر نعرض من خلاله فائدة اخرى من فوائد مصفوفة الادوات !!!!

اذا قال لك احدهم قم بعمل زرين Submit بحيث انه لو انضغط الاول فانه يتم اخراج الكلمة Hello ولو انضغط الثاني فانه يتم اخراج الكلمة World !!

الحل ببساطة تقدمه مصفوفة الادوات وبشكل رائع , حسنا قم ببناء المستند بالشكل التالي :


كود: تحديد الكل

<?php

echo "

<FORM METHOD='POST' ACTION='index.php' name='frmControlArray'>
<INPUT TYPE='submit' Name='ShowTextArray[]' Value='Hello'>
<INPUT TYPE='submit' Name='ShowTextArray[]' Value='World'>
<INPUT TYPE='' Name='txtHelloWorld'>
</FORM>

";

switch(strtolower($_POST[ShowTextArray][0]))
{
case "hello":
   echo "Hello";
   break;
case "world":
   echo "World";
}

?>


والان لو اردنا اخراج الكلمة على صندوق النص فاننا سوف نطور المستند قليلا بحيث يحتوي على نص Java Script الخاص باسناد القيمة لصندوق النص وذلك كالتالي :


كود: تحديد الكل

<SCRIPT LANGUAGE='JavaScript'>
function SetText(Text)
   {
      frmControlArray.txtHelloWorld.value=Text ;
   }
</SCRIPT>


الدالة السابقة تاخذ وسيطا واحدا يمثل النص الذي سوف يتم اسناده لصندوق النص .

ومن ثم بعد بناء دالة Java Script فاننا سوف نقوم باختبار قيمة الازرار كالسابق ولكن هذه المرة سوف نقوم باسناد القيم الى صندوق النص وذلك عن طريق الدالة السابقة التي قمنا بكتابتها بواسطة Java Script :

كود: تحديد الكل

case "hello":
   echo "
<SCRIPT LANGUAGE='JavaScript'>
 SetText('Hello')
</SCRIPT>
   ";
   break;

   case "world":
   echo "
<SCRIPT LANGUAGE='JavaScript'>
 SetText('World')
</SCRIPT>
   ";
   break;


وبهذا يصبح شكل المستند النهائي كالتالي :

كود: تحديد الكل

<?php

echo "

<SCRIPT LANGUAGE='JavaScript'>
function SetText(Text)
   {
      frmControlArray.txtHelloWorld.value=Text ;
   }
</SCRIPT>

<FORM METHOD='POST' ACTION='index.php' name='frmControlArray'>
<INPUT TYPE='submit' Name='ShowTextArray[]' Value='Hello'>
<INPUT TYPE='submit' Name='ShowTextArray[]' Value='World'>
<INPUT TYPE='' Name='txtHelloWorld'>
</FORM>
";


switch(strtolower($_POST[ShowTextArray][0]))
{
case "hello":
   echo "
<SCRIPT LANGUAGE='JavaScript'>
 SetText('Hello')
</SCRIPT>
   ";
   break;

   case "world":
   echo "
<SCRIPT LANGUAGE='JavaScript'>
 SetText('World')
</SCRIPT>
   ";
   break;

}
?>


ملاحظــــــــــــــــــــــــــه هامـــــــــــــــــــــــــة :

خلال الدرس استخدمنا :

كود: تحديد الكل

$_POST[]


وذلك لاننا اخترنا ال POST كطريقة للارسال ولكن ان كانت طريقة الارسال هي Get فاننا سوف نستخدم :

كود: تحديد الكل

$_GET[]


انتهــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــى .......!!!!



اخوكم Dr.Pain
A cluster can keep an application available to users despite software failures !!

http://www.alwan.netfirms.com/4.swf

صورة العضو الشخصية
قلم^^رصاص
Creative
Creative
مشاركات: 340
اشترك في: الأربعاء يناير 04, 2006 1:00 am

مشاركةبواسطة قلم^^رصاص » الثلاثاء فبراير 28, 2006 12:39 pm

[align=center]بصراحة أخي نزار دائماً وكما عودتنا ممتع بمواضيعك وأسلوبك في طرحها رغم أنني كنت أعلم عن طريقة أستخدام مصفوفة الادوات لكن أسلوبك البرمجي السلس جعلني ٌأقف مذهولاً ومتمتعاً بقراءة ومعرفة وأكتساب بعض المهارات التي قمت بعرضها لنا متخللة موضوعك الرئيسي الا وهو مصفوفة الادواة فشكراً جزيلاً على كل ما تبذله أخي .


أخوك / قلم^^رصاص[/align]
Any programming language is at its best before it is implemented and used.
http://www.albihany.com
================================


صورة العضو الشخصية
نجيب المجيدي
Creative
Creative
مشاركات: 242
اشترك في: الأحد فبراير 05, 2006 4:21 pm

مشاركةبواسطة نجيب المجيدي » الخميس مارس 02, 2006 9:08 am

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

تسلم أخي نزار
و السلام عليكم ورحمة الله وبركاته

زائر

مشاركةبواسطة زائر » الخميس مايو 17, 2007 5:07 pm

تم تعديل الرد من قبل the shadow


العودة إلى “Web Programming”



الموجودون الآن

المستخدمون الذين يتصفحون المنتدى الآن: لا يوجد أعضاء مسجلين متصلين وزائر واحد