الثلاثاء، 1 ديسمبر 2015

التعامل مع التاريخ والوقت Date and Time

سنقوم في هذا الفصل بشرح الدوال الخاص بالتاريخ والوقت في لغة PHP:

دالة التاريخ   ( )data:
date(format,timestamp)
format :يحدد شكل الطابع الزمني وهو اجباري
timestamp : يحدد الطابع الزمني. الافتراضي هو التاريخ والوقت الحالي وهو اختياري

وهنا بعض الأحرف التي تستخدم عادة للتواريخ:

  • d - Represents the day of the month (01 to 31)       يمثل يوم من ايام الشهر
  • m - Represents a month (01 to 12)                      يمثل الشهر من اشهر السنة 
  • Y - Represents a year (in four digits)               يمثل السنة ويتكون من اربع ارقام 
  • l (lowercase 'L') - Represents the day of the week    يمثل يوم من ايام الاسبوع

مثال1//
<?php
echo "Today is " . date("Y/m/d") . "<br>";
echo "Today is " . date("Y.m.d") . "<br>";
echo "Today is " . date("Y-m-d") . "<br>";
echo "Today is " . date("l");
?>

عمل تلقائية حقوق التأليف والنشر العام PHP Tip - Automatic Copyright Year

&copy; 2010-<?php echo date("Y");?>

الحصول على الوقت البسيط Get a Simple Time
فيما يلي بعض الاحرف التي يشيع استعمالها مع دالة الوقت :
  • h - 12-hour format of an hour with leading zeros (01 to 12)عامل يمثل الساعة
  • i - Minutes with leading zeros (00 to 59)عامل يمثل الدقائق
  • s - Seconds with leading zeros (00 to 59)عامل يمثل الثواني
  • a - Lowercase Ante meridiem and Post meridiem (am or pm)عامل يمثل الحالة صباحا او مساء
مثال3//
<?php
echo "The time is " . date("h:i:sa");
?>

ملاحظة :سيقوم هذا الكود او الدالة باسترجاع الوقت الحالي للخادم .

الحصول على التوقيت Get Your Time Zone 
في حالة كون التاريخ او الوقت هو ليس تاريخ ووقت دولتك او موقعك بل تاريخ ووقت الخادم فيمكن جلب تاريخ ووقت موقعك او بلدك من خلال الكود التالي:
date_default_timezone_set("America/New_York");
                             المحافظة  / البلد
مثال4//
<?php
date_default_timezone_set("America/New_York");
echo "The time is " . date("h:i:sa");
?>

في حالة رغبة باضافة توقيت بلدك كالعراق مثلاً قم بالتالي :

<?php
date_default_timezone_set("Asia/Baghdad");
echo "The time is " . date("h:i:sa");
?>
للاطلاع على رموز التوقيتات للدول فما عليك الا بالذهاب الى هذا الرابط 








الاثنين، 30 نوفمبر 2015

المصفوفة ثنائية الابعاد

المصفوفة ذات البعدين :
ترعف المصفوفة على انها متجه ثنائي البعد   Two-Dimensional , حيث يحتوي هذا المتجه ثنائي البعد على مجموعة من الصفوف Rows ومجموعة من الاعمدة Columns , وسنوضح الامر بالمثال التالي الخاص بالسيارات :

حيث نلاحظ في الصورة اعلاه ان المصفوفة تتكون من بعدين فابعاد الصف  يتكون من اربعة صفوف وابعاد العمود يتكون من ثلاث اعمدة . ويكون برمجة هذه المصفوفة بالشكل التالي :هنا يكون اسم المصفوفة هو Cars ولكي لا ننسى $ حيث تسبق المتغير في لغة PHP. وهنا المتغير Cars تم تعريفه من نوع Array اي من نوع المصفوفة 
$cars = array
  (array("Volvo",22,18),array("BMW",15,13),array("Saab",5,2),array("Land Rover",17,15)); 


والان في حالة طباعة  اي عنصر من تلك العناصر  في المصفوفة يجب ان نقوم بتحديد رقم الصف والعمود في المصفوفة لان وكما نعلم بان كل خلية في المصفوفة هي عبارة عن عنوانين عنوان يشير الى الصف وعنوان يشير الى  العمود 
<?php
echo $cars[0][0].": In stock: ".$cars[0][1].", sold: ".$cars[0][2].".<br>";
echo $cars[1][0].": In stock: ".$cars[1][1].", sold: ".$cars[1][2].".<br>";
echo $cars[2][0].": In stock: ".$cars[2][1].", sold: ".$cars[2][2].".<br>";
echo $cars[3][0].": In stock: ".$cars[3][1].", sold: ".$cars[3][2].".<br>";
?>

يمكننا أيضا وضع حلقة For داخل آخرى للحلقة للحصول على عناصر المصفوفة     Cars$ (فعداد for الاول يشير الى عنوان الصف وعداد for الثاني يشير الى عنوان العمود ) وهذه الطريقة افضل واكثر احترافية 
<?php
for ($row = 0; $row < 4; $row++) {
  echo "<p><b>Row number $row</b></p>";
  echo "<ul>";
  for ($col = 0; $col < 3; $col++) {
    echo "<li>".$cars[$row][$col]."</li>";
  }
  echo "</ul>";
}
?>

كود نموذج متكامل Complete Form Example

في هذا المثال سوف نوضح وبشكل كامل كافة الاجراءات الخاصة بصندوق النموذج من صناديق الاسم والبريد الالكرتوني وعنوان الويب وكذلك ازرار الاختيار المتلعة بنوع جنس الانسان :
<!DOCTYPE HTML> 
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body> 

<?php
// تعريف المتغيرات وتفريغ الحقول وجعلها جاهزة للعمل
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
   if (empty($_POST["name"])) {
     $nameErr = "Name is required";
   } else {
     $name = test_input($_POST["name"]);
     // check if name only contains letters and whitespace
     if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
       $nameErr = "Only letters and white space allowed";
     }
   }
  
   if (empty($_POST["email"])) {
     $emailErr = "Email is required";
   } else {
     $email = test_input($_POST["email"]);
     // check if e-mail address is well-formed
     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
       $emailErr = "Invalid email format";
     }
   }
    
   if (empty($_POST["website"])) {
     $website = "";
   } else {
     $website = test_input($_POST["website"]);
     // check if URL address syntax is valid (this regular expression also allows dashes in the URL)
     if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
       $websiteErr = "Invalid URL";
     }
   }

   if (empty($_POST["comment"])) {
     $comment = "";
   } else {
     $comment = test_input($_POST["comment"]);
   }

   if (empty($_POST["gender"])) {
     $genderErr = "Gender is required";
   } else {
     $gender = test_input($_POST["gender"]);
   }
}

function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}
?>


<h2>PHP Form Validation Example</h2>
<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
   Name: <input type="text" name="name" value="<?php echo $name;?>">
   <span class="error">* <?php echo $nameErr;?></span>
   <br><br>
   E-mail: <input type="text" name="email" value="<?php echo $email;?>">
   <span class="error">* <?php echo $emailErr;?></span>
   <br><br>
   Website: <input type="text" name="website" value="<?php echo $website;?>">
   <span class="error"><?php echo $websiteErr;?></span>
   <br><br>
   Comment: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
   <br><br>
   Gender:
   <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?>  value="female">Female
   <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?>  value="male">Male
   <span class="error">* <?php echo $genderErr;?></span>
   <br><br>
   <input type="submit" name="submit" value="Submit"> 
</form>

<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>


</body>
</html>

الأحد، 29 نوفمبر 2015

التحقق من صحة البريد الإلكتروني ورابط الموقع Forms - Validate E-mail and URL

PHP - Validate Name
يظهر مقطع الشفرة أدناه طريقة بسيطة لمعرفة ما اذا كان حقل الاسم يحتوي على حروف او فواصل فارغة. إذا كانت قيمة حقل الاسم غير صالحة، ثم تخزين رسالة خطأ:
$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
  $nameErr = "Only letters and white space allowed"; 
}
preg_match()
تقوم هذه الدالة بعملية التاكد من مطابقة قيمة المتغير مع ما نريده من قيم بمعنى انك اذا اردت التاكد من ان القيم التي تكتب في خانة الاسم هي فقط من نوع الحروف الصغيرة او الكبيرة الانكليزية فسوف نقوم بكتابة الصيغة بالشكل التالي :
if (!preg_match("/^[a-zA-Z ]*$/",$name))
حيث تتكون دالة preg_match من قسمين او برامتير اثنين احدهما الاول يمثل ما تفرضه من قيم والثاني قيمة المتغير الذي يتم مقارنته مع القيم المفروضة العبارة التي تسيق preg_match والتي هي ! تعني عدم مطابقة


PHP - Validate E-mail
أسهل وأسلم طريقة للتحقق ما إذا كان عنوان البريد الإلكتروني هذا منسق بشكل جيد نستخدم   :
filter_var()
مقطع الكود او الشفرة الخاصة بذلك هي :
$email = test_input($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
  $emailErr = "Invalid email format"; 
}

PHP - Validate URL
الكود التالي أدناه يوضح طريقة لمعرفة ما إذا كان بناء جملة عنوان URL غير صالحة 
$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
  $websiteErr = "Invalid URL"; 
}
مثال متكامل //
<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
    $nameErr = "Name is required";
  } else {
    $name = test_input($_POST["name"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
      $nameErr = "Only letters and white space allowed"; 
    }
  }

  if (empty($_POST["email"])) {
    $emailErr = "Email is required";
  } else {
    $email = test_input($_POST["email"]);
    // check if e-mail address is well-formed
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $emailErr = "Invalid email format"; 
    }
  }

  if (empty($_POST["website"])) {
    $website = "";
  } else {
    $website = test_input($_POST["website"]);
    // check if URL address syntax is valid (this regular expression also allows dashes in the URL)
    if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
      $websiteErr = "Invalid URL"; 
    }
  }

  if (empty($_POST["comment"])) {
    $comment = "";
  } else {
    $comment = test_input($_POST["comment"]);
  }

  if (empty($_POST["gender"])) {
    $genderErr = "Gender is required";
  } else {
    $gender = test_input($_POST["gender"]);
  }
}
?>

الحقول المطلوبة Forms - Required Fields

يبين هذا الفصل كيفية جعل حقول الإدخال المطلوبة وإنشاء رسائل الخطأ إذا لزم الأمر.
في التعليمة البرمجية التالية يضاف لدينا بعض المتغيرات جديدة:
$ nameErr، $ emailErr، $ genderErr، $ websiteErr.

 وهذه المتغيرات تعطي رسائل الخطأ للحقول المطلوبة. ويضاف لدينا أيضا إذا بيان آخر لكل متغير $ _POST. هذا يتحقق إذا كان المتغير $ _POST فارغ (مع ()PHP empty. إذا كان فارغا، يتم تخزين رسالة خطأ في المتغيرات خطأ مختلفة، وإذا لم يكن فارغا، فإنه يرسل البيانات إدخال المستخدم من خلال وظيفة   ( )test_input  .
مثال1//نلاحظ في هذا المثال بان الحقول المطلوبة فقط هي الاسم وعنوان البريد ونوع الجنس 
<?php
//تعريف متغيرات الخطاء واعطائها قيم فارغة
$nameErr = $emailErr = $genderErr = $websiteErr = "";
//تعريف متغيرات اخرى واعطائها قيم فارغة 
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
//في حال صندوق النموذج الخاص بالاسم فارغ تظهر رسالة تنبيه تطلب منه اضافة اسم 
 if (empty($_POST["name"])) {
    $nameErr = "Name is required";
  } else {
    $name = test_input($_POST["name"]);
  }

  if (empty($_POST["email"])) {
    $emailErr = "Email is required";
  } else {
    $email = test_input($_POST["email"]);
  }

  if (empty($_POST["website"])) {
    $website = "";
  } else {
    $website = test_input($_POST["website"]);
  }

  if (empty($_POST["comment"])) {
    $comment = "";
  } else {
    $comment = test_input($_POST["comment"]);
  }

  if (empty($_POST["gender"])) {
    $genderErr = "Gender is required";
  } else {
    $gender = test_input($_POST["gender"]);
  }
}
?>

السبت، 28 نوفمبر 2015

التحقق من صحة النموذج Form Validation

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

النموذج form:
عندما تقوم بإنشاء بريد الكتروني جديد لدى الياهو , او الهوتميل , يتوجب عليك ان تقوم بتعبئة نموذج التسجيل , الذي يتضمن الاسم وكلمة المرور والبريد المراد انشائه , كل هذا نقوم عمله عن طريق النماذج ( FORMS ) واتوقع ان لديك شوق كبير لكي تقوم بفعل مثل هذه الامور في كود او برنامجك او موقعك البرمجي قريبا , اذا ما نقصد به بي النماذج هو ان تقوم بتعبئة نموذج بمعلومات مطلوبه , ثم ارسالها . واعتقد انك لاحظت ان بعض النماذج تحتوى على انواع كثيره , مثل مربعات الكتابه , مربعات النصوص الكبيره , مربعات الاختيار , ازرار الاختيار , حقول الاختيار ,
---------------------------------------------------------------
تنبيه:
يعتبر SECURITY عند معالجة أشكال PHP!
سوف تظهر هذه الصفحات كيفية معالجة أشكال PHP مع اخذ الجانب الامني بنظر الاعتبار. التحقق من صحة البيانات في النموذج مهم لحماية النموذج الخاص بك من المتسللين والمتطفلين!

شكل HTMLالتالي  سوف نعمل عليه في هذا الفصل ، ويحتوي على حقول الإدخال المختلفة: المطلوبة والحقول الاختيارية النص، أزرار الراديو، وزر الإرسال:

قواعد التحقق من صحة النموذج أعلاه هي كما يلي:
name: يجب ان تحتوي على حروف وفراغ فقط .
E-mail:يجب ان تحتوي على محتوى عنوان بريد الالكتروني مع @.
Website :اختياري. إذا كان موجودا، فإنه يجب أن يحتوي على URL صالح.
Comment:يجب ان يكون هذا الصندوق ذو سعة كبيرة للاستقبال البيانات المدرجة فيه .
Gender: يجب ان يتم اختيار نوع الجنس اما ذكر او انثى .

نبدأ بكيفية انشاء صناديق النص Text Fields في مرحلة كود HTML
Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

الان نقوم بانشاء ازرار الاختيار Radio Buttons في مرحلة كود HTML
Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male


مرحلة التحقق من بيانات النموذج مع  Validate Form Data With   PHP

<!DOCTYPE HTML> 
<html>
<head>
</head>
<body> 

<?php
//
تعريف المتغيرات وجعل قيمتها فارغة 
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
 // test_inputرسال البيانات الى دالة المعالجة  
   $name = test_input($_POST["name"]);
   $email = test_input($_POST["email"]);
   $website = test_input($_POST["website"]);
   $comment = test_input($_POST["comment"]);
   $gender = test_input($_POST["gender"]);
}
//
دالة المعالجة
function test_input($data) {
//ازالة الفراغات من نهاية وبداية النص
   $data = trim($data);
//تقوم بازالة /  من النص    $data = stripslashes($data);
// (<,&gt,$lt)الى رموز خاصة html تحويل الاحرف الخاصة بلغة    $data = htmlspecialchars($data);
//اعادة قيمة للدالة   return $data;
}
?>

<h2>PHP Form Validation Example</h2>
// تقوم بطباعة النتيجة في نفس الصفحة, post   انشاء نموذج باستخدام 
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
   Name: <input type="text" name="name">
   <br><br>
   E-mail: <input type="text" name="email">
   <br><br>
   Website: <input type="text" name="website">
   <br><br>
// cols="40" و rows="5" من خلال   comment تحديد مساحة صندوق 
   Comment: <textarea name="comment" rows="5" cols="40"></textarea>
   <br><br>
   Gender:
   <input type="radio" name="gender" value="female">Female
   <input type="radio" name="gender" value="male">Male
   <br><br>
   <input type="submit" name="submit" value="Submit"> 
</form>


<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>


</body>
</html>


الخميس، 26 نوفمبر 2015

التعامل مع النماذج Form Handling

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

              

$_GET 
$_POST  
دالة GET : هو نوع من انواع الدوال لارسال البيانات و هو مرئي لجميع في عناوين المتصفح والحد الاقصى لارسال البينات فيه هو 100
مزاياها:
1- طبعا الطريقه get هي الاسرع في ارسال المعلومات.
2- تظهر المعلومات المرسله في عنوان الurl.
وعيوبها انها غير امنه ولا تستطيع ان ترسل بها الكثير من المعلومات

مثال1// يوضح عملية ارسال بيانات اسم وعمر شخص من خلال صندوق النماذج وبعد ذلك اظهار نتيجة ارسال البيانات الى صفحة GET.
<html>
<body>
<form action="welcome.php" method="GET">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html>
وبعد ذلك نقوم بانشاء صفحة 
"welcome.php"
ويكتب فيها الكود التالي 
<html>
<body>
Welcome <?php echo $_GET["name"]; ?><br>
Your email address is: <?php echo $_GET["email"]; ?>
</body>
</html>
--------------------------------------------------------------
دالة POST:تختلف عن دالة او طريقة GET في كونها غير محدودة في حجم البيانات التي يتم ارسالها  وايضا تكون غير مرئية اي تخفي ما يتم ارساله في عنوان الصفحة فهي أأمن من GET.
مزاياها:
-تستطيع من خلالها ان ترسل الكثير من المعلومات.
- هي ابطا من get.
- هي امنه جدا.

متى استخدم post و متى get ؟
تستخدم post عندما تكون تريد ادخال معلومات الى قاعدة البيانات مباشره لكي تكون معلوماتك مخفيه وامنه، وعندما تكون المعلومات كثيرة,اما get فتستخدمها عندما تكون المعلومات قليله وتستخدم اكثر شيء في ازرار البحث

مثال2// نفس المثال السابق مع تغيير فقط في الطريقة من get الى post
<html>
<body>

<form action="welcome.php" method="post">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>

</body>
</html>
وبعدها نقوم بانشاء صفحة 
welcome.php
ونكتب فيها الكود التالي 
<html>
<body>

Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?>

</body>
</html>