البرمجة

تحديث حقول قاعدة بيانات MySQLi

لديك مشكلة في تحديث الحقول في قاعدة البيانات MySQLi حيث يتم تحديث جميع الحقول بدلاً من الحقل الواحد الذي تقوم بتعديله. هذا يحدث بسبب أنك تستخدم قيم المتغيرات $_POST دون فصل الحقول التي تم تعديلها عن الحقول التي لم يتم تعديلها.

لحل هذه المشكلة، يمكنك استخدام متغيرات مختلفة لتخزين القيم المحدثة وتحديثها بشكل منفصل في الاستعلام SQL. هناك أيضًا خطأ في الجملة الشرطية WHERE حيث يجب أن تقوم بمقارنة الحقل cod بقيمة محددة، وليس بالقيمة cod.

الصفحة الأولى:

php
// قم بتخزين القيم التي تم تعديلها في متغيرات مختلفة $tipo = $_POST["tipo"]; $capacidade = $_POST["capacidade"]; $preco = $_POST["preco"]; $reservado = $_POST["reservado"]; // قم بإضافة الأمر الذي يقوم بتحديث البيانات بشكل منفصل $sql = "UPDATE quartos SET tipo = '$tipo', capacidade = '$capacidade', preco = '$preco', reservado = '$reservado' WHERE cod = $cod"; // تأكد من تنفيذ الاستعلام والتحقق من نجاح التحديث if ($conn->query($sql) === TRUE) { echo "تم تحديث البيانات بنجاح!"; header("Location: quartos.php"); } else { echo "حدث خطأ أثناء تحديث البيانات! " . $conn->error; header("Location: quartos.php"); } ?>

يرجى ملاحظة أن الكود يحتاج إلى التحقق من البيانات المدخلة لتجنب هجمات الحقن القائمة على البيانات.

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

إذا كنت ترغب في مزيد من المعلومات حول كيفية تحديث حقول محددة في قاعدة البيانات MySQLi دون تحديث الحقول الأخرى، يمكنك استخدام طريقة أخرى لبناء الاستعلام SQL باستخدام PHP. في هذه الحالة، ستقوم ببناء الاستعلام الذي يحتوي فقط على الحقول التي تم تعديلها، وذلك باستخدام دالة mysqli_real_escape_string لتجنب هجمات الحقن القائمة على البيانات.

قم بتعديل الصفحة الثانية كما يلي:

php
$servername = "localhost"; $username = "root"; $password = ""; $dbname = "hotel_vaniet"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // تأكد من أن البيانات المدخلة آمنة $tipo = mysqli_real_escape_string($conn, $_POST["tipo"]); $capacidade = mysqli_real_escape_string($conn, $_POST["capacidade"]); $preco = mysqli_real_escape_string($conn, $_POST["preco"]); $reservado = mysqli_real_escape_string($conn, $_POST["reservado"]); $cod = mysqli_real_escape_string($conn, $_GET["cod"]); // بناء الاستعلام الذي يحدث فقط الحقول التي تم تعديلها $sql = "UPDATE quartos SET "; if (!empty($tipo)) { $sql .= "tipo = '$tipo', "; } if (!empty($capacidade)) { $sql .= "capacidade = '$capacidade', "; } if (!empty($preco)) { $sql .= "preco = '$preco', "; } if (!empty($reservado)) { $sql .= "reservado = '$reservado', "; } $sql = rtrim($sql, ", "); // إزالة الفاصلة الأخيرة $sql .= " WHERE cod = $cod"; // تنفيذ الاستعلام والتحقق من نجاح التحديث if ($conn->query($sql) === TRUE) { echo "تم تحديث البيانات بنجاح!"; header("Location: quartos.php"); } else { echo "حدث خطأ أثناء تحديث البيانات! " . $conn->error; header("Location: quartos.php"); } $conn->close(); ?>

تأكد من إضافة التحقق من البيانات المدخلة في كل حقل لتجنب تحديثه بشكل غير مقصود.

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