تطبيق : إنشاء صفحة للدّردشة

تصحيح المهمة الأولى

آخر تحيين: 10-01-2015

المهمة الثانية : إمكانية حذف و تعديل الرّدود االمهمة الأولى : إضافة و عرض الرّدود


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


<?php 
// ربط الإتصال بقاعدة البيانات

// إذا كانت لدينا بيانات جديدة سنقوم بإدخالها في القاعدة

// إذا لم تكن هنالك بيانات جديدة ، نقوم بعرض الإستمارة و الرّدود السابقة

?>

ربط الإتصال بالقاعدة


<?php 
try 
{
  $db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
} 
catch(PDOException $e)
{
  die('خطأ : ' . $e->getMessage());
}
?>

إدخال البيانات الجديدة

قبل إضافة البيانات إلى القاعدة ، يجب التأكد من أن الزائر قام بملأ الإستمارة بشكل صحيح . لهذا سنستعمل الشرط "IF" مع isset و empty لإجراء الإختبار


<?php 
if(isset($_POST['author']) AND isset($_POST['content'])) // إذا تم إرسال الإستمارة
{
 if(!empty($_POST['author']) AND !empty($_POST['content'])) // إذا لم تكن حقول الإستمارة فارغة
 {
  $author = $_POST['author'];
  $content = $_POST['content'];

  $query= $db->prepare('INSERT INTO chat 
                        (author, content) VALUES
                        (:auth,:cont)
                      ');
  $query->bindValue(':auth',$author,PDO::PARAM_STR);
  $query->bindValue(':cont',$content,PDO::PARAM_STR);
  $query->execute();
  $query->CloseCursor();
 }
}
?>

إنشاء الإستمارة


 <form action="" method="post">
    <input type="text" name="author" id="author"><br>
    <textarea name="content" id="content" cols="40" rows="4"></textarea>
    <input type="submit" value="إرسال">
</form>

عرض الرّدود السابقة


<?php
$response = $db->prepare('SELECT id, author, content
            FROM chat 
            ORDER BY id
           ');
$response->execute();
$chats = $response->fetchAll();
$response->CloseCursor();

if($response->rowCount() > 0 )
{
    foreach($chats as $chat) 
    {
      $author = htmlspecialchars($chat['author']);
      $content = nl2br(htmlspecialchars($chat['content']));
	
      echo $author.'<br>'.$content;
    }
}
?>

إذا كان هناك جديد في هذه الشيفرة هو هذا المقطع $response->rowCount() > 0 .
تقوم rowCount بتعداد سطور الجدول . و الشرط كاملا يعني : إذا كان عدد سطور الجدول أكبر من صفر سنقوم بعرضها . أما إذا كان الجدول فارغا و لا يحتوي بعد على بيانات ، فلا داعي من تنفيذ الشيفرة .

شيفرة صفحتنا كاملة و عملية هي كالتالي :


<?php
try 
{
  $db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
} 
catch(PDOException $e)
{
  die('خطأ : ' . $e->getMessage());
}
// إستقبال البيانات القادمة من الإستمارة و تخزينها في القاعدة
if(isset($_POST['author']) AND isset($_POST['content']))
{
 if(!empty($_POST['author']) AND !empty($_POST['content']))
 {
   $author = $_POST['author'];
   $content = $_POST['content'];

    $query= $db->prepare('INSERT INTO chat 
                          (author, content) VALUES
                          (:auth,:cont)
                        ');
    $query->bindValue(':auth',$author ,PDO::PARAM_STR);
    $query->bindValue(':cont',$content ,PDO::PARAM_STR);
    $query->execute();
    $query->CloseCursor();
 }
}
?>
<!DOCTYPE html>
<html dir="rtl">
<head>
<style>
  body{width:500px;margin:auto;}
  label {display:inline-block;width:60px;font-weight:bold;vertical-align:top;}
  h3 {color:blue;}
</style>
</head>
<body>
 <form action="" method="post">
  <fieldset>
    <legend><h3>إضافة رد</h3></legend>
    <label for="author"> الإسم :</label><input type="text" name="author" id="author"><br>
    <label for="content">المحتوى:</label><textarea name="content" id="content" cols="40" rows="4"></textarea>
	<p><input type="submit" name="submit" value="إرسال"></p>
  </fieldset>
</form>
<?php
//chat عرض بيانات جدول 
$response = $db->prepare('SELECT id, author, content
            FROM chat 
            ORDER BY id
           ');
$response->execute();
$chats = $response->fetchAll();
$response->CloseCursor();

if($response->rowCount() > 0 )
{
  foreach($chats as $chat) 
  {
   $id = (int)$chat['id'];
   $author = htmlspecialchars($chat['author']);
   $content = nl2br(htmlspecialchars($chat['content']));
	
   echo '<p><b>'.$author.':</b> 
         <a href="edit.php?id='.$id.'">تعديل</a>-
         <a href="delete.php?id='.$id.'">حذف</a><br>
        '.$content.'</p>';
  }
}else {
  echo '<p> لا يوجد أي رد . كن أول من يفتتح النقاش </p>';
}
?>
</body>
</html>

لاحضوا بأنني أضفت وصلتين لتعديل و حذف الرّدود . الوصلتين لن تعملا حاليا ، إذا نقرتم عليها ستحصلون على خطأ "404" ، يشعركم عدم وجود الصفحة المطلوبة . و هذا يؤدّي بنا إلى المهمة الثانية ، و هي إنشاء الصفحتين المطلوبتين لتعديل و حذف البيانات