كيف تقوم بتطبيق عمليات الـ CRUD بإستخدام الـ PDO في الـ Php و قواعد بيانات Mysql

الـ PHP خلقت لنفسها مكانا ضمن أفضل اللغات البرمجية و أقواها أيضا، فقد أتاحت لنا في بداية الأمر إمكانية تطوير برمجياتنا الستاتيكية و جعلها ديناميكية قادرة على التواصل مع قواعد البيانات و التعامل معها بشتى أنواعها، فسواء كانت MySQL او SQL Server و غيرها من أنواع قواعد البيانات، يمكن للـ Php الإتصال معها و إجراء محادثات عبارة  عن أوامر مخصصة من أجل صناعة برمجيات ديناميكية تلبي رغبات المستخدم.
لربما كان هذا الهدف الأساسي من الـ Php أولا، و قد أضاءت الـ Php نور العديد من المبرمجين، فإستخدمتها بعض الشركات و الأطراف من أجل تطوير منصات برمجية أخرى او إطارات عمل مبنية على الـ Php، لنأخذ مثلا منصات الـ CMS التي تقريبا تشكل الـ Php جزءا كبيرا من مكوناتها مثل الووردبريس او دروبال او جوملا التي تكونها الـ Php في الأساس، و يعتبر الووردبريس واحدا من أقوى الـ CMS على الإطلاق و الأكثر إستخداما كذلك اليوم، مما يعني ان جل المواقع اليوم تقنيا تستخدم الـ Php.
مرورا بإطارات العمل التي أصبح اليوم إستخدامها ضروريا لبناء برمجية ويب آمنة  و تعتمد على احد انواع الـ Design Pattern من أجل تسهيل التعديل عليها او تحديثها دون الحاجة لإعادة هيكلتها كاملة، و لعل أشهر إطارات العمل الخاصة بالـ Php هي الـ Laravel، الذي ذاع صيته في كل انحاء المعمورة، إلى جانب إطارات عمل أخرى مثل Zend, Symfony, Falcon و غيرها التي إقترحناها عليكم من هنا.

الهدف من الموضوع : في مقالنا المتواضع هذا، سنوفر لك كل أساسيات الـ CRUD، و حين نتحدث عن أساسيات الـ CRUD فتلقائيا كل ما يتعلق بالتعامل مع قواعد البيانات من أوامر أساسية من إضافة بيانات، حذف بيانات، البحث عن بيانات، و التعديل على البيانات، و سنتعامل معها عن طريق الـ Php و بالضبط الـ PDO، موفرين بذلك كل ما تحتاجه من أساسيات لصناعة صفحات Php تتبنى القواعد الأساسية للإتصال مع قواعد البيانات و إدارتها.


سنقوم من خلال هذا الموضوع المقال بالتطرق مباشرة للشرح، إذ نؤمن ان التعلم لا يأتي بالكورسات بل من خلال المشاريع البرمجية الصغيرة  منها و الكبيرة، لذلك سنخلق لأنفسنا مشروع برمجي صغير و سنقوم بإنشائه بالإعتماد على الـ Php كلغة برمجة أساسية، و الـ MySQL كنظام إدارة قواعد بيانات لإستضافة بيانات مشروعنا البرمجي، و إن اردت تعلم الـ Php فإلتحق بمقالنا حول : إليك 20 مصدر رائع و قوي لتعلم البرمجة بلغة الـ PHP ( و إطارات العمل الخاصة بها Frameworks ).

- ما هو الـ PDO ؟ و ما الفرق بينه و بين الـ Mysqli ؟ 

يمكن الإتصال بقواعد البيانات في الـ Php و إجراء عمليات على الجداول بطريقتين : الـ PDO و الـ Mysqli، و كليهما جيدين لفعل ذلك بإختلاف الـ Syntax الخاص بهما، لكن لما إخترنا الـ PDO ؟
الـ PDO و هو إختصار لعبارة Php Data Objects له نفوذ أكبر، إذ يمكن الإتصال بقواعد بيانات من أي نوع مثل Mysql, MongoDB, SQL Server و غيرها، على عكس الـ Mysqli الذي لا يسمح لنا إلا بالإتصال بقواعد بيانات من نوع Mysql، كما انه أكثر اريحة حين يتعلق الأمر بهيكلة الكود و إستخدامه بشكل أفضل، كما أنه أكثر توافقا مع مجموعة من النسخ الخاصة بالـ PhpMyAdmin، إذ احيانا سيتوجب عليك تحديث النسخة ان اردت التعامل مع الـ Mysqli .


كيف تقوم بتطبيق عمليات الـ CRUD بإستخدام الـ PDO في الـ Php و قواعد بيانات Mysql


- صناعة قاعدة البيانات التي سنستخدمها : 

قواعد البيانات تلعب دورا مهما في هذه العملية، فهي الحقيبة التي سنخزن فيها كل المعلومات و سنتعامل معها بإستخدام مجموعة من الإستعلامات كذلك، تتكون كل قاعدة بيانات من مجموعة من الجداول، و يتكون الجدول بدوره من مجموعة من الأسطر (Rows) و أعمدة (Columns)، يمكنك مراجعة درسنا الأولي : الـ SQL للمبتدئين : تعلم أساسيات الـ SQL و أوامر الإستعلام ( الجزء الأول ) إن اردت إستيعابها بشكل أفضل و كذلك إجراء بعض الأوامر و الإستعلامات الأساسية في الـ SQL، سنتجه الى منصة MySQL ثم سنقوم بإنشاء قاعدة بيانات بإسم Training ثم جدول بإسم Users، سنضع في هذا الجدول كل من الـ id الذي سيكون Primary Key و كذلك Auto Increment، ثم الـ username أيضا الـ Email و أخيرا Password، مجرد جدول بسيط لنقوم بتطبيق بعض العمليات عليه.
بعد ان قمنا بتطبيق كل ذلك سنحصل على قاعدة بيانات خاصة بنا تحمل كل المعلومات أعلاه، و نحن جاهزين للربط الآن ( ملاحظة مهمة : إن لم تعرف خطوات صناعتها إطلاع على الرابط السابق لدورة SQL فقد شرحنا في البداية كيف تقوم بصناعة قاعدة بيانات و الجداول )

- الإتصال بقاعدة البيانات عن طريق الـ Php :


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


نقوم بإدراج البيانات الأربعة في متغيرات تحمل إسم host, db, username, password، كل متغير يحمل القيمة الخاصة بقاعدة البيانات، ثم بعدها نقوم بالولوج في تحديد Try Catch، و هو تحديد يسمح لنا بإستخراج المشاكل و الأخطاء أثناء حدوثها و إظهارها في رسالة مخصصة، لأنه في حالة عدم إستخدامه، قد يظهر مشكل او خطأ برمجي و قد يبرز معلومات للمستخدم قد لا نريدها ان تسقط في يده، فمثلا إن كان هناك خطأ في جلب الباسوورد قد يخبرنا ان الباسوورد X فيه مشكل، و بذلك يظهر الباسوورد، لذلك نستخدم خاصية Try Catch من أجل تحديد الـ PDOExceptions او الأخطاء الخاصة بالـ PDO ثم نقوم بإظهارها عن طريق getMessage كما في السطر الـ 10 و الـ 11 من الصورة .
اما في وسط الـ Try نضع الكود الخاص بنا للإتصال، سنقوم بإنشاء كائن من نوع PDO، ثم سنقوم بإدراج كود الإتصال كما في الأعلى بإدراج المتغيرات وسط الـ PDO، ثم نقوم بإظهار رسالة في حالة الإتصال.

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



- إضافة المعطيات الى قاعدة البيانات :



نريد الآن إضافة بعض البيانات او المعطيات الى قاعدة البيانات، بإستخدام الكود السابق و في وسط الـ Try مجددا، سنقوم بإضافة الكود الخاص بإضافة بيانات الى الجدول الخاص بنا Users، سنقوم أولا بتحديد البيانات التي نريد إضافتها الى قاعدة البيانات في متغيرات ستحمل إسم : username, email, password، نقوم بكتابة متغير في الـ Php عن طريق ستحمل هذه المتغيرات القيم التي نريد إضافتها في الجدول، إن اردت كتابتها مباشرة دون متغيرات اي Pass by Reference فلا ننصحك بذلك ( أيضا، الفقرة القادمة تتحدث عن طريقة إضافتها من خلال Form ).


تنقسم عملية إضافة البيانات الى 3 أقسام :
-  أولا تهيئة الـ Statement او الـ Query الذي سيقوم بإضافة البيانات و ذلك عن طريق إستدعاء دالة Prepare ثم إدراج وسطها الـ Query، لأن الـ Id الخاص في قاعدة البيانات هو Auto-increment اي يزداد تلقائيا، فأنا غير مضطر لإضافته، بذلك سأخصص إضافة البيانات في الحقول username, email, password، ثم أدرج القيم الخاصة بها على شكل :username، اي مجرد Reference سنقوم بتحديده لاحقا و ليس القيمة بحد ذاتها، قد تلاحظ اننا اضفنا training.users و ليس users مباشرة، و ذلك لأنه أحيانا قد لا يتعرف على الجدول فوجب تحديد قاعدة البيانات قبلا.
- ثانيا، القيام بعملية الـ Bind Parameters، و هي عملية توجب فعلها لتجنب أي تلاعب بالبيانات المدخلة او خلق ثغرات مثل SQL Injection، إذ في الإستعلام نقوم بإضافة الـ Reference للقيمة ( كما أشرنا هي :username ) و من أجل تحديد تلك القيمة نقوم بإستخدام bindparam() على كل قيمة من القيم، بحيث نقوم بتحديد الـ Reference في المعطى الأول، ثم القيمة في المعطى الثاني.
- ثالثا و أخيرا، نقوم بتنفيذ الـ statement التي تحمل كلا من الإستعلام و كل شيئ، نقوم بتنفيذها عن طريق امر execute()، من أجل التأكد من عملها، نقوم بإظهار رسالة مخصصة، في حالة حدوث أي خطأ سينتقل الى الـ Catch و سيظهر لنا خطأ من نوع PDOException .



اما النتيجة المحصلة عليها بعد تشغيل الكود و تحديث الصفحة، هو رسالة تُظهر لنا مرور البيانات و تسجيلها بنجاح في الصفحة، و عند الإنتقال الى قاعدة البيانات، يمكنك ان تلاحظ انه تمت إضافة البيانات في الجدول، و ستجد ان الـ ID أخذ الرقم 1 كما قمنا بتحديده Autoincrement.


- إضافة بيانات الى قاعدة البيانات بإستخدام Form :



الطريقة السابقة ليست عملية، هي فقط للشرح لأنه و من أجل إضافات بيانات، على المستخدم ان يضيف تلك البيانات الى صفحة الويب ثم تُضاف تلقائيا الى قواعد البيانات، من أجل فعل ذلك سنوفر Form بإستخدام الـ HTML ( نعم يمكن إدراج الـ HTML مع الـ Php في صفحة واحدة لا مشكلة في ذلك ) ثم سنوفر زر Submit، حين يقوم المستخدم بإضافة البيانات و النقر عليه يقوم بتسجيل البيانات التي ادخلها الى الجدول الخاص بنا و هو User، من أجل تحقيق ذلك، سنبدأ أولا بصناعة form بالشكل العادي الذي اعتدنا عليه في الـ HTML لكن هنا توجب الإنتباه الى 3 أشياء مهمة توجب جزراً إضافتها :
- الـ Action : وهو Attribute لوسم Form  نقوم من خلاله بتخصيص الصفحة التي سيتوجه إليها المستخدم من أجل تحقيق كود تسجيل البيانات و إضافتها، بالنسبة لنا سنضيف الكود  php في نفس الصفحة لذلك سنتركه فارغا لكن توجب إضافته.
- الـ Method : نستخدم مجموعة من الـ Methods من أجل إرسال او إستقبال البيانات من بينها POST و GET، في هذه الحالة سنقوم بإرسال البيانات لذلك سنستخدم POST، إن اردنا إستقبال بيانات من قاعدة البيانات الى صفحة الويب نستخدم GET، يمكن إستخدامهما أيضا لنفس الغرض مثل إستخدام GET للإرسال و الإستقبال، إلا ان GET تقوم بإظهار البيانات المرسلة في رابط الصفحة و هذا قد يسبب خطرا إن كنت ترسل معلومات حساسة مثل الباسوورد.
- و أخيرا الـ Name : و هو Attribute مثل class و id خاص بالـ input، نقوم بتحديده حتى نعرف الخانة او الحقل الذي سنقوم بجلب البيانات داخله و إرسالها.




إن قمنا بتحديث الصفحة سنحصل على الـ form جانبه ( قمنا بإضافة بعض الستايل البسيط من أجل التفرقة بين الحقول ) بعدها سننتقل لعملية الإرسال و تسجيل البيانات، و تنقسم العملية أيضا هنا لأقسام :
- أولا، علي معرفة إن كان المستخدم يرسل شيئا أولا ام فقط تحديث للصفحة، بما انني أستخدم نفس الصفحة فعلي التحقق من أي بيانات مرسلة أم لا، إن كانت هناك أي بيانات مرسلة أقوم بالبدئ في عملية حفظها في قاعدة البيانات، إن لم تكن هناك أي بيانات، أتجاهل الكود، لفعل ذلك نستخدم شرط if() و وسطه دالة isset() التي تتأكد من أن حقلا محددا يحمل قيمة ام لا، سأختار حقل username، لكن كيف أجلب قيمته ؟ اقوم بذلك عن طريق خاصية $_POST، أي اتحقق من أي قيمة تم إرسالها عن طريق الـ $_POST و بالضبط قيمة $_POST['username'] ( كما في السطر رقم 26 )، البعض قد يستخدم submit بدل username وهو أمر مباح كذلك و يمكن إستخدامه، فإن كان يحمل قيمة ( اي ان المستخدم ادخل شيئا ثم نقر submit ) سألج الى وسط الكود.
- ثانيا، الكود الخاص بإضافة البيانات هو نفسه المستخدم سابقا، قمنا هذه المرة فقط بتغيير الـ References و قيمتها في الـ bindparam و قمنا بإعطائها القيمة التي يحملها كل حقل، نجلب قيمة الحقل عن طريق $_POST كما أشرنا، و داخله نكتب الـ name الخاص بالحقل.

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




- حذف البيانات من قواعد البيانات : 


حان الوقت الآن لنقوم الآن بحذف بعض البيانات من قواعد البيانات، و هي عملية أخرى من عمليات الـ CRUD، لنقوم بذلك و بما اننا تقدمنا الآن قليلا في الدمج بين الـ HTML و الـ Php، سنقوم بإنشاء form بسيط يحمل حقلاً واحدا، هذا الحقل سنسمح للمستخدم من خلاله بكتابة رقم الـ ID للسطر او الـ Row الذي نريد حذفه، ثم عند النقر على زر Delete Data سنقوم بمعالجة طلبه و سنقوم بحذف ذلك السطر الذي ادخله المستخدم بكل بساطة، سنقوم أيضا بإستخدام تقنية $_POST من أجل جلب الـ id من الحقل الذي أدخله المستخدم، ثم التحقق من إدخاله ثم نقوم بحذفه، لا تقلق، سنستخدم $_GET كذلك في عمليات الـ CRUD القادمة فلا تقلق.



بنفس طريقة الـ Create او إضافة البيانات، تقوم عملية حذف البيانات من خلال 3 مراحل، أولا تحديد  الـ Statement او الـ Query الذي يقوم بالحذف، و هو كما نعلم في إستعلام الـ SQL هو الإستعلام الموجود في السطر رقم 28، من أجل حماية أنفسنا نقوم بتهيئته كما أشرنا في prepare()، مع تحديد الـ Reference على شكل :id .
ثم ثانيا، نقوم بإعطاء الـ Reference قيمته عن طريق الـ bindparameter، القيمة المستخرج بالطبع ستكون هي القيمة التي أدخلها المستخدم في حقل الـ HTML و نقوم بجلبها عن طريق الـ $_POST  ( كما في السطر 31 ).
و أخيرا نقوم بتطبيق كل شيئ عن طريق الـ execute() ، لكن قبلا، علينا التحقق إن كان المستخدم قد أدخل بيانات في الحقل أم لا، و ذلك عن طريق isset() كما في السطر 25 و كما في الفقرة السابقة، إن حدث أي مشكل، فلا نقلق، الـ PDOException سيفي بالغرض و يُظهر لنا خطأ و سنقوم بتصحيحه.

النتيجة ستكون كالتالي، سيظهر لنا form سيسمح لنا بإضافة الـ id الخاص و بمجرد النقر على Delete Data ستظهر لك رسالة انه تم حذف الرسالة، و إن تحققت من قاعدة البيانات و الجدول، ستجد انه تم حذفه.


إليك أيضا بعض النصائح الأخرى أثناء حذف البيانات، بالطبع المستخدم لا يعرف الـ ID، لذلك الحذف سيكون عن طريق الإسم او البريد الإلكتروني او حسب نوع المشروع، لذلك إستخدمنا هنا الـ ID فقط كتجربة، إن كنت تريد حذف مستخدم او البريد، فقط تلاعب بالـ Query في السطر 28 في الأعلى، و تغيير الـ Parameter في سطر Bindparameter. 


- البحث عن بيانات محددة ( واحدة ) من قواعد البيانات : 


هذه المرة سنستخدم الـ GET بدل الـ POST من أجل جلب البيانات، في هذه الفقرة سنقوم بجلب معلومات واحدة فقط مخصصة لسطر او ROW واحد فقط، سنقوم أولا و كما العادة بإنشاء Form بسيط، ثم نطلب من المستخدم كذلك إدخال الـ ID الخاص بالمستخدم الذي نريد جلب معلومات حوله، نقوم بتخزين ذلك الحقل في input يحمل إسم name = id ، لاحظ جيدا أن في الـ Method في الـ Form هذه المرة هي GET و ليس POST، بعدها سنقوم مباشرة بإستخراج القيمة التي قام المستخدم بإضافتها و سنقوم بإستغلالها من أجل تمرير الكود الذي سيجلب لنا البيانات.


إن قمت بالحفظ و تحديث الصفحة بتطبيق هذا الكود، فسيظهر لك في الأسفل كل من USERNAME و EMAIL فارغين، و ذلك لأنني أنا ( الأخرق 😅 ) قد نسيت إضافة الـ isset() من أجل التحقق من مرور البيانات ام لا، فلا تنسى أنت إضافتها، بعد التحقق منها، نمر مباشرة الى التقسيمات الثلاث المعتادة لمرور البيانات، إلا انه هذه المرة ستصير 4 تقسيمات :
- أولا، سنقوم بتهيئة الـ Query عن طريق إستعلام Select * ، إختيار النجمة يعني جلب كل البيانات، ثم بالضبط إجلب البيانات حين يكون الـ id مساويا للقيمة التي نريد تمريرها بالـ Reference.
- ثانيا، سنقوم بإعطاء قيمة الـ Reference عن طريق bindparam، القيمة التي سيُحصِّلها هي القيمة التي ادخلها المستخدم، و نقوم بجلبها عن طريق $_GET.
- ثالثا، نقوم بتنفيذ الإستعلام من أجل جلب البيانات في الكائن stmnt .
- و رابعا، من أجل الحصول على تلك البيانات المستخرجة و إستخدامها، نحتاج الى البحث عنها او جلبها و ذلك عبر fetch() التي تسمح لنا بجلب البيانات، لكنها تحتاج بدورها الى كائن من أجل تخزين تلك القيم، في هذه الحالة قمنا بتخزينها في كائن $data كما في السطر 23 .
الآن لدينا $data التي تعتبر Array تحمل المعطيات او نتيجة الإستعلام على شكل Key => Value، اي ان كل مفتاح لديه قيمة، إذ يحمل في مفتاح username قيمة الـ username، و مفتاح الـ email قيمة الـ email، من أجل إستخراج تلك القيمة نقوم بفتح قوسين و كتابة إسم الـ Column الموجود في قاعدة البيانات الذي نريد إستخراج قيمته.

بالطريقة التالية، فور كتابة الـ id ستظهر لك نتيجة الإستعلام، هنا قمنا بجلب فقط الـ username و الـ Email ، يمكن جلب أي نوع من البيانات لا مشكلة في ذلك، و بدل * في الإستعلام، يمكن تحديد فقط البيانات التي تريد انت تحصيلها دون الحاجة الى جلب كل البيانات كاملة، يبقى الأمر متعلقا بإستخدامك أنت للبيانات و طريقة إظهارها.

أيضا و لأننا نقوم هنا فقط بالشرح و ليس بمشروع حقيقي، توجب عليك كتابة جزء من الكود يقوم بإسترجاع رسالة في حالة عدم وجود أي نتائج او ستظهر لك الحقول فارغة، و لا تنسى تحديد isset() قبل الولوج في الكود. 


- جلب البيانات من قاعدة البيانات ( كل البيانات ) :


لا تقلق إن لم تستوعب الكود جانبه جيدا، فنحن سنشرح لك كل شيئ، أول شيئ سنقوم به هو تهيئة الـ Query كما العادة، هذه المرة سنقوم بإسترجاع كل البيانات الموجودة في جدول users ثم سنقوم بصتنيفها لاحقا، بعدها نقوم بتشغيل الإستعلام بإستخدام execute()، لأننا لا نستخدم اي Parameters في الإستعلام فلن نستخدم الـ bindparam هذه المرة، ثم بعدها سنقوم بإستخدام هذه المرة fetchAll() و ليس fetch() و الفرق واضح، فدالة fetchAll() تقوم بجلب كل البيانات و تخزينها مجددا على شكل Key=>value في $data .
الآن سنحتاج الى طريقة من أجل عرض البيانات بشكل منظم، لا نريد إظهارها بشكل عشوائي في هذا الشرح حتى يتسنى لنا رؤية النتائج بوضوح، لذلك سنستخدم الـ Tables في الـ  HTML من أجل اظهار البيانات العائدة بشكل أكثر تنظيما.




يمكننا أثناء كتابة كود برمجي بالـ php إستخدامه و إدراجه بالطريقة التي نريد في وسط الـ HTML عبر إغلاق الوسم و إعادة فتحه، سنقوم بعد جلب البيانات بإغلاق وسم الـ php و إعادة فتحه في الـ catch حتى يتسنى لنا جعل الوسط بين الكودين متاح لكتابة كود html، ثم سنقوم بكتابة كود صناعة Table في الـ HTML كما في الأعلى، عند الـ <tr> الثاني الذي سنضع فيه المحتوى المستخرج، سنقوم بعمل loop او حلقة تكرارية بإستخدام foreach إذ سنأخذ كل عنصر من الـ $data على شكل $row ثم نقوم بطباعة الـ Value او القيمة التي يحملها في الـ <td>، بذلك سنحصل على مجموع <tr> يساوي عدد البيانات، و في كل <td> القيم التي يحملها ذلك السطر.

اما النتيجة فهي كما في الجانب، يمكن إضافة الـ Cells في الـ table من أجل وضع خطوط الجدول، قمنا كذلك بإضافة بعض البيانات في الجدول من أجل إظهار بعض النتائج، الآن، و إن قمت بإضافة اي بيانات و إعادة تحميل الصفحة ستلاحظ انه تم إضافة بيانات أخرى في الجدول و إعادة تحميله، و بهذه الطريقة استظهر لك كل البيانات المخزنة في قواعد البيانات.




التعديل على البيانات :


في عمليات التعديل، سنحتاج أولا الى البحث عن القيمة عن طريق عملية البحث او Search المستخدمة سابقا، ثم نعيد القيم في Form مخصص، ثم نقوم بعدها بعملية التعديل، لذلك صفحتنا هذه المرة ستكون مقسمة لقسمين، القسم الأول من أجل البحث ( كما في الصورة الأولى ) إذ قمنا فقط بنسخ و لصق الكود السابق الخاص بالبحث، لكن هذه المرة بدل إرجاع القيمة في سطر واحد، قمنا بإغلاق كود الـ php ثم قمنا بإنشاء form، في وسط الـ form قمنا بإعطاء في الـ Attribute ذو عنوان value في وسم الـ input القيمة الخاصة به بإستخدام الـ php كما ترى في جميع الوسوم input في الصورة، قد تلاحظ أننا اضفنا كذلك خاصية Hidden في الوسم الخاص بالـ ID لأننا نريد إسترجاع الـ ID لكن لا نريد السماح للمستخدم بالتعديل عليه، لذلك سنقوم بإخفائه. تلقائيا، الـ form لن يظهر أثناء تحديث الصفحة، سيظهر فقط حين يتم البحث عن قيمة محددة، و عندما يظهر ستظهر الخانات و الحقول ممتلئة بالقيم التي جلبها أثناء البحث، و بذلك يمكننا المرور لعملية التعديل.





التعديل يشبه كثيرا الإضافة او الـ Create التي بدأنا بها هذا المقال، ستختلف الـ Query الآن لتكون Update ثم نقوم بإعطائها الحقول التي نريد إستبدالها، ثم الـ ID الخاص بالسطر الذي نريد إستبداله، لتظهر لنا في الأخير نتيجة مثل السطر 42 في الصورة الثانية أعلاه، بعدها سنقوم بجلب الـ References الموجودين في الإستعلام و إعطائهم قيمتهم الحقيقية عن طريق الـ POST، لاحظ هنا جيدا ان الـ Form الأول يحمل method = Get بينما الثاني method=Post و التفريق بينهما في الكود سيكون عن طريق isset() الذي سيتحقق من وجود الـ GET او الـ POST و يقوم بتشغيل الكود الملائم، هنا سيدرك النظام اننا نستخدم الـ POST اي الـ form الثاني الخاص بالتعديل، بعدها سيقوم بتشغيل الكود عن طريق execute()، و سيُظهر رسالة تم التعديل بنجاح، إن تحققت من الجدول، ستجد انه تم تعديل البيانات بنجاح.

وجب الإنتباه في هذه الفقرة جيدا الى التقسيم الخاص بالـ form حتى يعرف النظام متى يستخدم كل form على حدة و لا يمكنك تحقيق ذلك الا عن طريق الـ methods الموجودة في وسم form و تحديدها عبر الـ isset()، في الكود الخاص بنا، توجد هفوة بسيطة و هي ماذا لو حذف المستخدم المعلومات الموجودة في حقل معين ثم قام بإرسال التحديث، في هذه الحالة سيتم تعديل الحقل ليصبح فارغا، لذلك و مجددا توجب التحقق من ملئ الحقول، يمكن فعل ذلك بإستخدام الجافاسكربت او جيكويري، كذلك، يمكن للمستخدم من خلال Inspect Element ان يقوم بإظهار حقل الـ ID و تغييره، و هنا لا مشكلة، لأننا أصلا في الإستعلام لا نقوم بتغيير الـ ID .




وصلنا إلى نهاية مقالنا، و قمنا بإستعراض كل عمليات الـ CRUD و كيفية آدائها بإستخدام الـ PHP & Mysql بإستخدام تقنية الـ PDO، إن اردت تحميل ملفات هذا المشروع فقد قمنا برفعه على منصة Github و متاح للتحميل من هنا.




شاركه على :