May 312013
 

بعد انقطاع طويل ها هي عودة جديدة لمواصلة المشوار، قد يكون الوقت محاكي لـ ” تجري الرياح بما لا تشتهي السفن ” لكن طالما هناك متسع فإن المسيرة مستمرة في طرح الدروس هنا بإذن الله.

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

Continue reading »

Mar 052012
 

درس بسيط لقطع حبل الانقطاع في الفترة المنصرمة 😀

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

Continue reading »

Nov 242011
 

ربما لم أضع الدروس بالترتيب الصحيح، إذ انه من المفترض أن يكون هذا الدرس من أوائل الدروس. يفترض الآن أن هناك العديد من الأمثلة في الدروس السابقة للعمليات.
هناك العديد من العمليات والتعابير في لغات البرمجة، وفي العادة تستخدم في العمليات الرياضية وفي الأوامر الشرطية. والجدول الآتي يوضح بعض هذه العمليات:

العملية الشرح مثال
+ تستخدم لعمليات الجمع 1+ 2
++ أضف 1 i++
تستخدم لعمليات الطرح 1 – 2
اطرح 1 i–
* تستخدم لعمليات الضرب 1 * 2
/ تستخدم لعمليات القِسمة 1 / 2
% تستخدم لعرض الباقي من عملية القسمة 1 % 2
التعابير
== للتساوي a == b
=! لا يساوي a != b
< و > تستخدم لعمليات المقارنة، أكبر أو أصغر من a > b
=< أو => أكبر أو يساوي / أصغر أو يساوي a >= b
|| أو“or” – أي يتحقق
أحد الشروط
a == b || c == d
&& و “and” – يجب أن
تتحقق كل الشروط
a == b && c == d

العمليات ليست معقدة وتم شرحها في دروس سابقة ومن الأمثلة السابقة:

sum = a + b;

هي عملية جمع، حاصل ناتج جمع المتغير a مع b، أو للطرح:

sub = a - b;

حاصل طرح a من b وهكذا ..

سيتم شرح الأوامر الشرطية في درس لاحق بإذن الله 🙂

Nov 162011
 

بما أن اوامر التكرار تشبه بعضها بعضًا بشكل كبير، في هذا الدرس سيتم شرحها لـ3 لغات برمجية مختلفة. للدروس السابقة يمكنك العودة للأقسام من القائمة الجانبية.

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

في Java, C و PHP، هناك 3 انواع من أوامر التكرار وهي:

  1. while
  2. do-while
  3. for

وتستخدم بالطريقة الآتية:

1. while

أولًا: تحديد متغير بقيمة أولية ولنفترض أنه i والقيمة الأولية هي 1.

ثانيًا: كتابة الكلمة المفتاحية while وبين قوسين كتابة “expression” أو تعبير رياضي من خلاله تحدد القيمة النهائية للتكرار، لنتفرض أننا نريد إيقاف التكرار عندما تبلغ قيمة i الرقم 10 مثلًا، فيمكن كتابة التعبير (i < 11) – اي المتغير أصغر من 11 أو (i <= 10) – أي المتغير اصغر أو يساوي 10.

ثالثًا: داخل كتلة التكرار “أي بين { و }” تضع ذات المتغير بشكل متزايد؛ مثلًا: i++ أو i= i+1 أو يمكن بطرق أخرى. عدم وضع التزايد قد يسبب حمل زائد على الذاكرة بالتالي إيقاف عمل البرنامج، وذلك يعتمد على المترجم.

2. do-while

أولًا: تحديد متغير بقيمة أولية ولنفترض أنه i والقيمة الأولية هي 1.

ثانيًا: كتابة الكلمة المفتاحية do ويتلوها قوسي الكتلة “أي { و }”.

ثالثًا: داخل كتلة التكرار “أي بين { و }” تضع ذات المتغير بشكل متزايد؛ مثلًا: i++ أو i= i+1 أو يمكن بطرق أخرى. عدم وضع التزايد قد يسبب حمل زائد على الذاكرة بالتالي إيقاف عمل البرنامج، وذلك يعتمد على المترجم.

رابعًا: كتابة الكلمة المفتاحية while وبين قوسين كتابة “expression” أو تعبير رياضي من خلاله تحدد القيمة النهائية للتكرار، لنتفرض أننا نريد إيقاف التكرار عندما تبلغ قيمة i الرقم 10 مثلًا، فيمكن كتابة التعبير (i < 11) – اي المتغير أصغر من 11 أو (i <= 10) – أي المتغير اصغر أو يساوي 10.

3. for

تلخص كافة الخطوات في while في سطر واحد ليكون كالتالي:

كلمة for المفتاحية وبين القوسين بالترتيب: نكتب قيمة المتغير الأولية ونضع “؛” (فاصلة منقوطة) وبعدها التعبير الرياضي (مثلا i<=10) ونضع “؛” وأخيرًا نضع امر التزايد ليكون مثلًا i++

 

الآن سأقوم بوضع الأمثلة لتصل المعلومة بشكل أفضل، أولًا: Java:

class testloop
{
public static void main(String[]args)
{
int i;

//type 1
i=1;
System.out.print("Type 1 (while): \n");
while(i <= 10)
{
System.out.print(i + "\n");
i++;
}

//type 2
i=1;
System.out.print("\nType 2 (do-while): \n");
do
{
System.out.print(i + "\n");
i++;
}
while(i <= 10);

//type 3
System.out.print("\nType 3 (for): \n");
for(i=1;i<=10;i++)
{
System.out.print(i + "\n");
}
}
}

ثانيًا: C:

#include <stdio.h>
main()
{
int i;

//type 1
i=1;
printf("Type 1 (while): \n");
while(i<=10)
{
printf("%d \n", i);
i++;
}

//type 2
i=1;
printf("\nType 2 (do-while): \n");
do
{
printf("%d \n", i);
i++;
}
while(i<=10);

//type 3
printf("\nType 3 (for): \n");
for(i=1;i<=10;i++)
{
printf("%d \n", i);
}

}

ثالثًا: PHP:

<?PHP
// Type 1
$i=1;
echo "type 1 (while):<br />\n";
while($i <= 10)
{
echo $i."<br />";
$i++;
}

// Type 2
$i=1;
echo "type 2 (do-while):<br />\n";
do
{
echo $i."<br />";
$i++;
}
while($i <= 10);

// Type 3
echo "type 3 (for):<br />\n";
for($i=1;$i<=10;$i++)
{
echo $i."<br />";
}
?>

هل توافقني على أنها متشابهة جدًا ؟ 😀

Nov 242010
 

الشكل المعتاد للمتغيرات:

<?PHP
 
$var1 = 'Hello,';
$var2 = '<br /?>';
echo $var1.$var2;
/*
سيعرض المتغير الأول والمتغير الثاني معًا، لاحظ أني قمت بتخزين وسم إنزال سطر جديد في المتغير الثاني 
بالتالي المتغير الأول سيقوم بعرض الكلمة المخزنه به، والمتغير الثالي سيقوم مباشرة بالنزول لسطر جديد
*/
 
$n1 = 5;
$n2 = 3;
 
echo $n1+n2; ## ناتج جمع المتغير الأول مع المتغير الثاني
echo "<br />"; سطر جديد
echo $n1*n2; ## ناتج ضرب المتغير الأول في المتغير الثاني
echo "<br />"; سطر جديد
 
?>

لننتقل الآن لطريقة كتابة المصفوفات في PHP وطريقة إستدعاءها.

مثال (1):

$email = array('test1@hct.me',
               'test2@hct.me',
               'test3@hct.me',
               'test4@hct.me');

مثال (2):

$email = array();
$email[] = 'test1@hct.me';
$email[] = 'test2@hct.me';
$email[] = 'test3@hct.me';
$email[] = 'test4@hct.me';

المثال (1) = المثال (2)
في المثالين أعلاه، لجلب متغير معين سنضطر لاستخدام فهرس (index)، الفهرس عبارة عن رقم يبدأ من الصفر وينهي بعدد الصفوف في المصفوفة – 1
على سبيل المثال، نريد عرض البريد الالكتروني “test3@hct.me” من أحد المصفوفات السابقات، طريقة العرض الصحيحة حسب الفهرسة أعلاه:

echo $email[2];

لعرض كافة المدخلات في أيًا من المصفوفات أعلاه:

<?php
foreach($email as $e)
{
 echo $e."<br />\n";
}
?>

لنتعمق أكثر في المصفوفات، مثال (3):

$email = array('Abdulaziz' => 'sp@hct.me',
               'Test2' => 'test2@hct.me',
               'Test3' => 'test3@hct.me',
               'Test4' => 'test4@hct.me');

مثال (4):

$email = array();
$email['Abdulaziz'] = 'sp@hct.me';
$email['Test2'] = 'test2@hct.me';
$email['Test3'] = 'test3@hct.me';
$email['Test4'] = 'test4@hct.me';

أيضًا المثال (3) = المثال (4)
ربما تعدد طرق الكتابة سيكون مفيدًا لك كمبرمج اكثر 🙂

لعرض محتوى مدخل وحيد من أي مصفوفة من المثال (3) أو المثال (4) يمكنك استخدام الطريقة الآتية لعرض “sp@hct.me” على سبيل المثال:

echo $email['Abdulaziz'];

لعرض كافة المدخلات من المصفوفة في المثال (3) أو المصفوفة في المثال (4):

<?php
foreach($email as $name => $e)
{
 echo $name.'<b>=></b>'.$e."<br />\n";
}
?>

مرة أخرى لنتعمق اكثر، مثال (5):

$setting = array(
                 'database' => array('host'   => 'localhost',
                                     'user'   => 'root',
                                     'pass'   => '',
                                     'dbnm'   => 'testdb',
                                     'prefix' => 'hct_'),
                 'site'     => array ('url'   => 'http://www.hct.me',
                                      'title' => 'HCT Community Forum'),
                 'upload'   => array ('types' => array('.jpg','.gif'),
                                      'msize' => '2048')
                 );

نلاحظ أنه تم إدخال مصفوفة فرعية ثم في المصفوفة الرئيسية

مثال (6):

$setting = array();
$setting['database'] = array();
$setting['database']['host'] = 'loacalhost'; 
$setting['database']['user'] = 'root';
$setting['database']['pass'] = '';
$setting['database']['dbnm'] = 'testdb';  
$setting['database']['prefix'] = 'hct_';     
$setting['site'] = array();     
$setting['site']['url'] = 'http://www.hct.me';    
$setting['site']['title'] = 'HCT Community Forum';  
$setting['upload'] = array();
$setting['upload']['types'] = array('.jpg','.gif'); 
$setting['upload']['msize'] = '2048';

في المثالين 5 و 6 لعرض اسم قاعدة البيانات نكتب الآتي:

echo $setting['database']['dbnm'];

لعرض كافة المدخلات في المثال (5) أو المثال (6):

<?php
foreach($setting as $type => $value)
{
 echo "<b>".$type.":</b><br />\n";
 foreach($value as $type2 => $value2)
  echo "\t".$type2.'<b>=></b>'.$value2."<br />\n";
}
?>
<?php
foreach($setting as $type => $value)
{
 echo "<b>".$type.":</b>
\n"; foreach($value as $type2 => $value2) echo "\t".$type2.'<b>=></b>'.$value2."<br />\n"; } ?>

الآن سأقوم بشرح المغزى من الدرس أعلاه :)، كمثال عند استخدامك لدالة معينة من صنعك، عليك بتعريف المتغيرات أما في الدالة نفسها بوضعها كمتغيرات تكتب عند استخدام الدالة كل مرة، مثال:

db_connect($host,$user,$pass,$db);

أو يمكنك تخزينها داخل الدالة على أن يتم جلبها من متغيرات خارجية، لكن لجلب متغير خارج الدالة واستخدامه داخل الدالة يجب استخدام global، مثال لدالة بسيطة (دالة بلا مغزى :D) :

$var1 = 'test'
 
function test_function()
{
 global $var1;
 return $var1;
}
 
echo test_function();

لنتفرض انك لا تود تكرار بيانات أو كتابة شفرة كبيرة للإتصال بقواعد البيانات، في ملف الإعدادات لديك الشفرة الآتية:

$database_host = 'localhost';
$database_user = 'root';
$database_pass = '';
$database_dbnm = 'testdb';
$database_prefix = 'hct_';

لعمل دالة الإتصال بشكل صحيح حسب بنية ملف الإعدادات الخاص بك:

function db_connect()
{
 global $database_host, $database_user, $database_pass, $database_dbnm;
 @mysql_pconnect($database_host,$database_user,$database_pass);
 @mysql_select_db($database_dbnm);
}

هل لاحظت اننا اضطررنا لوضع كافة المتغيرات من ملف الإعدادات مع global ؟
على افتراض أنه لديك اعددات أكثر ودالة أخرى، هل أنت مستعد لكتابة كافة المتغيرات في الدوال؟

على غرار المثال السابق، سنستبدل ملف الإعدادات للمحتوى التالي (نفس المحتوى في المثال 6):

$setting = array();
$setting['database'] = array();
$setting['database']['host'] = 'loacalhost'; 
$setting['database']['user'] = 'root';
$setting['database']['pass'] = '';
$setting['database']['dbnm'] = 'testdb';  
$setting['database']['prefix'] = 'hct_';     
$setting['site'] = array();     
$setting['site']['url'] = 'http://www.hct.me';    
$setting['site']['title'] = 'HCT Community Forum';  
$setting['upload'] = array();
$setting['upload']['types'] = array('.jpg','.gif'); 
$setting['upload']['msize'] = '2048';

الدالة ببساطة ستكون كالتالي:

function db_connect()
{
 global $setting;
 @mysql_pconnect($setting['database']['host'],$setting['database']['user'],$setting['database']['pass']);
 @mysql_select_db($setting['database']['dbnm']);
}

باختصار لم نضطر لكتابة كافة المتغيرات، اختصرنا الطريق بكتابة اسم المصفوفة الرئيسية..