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

تصحيح : صفحة edit.php

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

تصحيح : صفحة delete.php المهمة الثانية : إمكانية حذف و تعديل الرّدود


صفحة edit.php : تعديل ردود الدّردشة

لتعديل رد من ردود الدّردشة سنتبع الخطوات التالية :

  • كما تعلمتم ، يجب أولا ربط الإتصال بقاعدة البيانات . من الآن سأغفل هذه المرحلة حتى أركز فقط على الشيفرات التي تهمنا .
  • إستخلاص "id" = رقم السطر الذي نود تعديله
  • إنشاء إستمارة لتعديل الرّد
  • يجب أن تتضمن الإستمارة على البيانات الأصلية
  • إرسال الإستمارة المُعدّلة ، و تحيين البيانات في القاعدة

إستخلاص "id"

قبل أي شيء ، سنقوم باستقبال مفتاح id الذي أرسلناه عبر عنوان الويب "edit.php?id='.$id.'"

$id = $_GET['id']

للتأكد من وجود هذا المفتاح و تنظيفه ، سأستعمل الشيفرة المختصرة التي رأيتموها في درس سابق :

$id = isset($_GET['id']) ? (int)$_GET['id'] : exit('لا يمكنك القيام بهذه العملية');

على سبيل التذكير فهذه الشيفرة مطابقة تماماً للشيفرة أسفله :

if(isset($_GET['id'])) 
{
  $id = (int)$_GET['id'];
} 
else 
{
  exit('لا يمكنك القيام بهذه العملية');
}

exit : تقوم بتوقيف السكريبت و عرض الخطأ الناجم

بعد حصولنا على مفتاح id سننشيء الإستمارة . و بما أننا نحتاج إلى عرض البيانات الأصلية التي نريد تعديلها في الإستمارة سنقوم بتنفيذ استعلام SELECT للحصول عليها .

<?php 
// الإتصال بقاعدة البيانات
// ...
$id = isset($_GET['id']) ? (int)$_GET['id'] : exit('لا يمكنك القيام بهذه العملية');

// الحصول على بيانات الرّد الذي نريد تعديله
$response = $db->prepare('SELECT author, content
                          FROM chat 
                          WHERE id = :ch_id
                        ');
$response->bindValue(':ch_id', $id, PDO::PARAM_INT);
$response->execute();

$chat = $response->fetch();
$response->CloseCursor();

//تنظيف البيانات الأصلية لعرضها في الإستمارة 
$author = htmlspecialchars($chat['author']);
$content = htmlspecialchars($chat['content']);
?>
لاستخلاص بيانات الإستعلام استعملت fetch() : $chat = $response->fetch(); لأننا نريد بيانات سطر واحد فقط من الجدول . بدل fetchAll() التي رأيناها سابقا ، و التي نستعملها عندما ننتظر الحصول على أكثر من سطر

ثم ننشيء الإستمارة ، و نملأها بالبيانات الأصلية

<form action="" method="post">
  <input type="text" name="author" value="<?php echo $author;?>"><br>
  <textarea name="content"><?php echo $content;?></textarea><br>

  <input type="submit" name="submit" value="إرسال">
</form>

لم يبقى لنا سوى تعديل بياناتنا ثم إرسالها لتنفيذ التحيين في القاعدة

<?php 
if(isset($_POST['submit']))
{
 if(!empty($_POST['author']) AND !empty($_POST['content']))
 {
   $update_author = $_POST['author'];
   $update_content = $_POST['content'];
   
   $query=$db->prepare('UPDATE chat 
                        SET author = :name, content = :msge
                        WHERE id = :id
                      ');
   $query->bindValue(':name', $update_author , PDO::PARAM_STR);
   $query->bindValue(':msge', $update_content, PDO::PARAM_STR);
   $query->bindValue(':id', $id, PDO::PARAM_INT);
   $query->execute();
   $query->CloseCursor();
 
   echo '<hr><h3> تم تعديل الموضوع بنجاح </h3>
        <p>سيتم تحويلك تلقائيا إلى صفحة الدّردشة ...</p>';
   header ('Refresh:5;URL= chat.php');
 }
}
?>

صفحة edit.php : الشيفرة كاملة

<?php
try 
{
  $db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
} 
catch(PDOException $e)
{
  die('خطأ : ' . $e->getMessage());
}
$id = isset($_GET['id']) ? (int)$_GET['id'] : exit('لا يمكنك القيام بهذه العملية');

$response = $db->prepare('SELECT author, content
                          FROM chat 
                          WHERE id = :ch_id
                        ');
$response->bindValue(':ch_id', $id, PDO::PARAM_INT);
$response->execute();

$chat = $response->fetch();
$response->CloseCursor();

$author = htmlspecialchars($chat['author']);
$content = htmlspecialchars($chat['content']);
?>
<!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>
<h1>تعديل الموضوع </h1>
<form action="" method="post">
  <label for="author"> الإسم :</label><input type="text" name="author" id="author" value="<?php echo $author;?>"><br>
  <label for="content">المحتوى:</label><textarea name="content" id="content"><?php echo $content;?></textarea><br>
<input type="submit" name="submit" value="إرسال">
</form>
</body>
</html>
<?php 
if(isset($_POST['submit']))
{
 if(!empty($_POST['author']) AND !empty($_POST['content']))
 {
   $update_author = $_POST['author'];
   $update_content = $_POST['content'];
   
   $query=$db->prepare('UPDATE chat 
                       SET author = :name, content = :msge
                       WHERE id = :id
                      ');
   $query->bindValue(':name', $update_author , PDO::PARAM_STR);
   $query->bindValue(':msge', $update_content, PDO::PARAM_STR);
   $query->bindValue(':id', $id, PDO::PARAM_INT);
   $query->execute();
   $query->CloseCursor();
 
   echo '<hr><h3> تم تعديل الموضوع بنجاح </h3>
        <p>سيتم تحويلك تلقائيا إلى صفحة الدّردشة ...</p>';
   header ('Refresh:5;URL= chat.php');
 }
}