بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته وبعد
أخواني الأعزاء لدي فكرة جديدة (قد تكون جديدة بالنسبة لي ولا أدري إن كان سبقني بها أحد ولكن سأكون مسرور لوكان اكتشافها علي يدي)
وإذا كانت أول مرة فأسميها (وهي تسمية من عندي فقط ) الجدول الذكيGTable .
مع العلم اني طرحت هذا الموضوع من قبل في موقع قرية php تحت الرابط التالي :
http://www.phpvillage.com/phpBB2/viewtopic.php?t=3778
مقدمة :
من المعروف أنه يمكنك إنشاء جداول في قاعدة البيانات بحقول مختلفة الأنواع ومن أنواع الحقول BLOB وكما هو معروف للجميع أن أختصاره Binary Large Object وهو لتخزين بيانات ثنائية مثل الصور وأشياء مختلفة.
الفكرة :
ومن هذه المقدمة جائتني فكرة ولقد قمت بتجربتها وهي فاعلة بإذن الله تعالى فبما أن الحقل من نوع BLOB يقبل بيانات مختلفة وثنائية فإنه يستطيع تخزين الكائنات وهنا مربط الفرس ففكرة الجدول الذكي هي جدول بسيط مربوط بكائن يتحكم في الجدول.
الميزة :
1-الميزة في هذه العملية أنك تستطيع التعديل في الكائن المكتوب ضمن ملف php فيتعدل الجدول معه تلقائياً أي كأنك تقوم بإضافة حقل إلى الجدول بشكل تلقائي ولن تتضرر باقي البيانات ويمكنك إضافة الحقول بشكل اتوماتيكي بأي عدد تريده من الحقول دون أن يتأثر الجدول.
2- الفائدة المرجوة من فكرة الجدول الذكي ((GTable انه اذا كان لديك موقع مبني على نظرية الجدول الذكي فلن تقوم بالتعديل على قواعد البيانات أبداً الا اذا اردت زيادة جداول جديدة إلى قواعد البيانات فقط.
3- جميع الجداول في قاعدة البيانات تأخذ التركيب نفسه ماعدا في إسم الجدول فقط.
4- الحقل المضاف إلى الجدول الذكي يتميز ايضاً بأنه من النوع variant اي النوع الحر فيمكنك إضافة أرقام وحروف وصور والكثير غيرها دون أي قيود.
أما باقي المميزات فسأتركها لكم بعد تجربة نظام الجدول الذكي(QTable)
الطريقة:
[size=green]الخطوة الأولى[/size]
تقوم بإنشاء جدول فيه حقلين فقط :
الأول (id) : وهو من النوع الصحيح ويكون بزيادة تلقائية
الثاني (object) : ويمكنك تسميته بأي اسم المهم من نوع BLOB
كود PHP:
Create table Student
(
id INT NOT NULL AUTO_INCREMENT,
object BLOB NOT NULL
)
من النظرة الأولى فإن الجدول سهل جداً ولكن صدقوني أن فعل هذا الجدول كبير جداً ولقد جربة هذا الطريقة ونفعتني كثير.
ونظام الجدول الذكي أن تكون جميع الجداول بهذه الصيغة وتختلف فقط في اسم الجدول للتمييز بينها فقط
وإسم الجدول في مثالنا هذا هو Student وهو كما يشير الإسم جدول يحمل معلومات عن الطلاب.
الخطوة الثانية:
هي إنشاء الكائن الذي نريد ربطه مع هذا الجدول
والآن لنقوم بإنشاء ملف نسميه student_obj.php ونكتب فيه الكائن الذي سيرتبط مع الجدول.
ملاحظة : المتغيرات التي تكتبها داخل الكائن تمثل حقول الجدول.
وإليكم مثال بسيط للكائن :
كود PHP:
Class Sobj
{
var name; //إسم الطالب
var addres; // عنوان السكن
var age; // عمر الطالب
function Sobj()
{
$this->name = "";
$this->addres = "";
$this->age = 0;
}
};
ويمكنك إضافة دوال وغيرها حسب مايتطلبه العمل الذي تقوم به المهم انك تضع ضمن الجدول حقول افتراضية فقط وليس لها صلة بالجدول الحقيقي اصلاً.
كما ترى وضعنا في الكائن وضعنا المتغير age وهو سيحمل عمر الطالب ولكن يمكنك تخزين بيانات نصية ايضاً ضمن هذا الحقل لأنه متغير php يمثل حقل افتراضي مثل أن تكتب (عشرين سنة) بينما لوكان الجدول حقيقي فأنت لست مخير فإما أن تضعه رقمي أو نصي فقط وهذه احد حسنات الجدول الذكي.
وكما ترى الدالة التي وضعناها تستخدم لتمهيد الحقول الإفتراضية فقط لا أكثر
المهم دعنا نكمل :الآن قد يقول قائل ما علاقة هذا الكائن بالجدول الذي قمنا ببنائه فأقول له انتظر وستعرف ولا تتسرع.
أول عملية تقوم بعملها بعد إنشاء الجدول تكون كالعادة هي إدخال بيانات جديدة إلى الجدول وسيكون في نظريتنا كالتالي :
كود PHP:
$QTS = new Sobj();
$QTS->name = "عبدالله عيد المحمادي";
$QTS->addres = "مكة المكرمة";
$QTS->age = 21;
الأن قمنا بتعبئة الحقول الإفتراضية بعد ذلك نستخدم دوال الأرشفة وهي كالتالي :
1- serialized وتستخدم لتحويل البيانات إلى بيانات ثنائية لتخزينها ضمن الجدول وسنستخدمها لأرشفة الكائن الخاص بنا وهو Sobj
2- unserialized
ومن الإسم يتضح أنها ترجع البيانات من ثنائية إلى وضعها الحقيقي (وفي مثالنا سترجعها من بيانات ثنائية إلى كائن Sobj ).
ادخال صف في الجدول:
بعد ما قمنا بتعبئة بيانات الكائن والذي يمثل الحقول الإفتراضية لجدول الطلاب نقوم بتخزين الكائن ضمن الجدول كالتالي : (وذلك طبعاً بعد إجراء عملية الإتصال بقاعدة البيانات واجراء العمليات المعتادة الأخرى)
كود PHP:
$archive_data = serialized($QTS);
$result = mysql_query("INSERT INTO Student VALUES(NULL,".$archive_data.")");
الآن تم تخزين البيانات ضمن جدول Student وهي البيانات الثنائية.
الخطوة التالية :
وهي كيفية التعامل مع البيانات في الجدول واستخراجها ومعرفتها وهي كالتالي.
كود PHP:
$result = mysql_query("SELECT * FROM Student");
$first_record = mysql_fetch_array($result);
$QTS = unserilized($first_record); // هنا تتم عملية استرجاع الكائن
print($QTS->name);
print("<BR>".$QTS->addres);
print("<BR>".$QTS->age);
إلى حد الآن عرفنا طريقة الإخراج والإدخال ولكن قد يسأل سائل كيف يمكنني مثلاً الإستعلام وفق شروط معينة مثل (الإستعلام عن عدد الطلاب الذين تكون اعمارهام اكبر من 20 سنة)
فأقول له الطريقة ايضاً بسيطة وهي كالتالي وذلك بعد اجراء عملية الإخراج كما هو موجود بالأعلى نقوم بما يلي
وذلك بوضعها في حلقة عند استخراج كل صف من الجدول:
كود PHP:
$Count = 0;
For(…)
{
…
…
If($QTS->age > 20)
Count++;
}
وباقي الإستعلامات أظن عقلك بدأ يخمنها.
[size=green]المهم نرجع لسؤالنا وهو مالشئ الجديد هنا[/size]
فأقول لك افترض ان هذا الجدول الذي قمنا بإنشائه موجود ضمن موقعك وقمت بعمل صفحة HTML تعمل كواجهة لإدخال بيانات الطلاب ضمن الجدول وبعد فترة من الزمن أردت إضافة حقل (رقم الهاتف الخاص بالطالب) فإنك لن تضطر إلى التعديل في الجدول ولكن كل ماستقوم بفعله هو الذهاب والتعديل في الكائن كما يلي :
كود PHP:
Class Sobj
{
var name; //إسم الطالب
var addres; // عنوان السكن
var age; // عمر الطالب
var phonenumber; //رقم الطالب
function Sobj()
{
$this->name = "";
$this->addres = "";
$this->age = 0;
}
};
والآن كما ترى النتيجة فإننا قمنا فقط بالتعديل على الكائن وبذلك سيقوم بإضافة حقل افتراضي لرقم الهاتف الخاص بالطالب وذلك دون أن يؤثر على الجدول أو بكلام أخر فإن الجدول يقول (خلك بعيد حبك يزيد).
وبما أن عملنا هو على حقول افتراضية فإنه يمكنك إضافة ماتشاء من الحقول الإفتراضية دون أي تأثير مسبق على الجدول
وهذه هي طريقة الجدول الذكي وأرجوا أن تكون الفكرة هذه قد وصلت للجميع
وأرجوا من الجميع العفو عني في حالة حدوث خطأ فإن أخطأت فمن نفسي والشيطان وإن أصبت فمن الله عز وجل.
ونريد رأيكم في فكرة نظام الجدول الذكي وأنا أقبل أي إتهام أو نقد على قولهم Free
قول ماتريد وأنا صدري واسع
ولكم مني خالص الشكر
اخوكم عبدالله عيد المحمادي
_________________
إن أخطأت فمن نفسي والشيطان وإن أصبت فمن الله سبحانه وتعالى