البرمجة

تحديث بيانات MySQL باستخدام استعلامات قالبية في تقنية AJAX

في محاولتك لتحديث البيانات في قاعدة البيانات MySQL باستخدام نموذج HTML وتكنولوجيا AJAX في ملف PHP، تواجهك مشكلة حيث لا يتم تحديث البيانات بشكل صحيح ويظهر رسالة طلب واضحة من MySQL. تشير الصورة المرفقة إلى أن البيانات التي يتم تمريرها إلى استعلام SQL ليست صحيحة.

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

بدلاً من ذلك، يفضل استخدام استعلام SQL بشكل أنيق وآمن. يمكنك استخدام استعلام قالبي (Prepared Statements) لتجنب مشكلات أمان قاعدة البيانات وتفادي هجمات SQL Injection. في الكود أدناه، قمت بتعديل القسم المتعلق بالتحديث:

php
session_start(); error_reporting(0); $imie = $_POST['imie']; $nazwisko = $_POST['nazwisko']; $kodpocztowy = $_POST['kodpocztowy']; $ulica = $_POST['ulica']; $nrdomu = $_POST['nrdomu']; $nrmieszkania = $_POST['nrmieszkania']; $miasto = $_POST['miasto']; try { if (!@include_once('connect.php')) throw new Exception('connect.php kurwa nie istnieje</br>'); if (!file_exists('connect.php')) throw new Exception('connect.php nie istnieje</br>'); else require_once('connect.php'); } catch (Exception $e) { echo "Wiadomość: " . $e->getMessage(); echo "Kod: " . $e->getCode(); } require_once "connect.php"; $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name); // استخدام استعلام قالبي لتحديث البيانات بشكل آمن $query = $polaczenie->prepare("UPDATE adresy SET imie=?, nazwisko=?, kodpocztowy=?, ulica=?, nrdomu=?, nrmieszkania=?, miasto=? WHERE id=?"); $query->bind_param("sssssssi", $imie, $nazwisko, $kodpocztowy, $ulica, $nrdomu, $nrmieszkania, $miasto, $_SESSION['id']); if ($query->execute()) { $query->close(); $polaczenie->close(); echo "Good!"; } else { $query->close(); $polaczenie->close(); echo "Not good!"; } ?>

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

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

في ملف PHP الذي قدمته، يظهر أنك قمت بتعيين المتغيرات المرتبطة بالحقول في نموذج HTML، ثم قمت بتشغيل استعلام SQL باستخدام printf لإنشاء الاستعلام. ومع ذلك، هذا النهج قد يؤدي إلى مشاكل في أمان قاعدة البيانات، حيث يتيح فرصة لحدوث هجمات SQL Injection.

لتوضيح، عند استخدام printf، يمكن للمهاجمين إدخال بيانات ضارة مباشرة في الاستعلام SQL، مما يعرض التطبيق للهجمات. لذا، يُفضل استخدام استعلامات قالبية (Prepared Statements) ودوال الربط مثل bind_param لتجنب هذه المشكلة.

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

علاوة على ذلك، قمت بتفعيل استخدام جملة session_start() في بداية الكود للعمل بجلسات الأيام.

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

مقالات ذات صلة

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

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!