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

الشكل الثاني: صف لكل إختيار

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

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

في نموذج HTML يتم إستخدام إسم الحقل كمصفوفة لتمريره في العملية التي تليها لمعالجة البيانات وتهيئتها قبل التحديث كما سنشاهد في الدرس.

مثال عملي: صفحة تحديث إختيارات العامة للتطبيق

قبل البدأ في الدرس سيكون التنفيذ على ملف واحد بلغة 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 } ?>

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

إذا كنت تريد إضافة جدول options إلى قاعدة البيانات إنسخ هذه الشفرة لبدأ المثال:

CREATE TABLE `options` (
 `option_id` int(11) NOT NULL auto_increment,
 `option_name` varchar(200) NOT NULL,
 `option_desc` text NOT NULL,
 `option_value` text NOT NULL,
 PRIMARY KEY  (`option_id`)
)

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

INSERT INTO `options` (`option_id`, `option_name`, `option_desc`, `option_value`) VALUES
(1, 'الإسم الحقيقي', 'الإسم الحقيقي للشخص.', 'أحمد الكثيري'),
(2, 'الإسم المستعار', 'الإسم المستعار أو إسم المستخدم للشخص.', 'mobde3net'),
(3, 'عنوان الموقع', 'عنوان الموقع الشخصي', 'http://www.mubde3.net/blog/');

الآن سنعرض نموذج HTML وطريقة عرض الإختيارات المستدعاه من قاعدة البيانات بإستخدام بإستفسار SQL كما ستشاهد في شفرة PHP التالية أيضاً، ستجد الملاحظات بعد هذه الشفرة كما أن هناك أجزاء مهمة مشروحة ضمن الشفرة:

<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
 <fieldset id="form">
 <legend>تعديل الإختيارات</legend>
 <ul>
 <?php
 // إستدعاء الإختيارات من قاعدة البيانات
 $result = mysql_query("SELECT * FROM options");

 // إستعراض البيانات حسب الإستعلام السابق، وبإستخدام حلقة التكرار while
 while($row=mysql_fetch_array($result)) { ?>
 <li>
 <label><?php echo $row['option_name']; ?></label>
 <div>
 <input type="text" name="option[<?php echo $row['option_id']; ?>]" value="<?php echo $row['option_value']; ?>" />
 <span><?php echo $row['option_desc']; ?></span>
 </div>
 </li>
 <? } ?>

 <li>
 <label><span style="visibility: hidden;">إضغط على زر تحديث ..</span></label>
 <input type="submit" name="submit" value="تحديث" />
 </li>
 </ul>
 </fieldset>
 </form>

لاحظ في عند كتابة الحقل (بإستخدام الوسم input) تكتب الخاصية name أو إسم الحقل كمصفوفة وتتكون من رقم الإختيار الذي نريد عرضه، وهذا سيساعدنا عند تحديث الحقول كلها في المرحلة القادمة.

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

if($_POST['submit']) {
 $result = mysql_query("SELECT * FROM options ORDER BY option_id");

 // إستقبال وتحديث الحقل عن طريق حلقة التكرار while
 // السبب هو أننا نريد تحديث عدة صفوف مع بعضها
 while($row=mysql_fetch_array($result)){
 $option_id = $row['option_id'];
 $option_type = $row['option_type'];
 $option_value = addslashes($_POST['option'][$option_id]); // لاحظ طريقة إستقبال المصفوفة التي كانت موجودة في الحقل في النموذج

 // التأكد من قيمة الحقل أنها صحيحة وكما نحن نريدها
 if($option_value) {
 // تحديث الحقل ضمن إستعلام SQL
 $query = mysql_query("UPDATE options SET option_value = '$option_value' WHERE option_id = '$option_id' LIMIT 1") or die (mysql_error);
 if($query) $message = 'تم تحديث البيانات.';
 } else {
 $message = 'هناك خلل في تحديث الإختيارات.';
 }

 }
}

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

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

تبقى درس واحد حول تحديث البيانات وسنكتب تحديث مركب بين الشكل الاول والثاني بحيث سنستخدم حقول من نوع checkbox و radio و select في نموذج HTML.