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

الشكل الأول: عمود لكل إختيار

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

وهنا تكون لكل قيمة عمود (column) مستقل، وهي سهلة لا تحتاج إلى تعقيد، يكفي إستخدام إستفسار MySQL واحد لتحديث الصف (row) في الجدول.

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

مثال عملي: صفحة لتعديل الموضوع

قبل البدأ في الدرس سيكون التنفيذ على ملف واحد بلغة PHP والتعامل سيكون مع قاعدة بيانات من نوع MySQL وشفرة HTML و CSS لتنسيق الصفحة ستجدها في الملف المرفق لأنها غير مهمة لشرح الدرس وستكون متضمنة مع ملف PHP نفسه وسأضع في بداية الدرس شفرة الإتصال بقاعدة البيانات وسيكون في بداية الملف كذلك:


$cnx=mysql_connect('localhost', 'root', '') or die (mysql_error());
$dbx=mysql_select_db('test') or die (mysql_error());
mysql_query("set charset UTF8");

في الإعدادات الموجودة في الأعلى، قم بتعديلها حسب ما يناسبك أو وضعها حسب الإعدادات الخاصة بالخادم المحلي لديك مثل إسم المستخدم وكلمة المرور الخاصة بالخادم وإسم قاعدة البيانات.

في حال وجود رسالة تشير إلى تحديث البيانات أو وجود مشاكل ستظهر في أعلى الصفحة، لذا سنضيف هذه الشفرة بعد الوسم body مباشرةً وسنستخدمها فيما بعد:


<?php if($message) { ?> <div id="message"><?php echo $message; ?></div> <?php } ?>

سنقوم بإنشاء جدول جديد وسأسميه posts وستكون به القيم التي سأذكرها في إستفسار SQL لأنشاء الجدول:


CREATE TABLE `posts` (
`post_id` int(11) NOT NULL auto_increment,
`post_title` varchar(200) NOT NULL,
`post_name` varchar(200) NOT NULL,
`post_description` text,
`post_content` text NOT NULL,
`post_status` enum('Open','Close') NOT NULL,
PRIMARY KEY  (`post_id`)
)

أضف هذا الإستعلام إلى تطبيق SQL الذي تستعمله في عرض قواعد بيانات MySQL (مثل phpMyAdmin) وهي عبارة عن قيم جاهزة لكي نستخدمها في الدرس أو قم بكتابة القيم بنفسك على الجدول posts:

INSERT INTO `posts` (`post_id`, `post_title`, `post_name`, `post_description`, `post_content`, `post_status`) VALUES
 (1, 'درس: تحديث المعلومات في قاعدة البيانات', 'updating-information-in-database',
 'شرح مختصر', 'عرض بيانات معينة كإختيارات المستخدم أو تعديل وإضافة المواضيع يكون على نموذج ويب (Web Form)،
 اليوم سأستعرض ثلاثة أنواع لتحديث المعلومات في قاعدة البيانات والتي أراها متكررة وسبق أن مررت بمشكلة بأحد هذه الأنواع ففضلت وضعها جميعاً تدوينة واحدة ليستفيد منها المبتدئين والمطورين وهي ليست جديدة عموماً وعادية جداً على المبرمجين.rnrnالمثال الموجود في الدرس، سيكون على نموذج عبارة عن إختيارات عامة لصفحة تطيبق ويب، ستكون هناك حقول مثل إسم المستخدم، البريد الإلكتروني، عنوان الموقع، .. إلخ من الحقول الإعتيادية، الأهم من هذا هو التركيز على أشكال تحديث مثل هذه المعلومات.',
 'Open');

سنضع تركيبة نموذج HTML مع شفرة PHP في النموذج الذي سنعرض فيه البيانات المستدعاه من قاعدة البيانات (سأكتفي بالتعليق على أهم الأجزاء في الشفرة التالية لتوضيحها) :

<form action="<?php echo $_SERVER['PHP_SELF']."?id=".$_GET['id'] ?>" method="post">
 <fieldset id="form">
 <legend>تعديل الموضوع</legend>
 <ul>
 <?php
 // إستعلام لجلب الموضوع عن طريق رقم العمود post_id
 $result = mysql_query("SELECT * FROM posts WHERE post_id = '".$_GET['id']."'");

 // إستعراض البيانات حسب الإستعلام السابق، وبإستخدام حلقة التكرار while
 while($row=mysql_fetch_array($result)) { ?>
 <li>
 <label>عنوان الموضوع</label>
 <div>
 <input type="text" name="post_title" value="<?php echo $row['post_title']; ?>" />
 </div>
 </li>
 <li>
 <label>إسم الموضوع</label>
 <div>
 <input type="text" name="post_name" value="<?php echo $row['post_name']; ?>" />
 <span>إسم الموضوع باللغة الإنجليزية، سيظهر على رابط الموضوع.</span>
 </div>
 </li>
 <li>
 <label>وصف مختصر للموضوع</label>
 <div>
 <textarea rows="3" name="post_description"><?php echo $row['post_description'] ?></textarea>
 </div>
 </li>
 <li>
 <label>محتوى الموضوع</label>
 <div>
 <textarea rows="10" name="post_content"><?php echo $row['post_content'] ?></textarea>
 <span>اكتب الموضوع كامل في هذا الحقل.</span>
 </div>
 </li>
 <li>
 <label>حالة الموضوع</label>
 <div>
 <input type="radio" name="post_status" value="Open" <?php if($row['post_status'] == 'Open') { echo 'checked="checked"'; } ?> /> مفتوح
 <input type="radio" name="post_status" value="Close" <?php if($row['post_status'] == 'Close') { echo 'checked="checked"'; } ?> /> مغلق
 <span>الوضع الحالي لهذا الموضوع.</span>
 </div>
 </li>
 <?php } ?>

 <li>
 <label><span style="visibility: hidden;">إضغط على زر تحديث ..</span></label>
 <input type="submit" name="submit" value="تحديث" />
 <input name="post_id" type="hidden" value="<?php echo $_GET['id'] ?>" />
 </li>
 </ul>
 </fieldset>
 </form>

ملاحظة: في السطر 50 الموجود في الشفرة السابقة يحتوي على حقل مخفي بإسم post_id وسنستخدم هذا الحقل لنقل رقم العمود في الخطوة التالية وتحديث الموضوع حسب رقم العمود الخاص به.

الآن نأتي إلى الخطوة الأخيرة من هذا المثال وهو تحديث هذه البيانات، وسنضع هذه الشفرة في بداية الملف (بعد شفرة الإتصال):

if($_POST['submit']) {
 // التأكد من أن الحقول ليست فارغة
 if(!(empty($_POST['post_name']) || empty($_POST['post_title']) || empty($_POST['post_description']) || empty($_POST['post_content']))){
 $post_id = $_POST['post_id'];
 $post_name = addslashes($_POST['post_name']);
 $post_title = addslashes($_POST['post_title']);
 $post_description = addslashes($_POST['post_description']);
 $post_content = addslashes($_POST['post_content']);
 $post_status = $_POST['post_status'];

 } else {
 $message = 'خطأ: هناك حقول كانت فارغة، أعد محاولة تعديل الموضوع.';
 }
 if($post_name && $post_title && $post_description && $post_content) {
 // تحديث البيانات التي يريد المستخدم تحديثها
 $query = mysql_query("UPDATE posts SET post_name = '$post_name', post_title = '$post_title', post_description = '$post_description', post_content = '$post_content', post_status = '$post_status' WHERE post_id = '$post_id'") or die (mysql_error());
 if($query) $message = 'تم تحديث البيانات.';
 }

}

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