السلام عليكم ورحمة الله وبركاته .........
كل الذين يعملون في مجال البرمجة يعرفون ما معنى المصفوفة :
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