فيما يتعلق بالكود الذي قدمته، يظهر أنك تقوم بمحاولة تحديث سجل في جدول قاعدة البيانات باستخدام لغة 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);
بعد تعديل الكود وإزالة علامات التنصيص الزائدة، يجب أن يكون الكود كالتالي:
phpinclude_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 الخاص بك وتجنب بعض الأخطاء الشائعة.
-
فحص نجاح التنفيذ:
يفضل دائمًا فحص نجاح تنفيذ الاستعلام. يمكنك استخدام الدالةrowCount()
للتحقق من عدد الصفوف التي تم تحديثها. على سبيل المثال:php$rowCount = $preparedStatement->rowCount(); if ($rowCount > 0) { echo "تم تحديث السجل بنجاح."; } else { echo "لم يتم تحديث أي سجل."; }
-
تحسين الأمان:
استخدام تعبير$_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);
-
إعداد الاتصال بقاعدة البيانات:
تأكد من أن اتصال قاعدة البيانات ($bdd
) قد تم إعداده بشكل صحيح في ملف “connexionMysql.php”.phptry { $bdd = new PDO('mysql:host=hostname;dbname=databasename', 'username', 'password'); } catch (PDOException $e) { echo 'فشل الاتصال بقاعدة البيانات: ' . $e->getMessage(); }
حيث يجب عليك استبدال
hostname
وdatabasename
وusername
وpassword
بقيم فعلية. -
تحسين رسائل الخطأ:
قم بتفعيل وضع عرض الأخطاء (error_reporting
) وتفعيل عرض الأخطاء (display_errors
) لتسهيل تحديد وتصحيح الأخطاء.phperror_reporting(E_ALL); ini_set('display_errors', 1);
-
تجنب استخدام
GET
لعمليات التحديث:
استخدامGET
لتنفيذ عمليات تحديث يمكن أن يكون غير آمنًا. يُفضل استخدامPOST
للتفادي من هجمات Cross-Site Request Forgery (CSRF).phpif(isset($_POST['valider'])){ // تحديث السجل هنا }
تطبيق هذه التوجيهات يساعد على جعل الكود أكثر أمانًا وأداء، ويزيد من إمكانية تحديد وتصحيح الأخطاء في حال حدوثها.