البرمجة

تحديث بيانات MySQL باستخدام PHP وPDO: إصلاح الأخطاء

فيما يتعلق بالكود الذي قدمته، يظهر أنك تقوم بمحاولة تحديث سجل في جدول قاعدة البيانات باستخدام لغة PHP وPDO. ومع ذلك، يبدو أن هناك بعض الأخطاء النحوية في الكود تجعله لا يعمل كما هو متوقع. سأقوم بتوضيح بعض النقاط التي يمكن أن تكون سببًا في عدم تحديث السجل بالطريقة المرجوة.

أولًا، في جملة الـ UPDATE، لا تحتاج إلى استخدام علامات التنصيص حول الرموز المستخدمة في الاستعلام. يجب عليك كتابتها بدون علامات التنصيص، كما يظهر في المثال التالي:

php
$preparedStatement = $bdd->prepare("UPDATE AY_albums SET titre=:titreIci WHERE id=:idIci");

في السطر أعلاه، لاحظ أنني قمت بإزالة علامات التنصيص حول :titreIci و :idIci.

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

php
$preparedStatement->bindValue(':titreIci', $titreIci); $preparedStatement->bindValue(':idIci', $idIci);

بعد تعديل الكود وإزالة علامات التنصيص الزائدة، يجب أن يكون الكود كالتالي:

php
include_once("connexionMysql.php"); if(isset($_GET['valider'])){ $titreIci=$_GET['titre']; $idIci=(int)$_GET['id']; $preparedStatement = $bdd->prepare("UPDATE AY_albums SET titre=:titreIci WHERE id=:idIci"); $preparedStatement->bindValue(':titreIci', $titreIci); $preparedStatement->bindValue(':idIci', $idIci); $preparedStatement->execute(); } header("Location: pageDaccueilAdmin.php");

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

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

بالطبع، سأقدم لك المزيد من المعلومات حول كيفية تحسين كود الـ PHP الخاص بك وتجنب بعض الأخطاء الشائعة.

  1. فحص نجاح التنفيذ:
    يفضل دائمًا فحص نجاح تنفيذ الاستعلام. يمكنك استخدام الدالة rowCount() للتحقق من عدد الصفوف التي تم تحديثها. على سبيل المثال:

    php
    $rowCount = $preparedStatement->rowCount(); if ($rowCount > 0) { echo "تم تحديث السجل بنجاح."; } else { echo "لم يتم تحديث أي سجل."; }
  2. تحسين الأمان:
    استخدام تعبير $_GET مباشرة في الاستعلام يجعل التطبيق عرضة لهجمات حقن SQL. يفضل استخدام الحماية من هذا النوع من الهجمات باستخدام تعبيرات مثل htmlspecialchars أو استخدام الدوال المخصصة مثل filter_input.

    php
    $titreIci = filter_input(INPUT_GET, 'titre', FILTER_SANITIZE_STRING); $idIci = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
  3. إعداد الاتصال بقاعدة البيانات:
    تأكد من أن اتصال قاعدة البيانات ($bdd) قد تم إعداده بشكل صحيح في ملف “connexionMysql.php”.

    php
    try { $bdd = new PDO('mysql:host=hostname;dbname=databasename', 'username', 'password'); } catch (PDOException $e) { echo 'فشل الاتصال بقاعدة البيانات: ' . $e->getMessage(); }

    حيث يجب عليك استبدال hostname و databasename و username و password بقيم فعلية.

  4. تحسين رسائل الخطأ:
    قم بتفعيل وضع عرض الأخطاء (error_reporting) وتفعيل عرض الأخطاء (display_errors) لتسهيل تحديد وتصحيح الأخطاء.

    php
    error_reporting(E_ALL); ini_set('display_errors', 1);
  5. تجنب استخدام GET لعمليات التحديث:
    استخدام GET لتنفيذ عمليات تحديث يمكن أن يكون غير آمنًا. يُفضل استخدام POST للتفادي من هجمات Cross-Site Request Forgery (CSRF).

    php
    if(isset($_POST['valider'])){ // تحديث السجل هنا }

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

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