البرمجة

تحسين أمان وأداء شيفرة PHP

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

  1. استخدام دالة mysql_query() مرتين:
    في السطر الثاني، تقوم بتنفيذ الاستعلام mysql_query("SELECT * FROM users") وتخزين نتيجته في $sql. ومن ثم، تقوم بتمرير هذا الاستعلام مرة أخرى إلى دالة mysql_query() في السطر الثالث. الصحيح هو استخدام mysql_query() مرة واحدة فقط.

  2. استخدام دالة mysql_query() بشكل غير صحيح:
    عليك استخدام دالة mysql_query() مع استعلام SQL فقط، وليس مع نتيجة استعلام SQL كما في السطر الثالث. يجب عليك استخدام mysql_fetch_assoc() مباشرة على نتيجة mysql_query().

  3. فحص النتائج قبل استخدام mysql_fetch_assoc():
    يجب عليك التأكد من أن الاستعلام ينتج نتائج صالحة قبل استخدام mysql_fetch_assoc()، وهذا يمكنك القيام به بالتحقق من قيمة $query للتأكد مما إذا كانت ناجحة أم لا.

بناءً على التحليل أعلاه، إليك الشيفرة المصححة:

php
if($_SERVER['REQUEST_METHOD'] == "POST") { $sql = "SELECT * FROM users"; $query = mysql_query($sql); if($query) { $json = array(); // create empty array $i = 0; // start a counter while($result = mysql_fetch_assoc($query)) { $json[$i]['name'] = $result['name']; $json[$i]['email'] = $result['email']; $i++; } if(count($json) > 0) { echo json_encode($json); // output JSON data } else { $json = array( "msg" => "No information Found"); echo json_encode($json); // output JSON data } } else { $json = array( "msg" => "Query failed"); echo json_encode($json); // output JSON data } header('Content-type: application/json'); }

هذا الكود المعدل يقوم بإجراء الخطوات التالية:

  • يُصحح الطريقة التي تُستخدم بها mysql_query() بمرة واحدة فقط.
  • يتم التحقق مما إذا كانت الاستعلامات ناجحة قبل استخدام mysql_fetch_assoc() لضمان عدم وجود أخطاء.
  • يقوم بإرسال البيانات المستردة كـ JSON باستخدام json_encode().

يُنصح بأن تبدأ في التحول إلى استخدام استعلامات mysqli أو PDO بدلاً من استخدام الدوال المتهالكة مثل mysql_query() وذلك لأسباب أمان ودعم وظيفيات حديثة أكبر.

المزيد من المعلومات

بالطبع، إليك المزيد من المعلومات حول الأمور التي يمكن تحسينها في الكود وبعض التوجيهات الإضافية:

  1. استخدام استعلامات مُعدة بشكل صحيح:
    عند كتابة استعلام SQL في الشيفرة PHP، يجب التأكد من تجنب استخدام قيم المتغيرات مباشرة في الاستعلام، خاصةً إذا كانت هذه القيم تأتي من بيانات المُستخدم. يجب استخدام تقويم الاستعلامات المُعدة مسبقًا لمنع هجمات الحقن SQL.

  2. استخدام الاتصال بقاعدة البيانات بطريقة أكثر أمانًا:
    يُفضل استخدام اتصالات PDO أو MySQLi بدلاً من الميزة المهجورة mysql_*، حيث توفر هذه الأساليب أساليب أكثر أمانًا للتفاعل مع قواعد البيانات وتدعم التحكم في الحماية ضد هجمات الحقن SQL.

  3. تنظيم الكود وتقسيمه إلى وحدات منطقية:
    قد يسهل تنظيم الشيفرة وصيانته عن طريق تقسيمه إلى وحدات صغيرة تؤدي كل منها وظيفة محددة، مثل وحدة لإجراء الاستعلامات ووحدة لتنسيق البيانات قبل إرجاعها كاستجابة.

  4. معالجة الأخطاء والاستثناءات بشكل صحيح:
    يُنصح بمعالجة الأخطاء والاستثناءات بشكل صحيح داخل الكود لضمان عملية تشغيل سلسة وتجنب ظهور رسائل الخطأ المفاجئة للمُستخدمين.

  5. توثيق الشيفرة:
    قم بإضافة تعليقات ووثائق للشيفرة لتسهيل فهمها للمُطورين الآخرين ولنفسك في المستقبل. يساعد هذا أيضًا في توثيق الوظائف المهمة وكيفية استخدامها.

  6. استخدام مكتبات جاهزة:
    قد توجد مكتبات جاهزة تسهل عليك التعامل مع قواعد البيانات والاستجابة بتنسيق JSON، فتحقق من وجود مثل هذه المكتبات واستخدمها إذا كان ذلك مناسبًا لمشروعك.

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

زر الذهاب إلى الأعلى