Rol Ian نشر 7 فبراير أرسل تقرير نشر 7 فبراير (معدل) <?php require_once('database.php'); if ($_SERVER["REQUEST_METHOD"] == "POST") { $fullname = $_POST["FName"]; $email = $_POST["Email"]; $feedback = $_POST["feedback"]; if (empty($fullname) || empty($email) || empty($feedback)) { echo "Please fill in all required fields."; return; } $sql = "INSERT INTO feedback (full_name, email, feedback) VALUES ($fullname, $email, $feedback)"; $stmt = $conn->prepare($sql); $stmt->bindParam(":fullname", $fullname); $stmt->bindParam(":Email", $email); $stmt->bindParam(":feedback", $feedback); try { $stmt->execute(); echo "Feedback submitted successfully!"; } catch(PDOException $e) { echo "Error submitting feedback: " . $e->getMessage(); } } ?> feedback.php <?php $hostName = "localhost"; $dbUser = "root"; $dbPassword = ""; $dbName = "feedBack"; $conn = mysqli_connect($hostName, $dbUser, $dbPassword, $dbName); if (!$conn) { die("Something went wrong;"); } ?> database.php وظيفة صفحة feedback.php تجعل المستخدم يدخل بيانات وتضاف في جدول في قاعد البيانات ولكن عندما يضغط إرسال ذلك لا يعمل تم التعديل في 7 فبراير بواسطة Rol Ian 2 اقتباس
0 Khaled Osama3 نشر 7 فبراير أرسل تقرير نشر 7 فبراير بتاريخ 3 دقائق مضت قال Rol Ian: يرجي ملاحظه ان الكود المرسل لا يحتوي علي إغلاق تعليمة if بقافلة } يجب ان تضع علامه } بعد هذا السطر mysqli_stmt_close($stmt); وقبل هذا السطر ?>. 1 اقتباس
0 Khaled Osama3 نشر 7 فبراير أرسل تقرير نشر 7 فبراير يوجد بعض الاخطاء: في ملف الاتصال بقاعدة البيانات، يبدو أن هناك بعض التباس بين استخدام mysqli وPDO. كلاهما طريقتين ممتازتين للتفاعل مع قاعدة البيانات، لكن عليك ان تختار واحده فقط من بينهم؛ اختر إما mysqli أو PDO واستخدمها consistent في جميع أنحاء مشروعك. عند كتابة استعلامات SQL، من المهم جدًا تجنب الحقن لكود خبيث في قاعدة بياناتك. تخيل أنك تكتب رسالة سرية وتريد التأكد من أن الشخص الوحيد الذي يمكنه فهمها هو الشخص المقصود. استخدام العلامات الاستفهام (?) أو الأسماء المستعارة (:placeholder) في استعلاماتك يشبه استخدام رموز سرية تضمن أن الرسالة (البيانات) تصل بأمان وبالطريقة التي تريدها. لحماية قاعدة البيانات من اللصوص الرقميين الذين يحاولون "حقن" كود خبيث لسرقة البيانات أو التسبب في الفوضى، من الضروري استخدام طرق الربط مثل bindParam أو bindValue. هذا يشبه وضع قفل إلكتروني متطور على باب منزلك يتطلب مفاتيح رقمية خاصة للدخول. بهذه الطريقة، تضمن أن تطبيقك يتحدث مع قاعدة البيانات بلغة مشفرة وآمنة، مما يحمي معلوماتك ويجعل تجربة المستخدم أكثر أمانًا واستقرارًا. إذا قررت الاستمرار باستخدام PDO، إليك كيفية تحديث الكود: في feedback.php: // تأكد من أن الاستعلام يستخدم الأسماء المستعارة $sql = "INSERT INTO feedback (full_name, email, feedback) VALUES (:fullname, :email, :feedback)"; $stmt = $conn->prepare($sql); // ربط القيم بالأسماء المستعارة باستخدام bindParam $stmt->bindParam(":fullname", $fullname); $stmt->bindParam(":email", $email); $stmt->bindParam(":feedback", $feedback); try { $stmt->execute(); echo "Feedback submitted successfully!"; } catch(PDOException $e) { echo "Error submitting feedback: " . $e->getMessage(); } وفي database.php، إذا كنت تريد استخدام PDO بدلاً من mysqli: $hostName = "localhost"; $dbUser = "root"; $dbPassword = ""; $dbName = "feedBack"; // استخدام PDO للاتصال بقاعدة البيانات try { $conn = new PDO("mysql:host=$hostName;dbname=$dbName", $dbUser, $dbPassword); // تعيين وضع الخطأ PDO ليكون exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { die("Something went wrong: " . $e->getMessage()); } بعد فعل هذه التغييرات، يمكنك ان تجرب مره اخري ان تدخل بيانات وستسجل في قاعده البيانات. 1 اقتباس
0 Mustafa Suleiman نشر 7 فبراير أرسل تقرير نشر 7 فبراير أنت لم تقم بتضمين القيم المراد إدخالها في استعلام SQL بشكل صحيح، هناك أيضًا بعض الأخطاء الأخرى: استخدم اقتباسات للقيم النصية في استعلام SQL. لاحظ أنه يجب عليك استخدام اسماء الاعمدة المراد إدخال البيانات فيها بين قوسين في INSERT INTO. استخدم اسماء المتغيرات بشكل صحيح مع استعلام الإدخال. استخدم اسماء المتغيرات الصحيحة مع bindParam(). <?php require_once('database.php'); if ($_SERVER["REQUEST_METHOD"] == "POST") { $fullname = $_POST["FName"]; $email = $_POST["Email"]; $feedback = $_POST["feedback"]; if (empty($fullname) || empty($email) || empty($feedback)) { echo "Please fill in all required fields."; return; } // تحسين استعلام SQL لتضمين قيم النص داخل اقتباسات $sql = "INSERT INTO feedback (full_name, email, feedback) VALUES (:fullname, :email, :feedback)"; $stmt = $conn->prepare($sql); // ربط القيم المستخدمة مع معلمات الاستعلام باستخدام bindParam() $stmt->bindParam(":fullname", $fullname); $stmt->bindParam(":email", $email); $stmt->bindParam(":feedback", $feedback); try { $stmt->execute(); echo "Feedback submitted successfully!"; } catch(PDOException $e) { echo "Error submitting feedback: " . $e->getMessage(); } } ?> بالطبع من المهم التأكد من أن متغيرات النموذج (مثل "FName" و "Email" و "feedback") تتطابق بالضبط مع الأسماء المستخدمة في نموذج HTML. 1 اقتباس
0 Rol Ian نشر 7 فبراير الكاتب أرسل تقرير نشر 7 فبراير (معدل) وإذا أردت استخدام mysqli هل تكون التعديلات هكذا؟ لأن الصفحات الأخرى كتبتها بطريقة mysqli $sql = "INSERT INTO feedback (full_name, email, feedBack) VALUES (?, ?, ?)"; $stmt = mysqli_stmt_init($conn); $prepareStmt = mysqli_stmt_prepare($stmt,$sql); if ($prepareStmt) { mysqli_stmt_bind_param($stmt,"sss",$fullName, $email, $feedback); mysqli_stmt_execute($stmt); echo "<div class='alert alert-success'> successfully.</div>"; }else{ die("Something went wrong"); } } بتاريخ 21 دقائق مضت قال Khaled Osama3: يوجد بعض الاخطاء: في ملف الاتصال بقاعدة البيانات، يبدو أن هناك بعض التباس بين استخدام mysqli وPDO. كلاهما طريقتين ممتازتين للتفاعل مع قاعدة البيانات، لكن عليك ان تختار واحده فقط من بينهم؛ اختر إما mysqli أو PDO واستخدمها consistent في جميع أنحاء مشروعك. عند كتابة استعلامات SQL، من المهم جدًا تجنب الحقن لكود خبيث في قاعدة بياناتك. تخيل أنك تكتب رسالة سرية وتريد التأكد من أن الشخص الوحيد الذي يمكنه فهمها هو الشخص المقصود. استخدام العلامات الاستفهام (?) أو الأسماء المستعارة (:placeholder) في استعلاماتك يشبه استخدام رموز سرية تضمن أن الرسالة (البيانات) تصل بأمان وبالطريقة التي تريدها. لحماية قاعدة البيانات من اللصوص الرقميين الذين يحاولون "حقن" كود خبيث لسرقة البيانات أو التسبب في الفوضى، من الضروري استخدام طرق الربط مثل bindParam أو bindValue. هذا يشبه وضع قفل إلكتروني متطور على باب منزلك يتطلب مفاتيح رقمية خاصة للدخول. بهذه الطريقة، تضمن أن تطبيقك يتحدث مع قاعدة البيانات بلغة مشفرة وآمنة، مما يحمي معلوماتك ويجعل تجربة المستخدم أكثر أمانًا واستقرارًا. إذا قررت الاستمرار باستخدام PDO، إليك كيفية تحديث الكود: في feedback.php: // تأكد من أن الاستعلام يستخدم الأسماء المستعارة $sql = "INSERT INTO feedback (full_name, email, feedback) VALUES (:fullname, :email, :feedback)"; $stmt = $conn->prepare($sql); // ربط القيم بالأسماء المستعارة باستخدام bindParam $stmt->bindParam(":fullname", $fullname); $stmt->bindParam(":email", $email); $stmt->bindParam(":feedback", $feedback); try { $stmt->execute(); echo "Feedback submitted successfully!"; } catch(PDOException $e) { echo "Error submitting feedback: " . $e->getMessage(); } وفي database.php، إذا كنت تريد استخدام PDO بدلاً من mysqli: $hostName = "localhost"; $dbUser = "root"; $dbPassword = ""; $dbName = "feedBack"; // استخدام PDO للاتصال بقاعدة البيانات try { $conn = new PDO("mysql:host=$hostName;dbname=$dbName", $dbUser, $dbPassword); // تعيين وضع الخطأ PDO ليكون exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { die("Something went wrong: " . $e->getMessage()); } بعد فعل هذه التغييرات، يمكنك ان تجرب مره اخري ان تدخل بيانات وستسجل في قاعده البيانات. تم التعديل في 7 فبراير بواسطة Rol Ian 1 اقتباس
0 Khaled Osama3 نشر 7 فبراير أرسل تقرير نشر 7 فبراير بتاريخ 6 دقائق مضت قال Rol Ian: وإذا أردت استخدام mysqli هل تكون التعديلات هكذا؟ $sql = "INSERT INTO feedback (full_name, email, feedBack) VALUES (?, ?, ?)"; $stmt = mysqli_stmt_init($conn); $prepareStmt = mysqli_stmt_prepare($stmt,$sql); if ($prepareStmt) { mysqli_stmt_bind_param($stmt,"sss",$fullName, $email, $feedback); mysqli_stmt_execute($stmt); echo "<div class='alert alert-success'> successfully.</div>"; }else{ die("Something went wrong"); } } نعم، إذا أردت استخدام mysqli بدلاً من PDO، فهذه هي الطريقة الصحيحة لتحضير الاستعلام وتنفيذه بشكل آمن لمنع هجمات الحقن الـ SQL. ومع ذلك، يمكن تحسين الكود قليلاً لجعله أكثر وضوحًا وفعالية. إليك النسخة المحسنة: // الاستعلام مع العلامات الاستفهام كعناصر نائبة للقيم $sql = "INSERT INTO feedback (full_name, email, feedback) VALUES (?, ?, ?)"; // تحضير الاستعلام $stmt = mysqli_prepare($conn, $sql); // التحقق من تحضير الاستعلام بشكل صحيح if (!$stmt) { die("Something went wrong: " . mysqli_error($conn)); } // ربط القيم المدخلة بالعناصر النائبة في الاستعلام mysqli_stmt_bind_param($stmt, "sss", $fullname, $email, $feedback); // تنفيذ الاستعلام if (mysqli_stmt_execute($stmt)) { echo "<div class='alert alert-success'>Feedback submitted successfully.</div>"; } else { echo "<div class='alert alert-danger'>Error submitting feedback: " . mysqli_stmt_error($stmt) . "</div>"; } // إغلاق البيان mysqli_stmt_close($stmt); لاحظ أنني استخدمت mysqli_error($conn) لطباعة الخطأ مباشرة إذا فشلت عملية التحضير، وmysqli_stmt_error($stmt) لطباعة الخطأ إذا فشلت عملية التنفيذ هذا يساعدك لتتمكن من تشخيص المشكلات بدقة وفعالية. بالإضافة إلى ذلك، يجب دائما إغلاق البيان بعد الانتهاء منه باستخدام mysqli_stmt_close($stmt) لتضمن أن تطبيقك لا يستهلك موارد أكثر مما يحتاج ويبقى خادمك أو جهازك يعمل بسلاسة وفعالية، مما يساعد على تجنب المشاكل المحتملة المتعلقة بالأداء أو الذاكرة. 1 اقتباس
0 Rol Ian نشر 7 فبراير الكاتب أرسل تقرير نشر 7 فبراير بتاريخ 3 دقائق مضت قال Khaled Osama3: نعم، إذا أردت استخدام mysqli بدلاً من PDO، فهذه هي الطريقة الصحيحة لتحضير الاستعلام وتنفيذه بشكل آمن لمنع هجمات الحقن الـ SQL. ومع ذلك، يمكن تحسين الكود قليلاً لجعله أكثر وضوحًا وفعالية. إليك النسخة المحسنة: // الاستعلام مع العلامات الاستفهام كعناصر نائبة للقيم $sql = "INSERT INTO feedback (full_name, email, feedback) VALUES (?, ?, ?)"; // تحضير الاستعلام $stmt = mysqli_prepare($conn, $sql); // التحقق من تحضير الاستعلام بشكل صحيح if (!$stmt) { die("Something went wrong: " . mysqli_error($conn)); } // ربط القيم المدخلة بالعناصر النائبة في الاستعلام mysqli_stmt_bind_param($stmt, "sss", $fullname, $email, $feedback); // تنفيذ الاستعلام if (mysqli_stmt_execute($stmt)) { echo "<div class='alert alert-success'>Feedback submitted successfully.</div>"; } else { echo "<div class='alert alert-danger'>Error submitting feedback: " . mysqli_stmt_error($stmt) . "</div>"; } // إغلاق البيان mysqli_stmt_close($stmt); لاحظ أنني استخدمت mysqli_error($conn) لطباعة الخطأ مباشرة إذا فشلت عملية التحضير، وmysqli_stmt_error($stmt) لطباعة الخطأ إذا فشلت عملية التنفيذ هذا يساعدك لتتمكن من تشخيص المشكلات بدقة وفعالية. بالإضافة إلى ذلك، يجب دائما إغلاق البيان بعد الانتهاء منه باستخدام mysqli_stmt_close($stmt) لتضمن أن تطبيقك لا يستهلك موارد أكثر مما يحتاج ويبقى خادمك أو جهازك يعمل بسلاسة وفعالية، مما يساعد على تجنب المشاكل المحتملة المتعلقة بالأداء أو الذاكرة. <?php require_once('database.php'); if ($_SERVER["REQUEST_METHOD"] == "POST") { $fullname = $_POST["FName"]; $email = $_POST["Email"]; $feedback = $_POST["feedback"]; if (empty($fullname) || empty($email) || empty($feedback)) { echo "Please fill in all required fields."; return; } $sql = "INSERT INTO feedback (full_name, email, feedback) VALUES (?, ?, ?)"; $stmt = mysqli_prepare($conn, $sql); if (!$stmt) { die("Something went wrong: " . mysqli_error($conn)); } mysqli_stmt_bind_param($stmt, "sss", $fullname, $email, $feedback); if (mysqli_stmt_execute($stmt)) { echo "<div class='alert alert-success'>Feedback submitted successfully.</div>"; } else { echo "<div class='alert alert-danger'>Error submitting feedback: " . mysqli_stmt_error($stmt) . "</div>"; } mysqli_stmt_close($stmt); ?> لازال لايعمل 1 اقتباس
0 Khaled Osama3 نشر 7 فبراير أرسل تقرير نشر 7 فبراير بتاريخ 7 دقائق مضت قال Rol Ian: <?php require_once('database.php'); if ($_SERVER["REQUEST_METHOD"] == "POST") { $fullname = $_POST["FName"]; $email = $_POST["Email"]; $feedback = $_POST["feedback"]; if (empty($fullname) || empty($email) || empty($feedback)) { echo "Please fill in all required fields."; return; } $sql = "INSERT INTO feedback (full_name, email, feedback) VALUES (?, ?, ?)"; $stmt = mysqli_prepare($conn, $sql); if (!$stmt) { die("Something went wrong: " . mysqli_error($conn)); } mysqli_stmt_bind_param($stmt, "sss", $fullname, $email, $feedback); if (mysqli_stmt_execute($stmt)) { echo "<div class='alert alert-success'>Feedback submitted successfully.</div>"; } else { echo "<div class='alert alert-danger'>Error submitting feedback: " . mysqli_stmt_error($stmt) . "</div>"; } mysqli_stmt_close($stmt); ?> لازال لايعمل ارجو ارسال رساله الخطأ الذي تظهر لك. يرجي ملاحظه ان الكود المرسل لا يحتوي علي إغلاق تعليمة if بقافلة }. اقتباس
0 Rol Ian نشر 7 فبراير الكاتب أرسل تقرير نشر 7 فبراير بتاريخ 3 دقائق مضت قال Khaled Osama3: ارجو ارسال رساله الخطأ الذي تظهر لك. يرجي ملاحظه ان الكود المرسل لا يحتوي علي إغلاق تعليمة if بقافلة }. 1 اقتباس
0 Rol Ian نشر 7 فبراير الكاتب أرسل تقرير نشر 7 فبراير بتاريخ 1 دقيقة مضت قال Khaled Osama3: يرجي ملاحظه ان الكود المرسل لا يحتوي علي إغلاق تعليمة if بقافلة } يجب ان تضع علامه } بعد هذا السطر mysqli_stmt_close($stmt); وقبل هذا السطر ?>. إنه بالفعل يعمل 1 اقتباس
السؤال
Rol Ian
feedback.php
database.php
وظيفة صفحة feedback.php تجعل المستخدم يدخل بيانات وتضاف في جدول في قاعد البيانات ولكن عندما يضغط إرسال ذلك لا يعمل
9 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.