ايمن ميلاد نشر 2 ديسمبر 2023 أرسل تقرير نشر 2 ديسمبر 2023 السلام عليكم ورحمة الله وبركاته لدي كود التالي لتعديل بيانات لماذا عندما اطبع متغير يظهر كاملا اسم مستخدما لكن عندما اطبعه داخل input يطبع اول كلمة فقط مثلا اريد تعديل اسم تالي محمد خالد احمد يطبعه لكن انا اريد طبعه داخل input يطبعه محمد فقط مرفق كود ياريت تعديل من اخوة وكيف حماية مدخلات من حقن sql وطباعة html داخل input وبارك الله فيكم جميعا تحياتي . update.php اقتباس
1 Khaled Osama3 نشر 2 ديسمبر 2023 أرسل تقرير نشر 2 ديسمبر 2023 المشكلة التي تواجهها تحدث عندما تقوم بإدراج قيمة متغير داخل `input` في النموذج، حيث يجب أن تقوم بتضمين قيمة المتغير داخل علامات الاقتباس (`"`). في هذا السياق، يمكنك تعديل محتوى الـ `input` في النموذج ليكون كالتالي: <input type="text" class="form-control" name="fname" required value="<?php echo $fname ?>"> قمت بإضافة علامات الاقتباس حول `<?php echo $fname ?>`، وهذا يساعد في ضمان أنه عند طباعة القيمة في الـ `input`، يتم استخدام القيمة بكاملها، بما في ذلك الفراغات إذا كان هناك أي. بالنسبة لحماية مدخلاتك من حقن SQL، يفضل دائمًا استخدام استعلامات معلمة محددة (`prepared statements`) بدلاً من تضمين القيم مباشرة في الاستعلام. يمكنك استخدام ميزات mysqli المدمجة لتحقيق ذلك. لحماية طباعة HTML داخل `input`، يمكنك استخدام `htmlspecialchars` لتحويل الرموز الخاصة بـ HTML إلى ترميزها المقابل. على سبيل المثال: <input type="text" class="form-control" name="fname" required value="<?php echo htmlspecialchars($fname, ENT_QUOTES, 'UTF-8') ?>"> هذا يضمن أن أي رموز HTML غير آمنة يتم تحويلها بشكل صحيح لتجنب حقن HTML. اقتباس
0 ايمن ميلاد نشر 5 ديسمبر 2023 الكاتب أرسل تقرير نشر 5 ديسمبر 2023 بتاريخ On 2/12/2023 at 15:34 قال Khaled Osama3: المشكلة التي تواجهها تحدث عندما تقوم بإدراج قيمة متغير داخل `input` في النموذج، حيث يجب أن تقوم بتضمين قيمة المتغير داخل علامات الاقتباس (`"`). في هذا السياق، يمكنك تعديل محتوى الـ `input` في النموذج ليكون كالتالي: <input type="text" class="form-control" name="fname" required value="<?php echo $fname ?>"> قمت بإضافة علامات الاقتباس حول `<?php echo $fname ?>`، وهذا يساعد في ضمان أنه عند طباعة القيمة في الـ `input`، يتم استخدام القيمة بكاملها، بما في ذلك الفراغات إذا كان هناك أي. بالنسبة لحماية مدخلاتك من حقن SQL، يفضل دائمًا استخدام استعلامات معلمة محددة (`prepared statements`) بدلاً من تضمين القيم مباشرة في الاستعلام. يمكنك استخدام ميزات mysqli المدمجة لتحقيق ذلك. لحماية طباعة HTML داخل `input`، يمكنك استخدام `htmlspecialchars` لتحويل الرموز الخاصة بـ HTML إلى ترميزها المقابل. على سبيل المثال: <input type="text" class="form-control" name="fname" required value="<?php echo htmlspecialchars($fname, ENT_QUOTES, 'UTF-8') ?>"> هذا يضمن أن أي رموز HTML غير آمنة يتم تحويلها بشكل صحيح لتجنب حقن HTML. بارك الله فيك علي الرد اخي خالد في ميزان حسناتك فعلا علامة التنصيص المزدوجه كانت سبب في عدم اظهار بيانات في input بتاريخ 7 دقائق مضت قال ايمن ميلاد: بارك الله فيك علي الرد اخي خالد في ميزان حسناتك فعلا علامة التنصيص المزدوجه كانت سبب في عدم اظهار بيانات في input اخي خالد ممكن تعمل حماية للملف خاص بي قبل عملية ادخال بيانات رجاء خاص وبارك الله فيك index.php 1 اقتباس
0 Khaled Osama3 نشر 5 ديسمبر 2023 أرسل تقرير نشر 5 ديسمبر 2023 بالطبع اخي ايمن حتي تعمل حمايه للبيانات يمكنك اتخاذ بعض الاجراءات 1. تجنب استخدام الإدخالات المباشرة: تجنب استخدام البيانات المدخلة مباشرة في استعلام SQL بدون فحص أو تنقية. يمكن استخدام `mysqli_real_escape_string` لتنقية البيانات. ومع ذلك، يُفضل استخدام Prepared Statements (البنيات الجاهزة) بدلاً من ذلك. $fname = mysqli_real_escape_string($conn, $_POST['fname']); $course_name = mysqli_real_escape_string($conn, $_POST['course_name']); $course_code = mysqli_real_escape_string($conn, $_POST['course_code']); $mid_exam = mysqli_real_escape_string($conn, $_POST['mid_exam']); $fir_exam = mysqli_real_escape_string($conn, $_POST['fir_exam']); $final = mysqli_real_escape_string($conn, $_POST['final']); $id_code = mysqli_real_escape_string($conn, $_POST['id_code']); 2. التحقق من البيانات: يمكنك فحص نوع البيانات المدخلة للتأكد من تناسبها مع نوع البيانات المتوقع. على سبيل المثال: if (!is_numeric($mid_exam) || !is_numeric($fir_exam) || !is_numeric($final)) { // رسالة خطأ } 3. التحقق من البيانات قبل الإدخال: قم بإجراء فحص على البيانات قبل تنفيذ الاستعلام SQL. يمكنك استخدام الشروط للتحقق من صحة البيانات. if (empty($fname) || empty($course_name) || empty($course_code) || empty($mid_exam) || empty($fir_exam) || empty($final) || empty($id_code)) { // رسالة خطأ } 4. استخدام Prepared Statements: يُفضل استخدام Prepared Statements لتجنب هجمات حقن SQL. في PHP، يمكنك استخدام `mysqli` بالتالي: $stmt = $conn->prepare("INSERT INTO student (fname, course_name, course_code, mid_exam, fir_exam, final, id_code) VALUES (?, ?, ?, ?, ?, ?, ?)"); $stmt->bind_param("sssssss", $fname, $course_name, $course_code, $mid_exam, $fir_exam, $final, $id_code); if ($stmt->execute()) { // تم الإدخال بنجاح } else { // خطأ في الإدخال } $stmt->close(); باستخدام Prepared Statements، سيتم التعامل بشكل صحيح مع البيانات وتجنب تأثير هجمات حقن SQL. وهذا هو الكود كامل بعد التحسين <?php include 'database.php'; include 'navbar.php'; if (isset($_POST['submit'])) { // تنقية البيانات باستخدام mysqli_real_escape_string $fname = mysqli_real_escape_string($conn, $_POST['fname']); $course_name = mysqli_real_escape_string($conn, $_POST['course_name']); $course_code = mysqli_real_escape_string($conn, $_POST['course_code']); $mid_exam = mysqli_real_escape_string($conn, $_POST['mid_exam']); $fir_exam = mysqli_real_escape_string($conn, $_POST['fir_exam']); $final = mysqli_real_escape_string($conn, $_POST['final']); $id_code = mysqli_real_escape_string($conn, $_POST['id_code']); // التحقق من صحة البيانات if (empty($fname) || empty($course_name) || empty($course_code) || !is_numeric($mid_exam) || !is_numeric($fir_exam) || !is_numeric($final) || empty($id_code)) { echo '<div class="alert alert-danger text-center w-25" role="alert"> الرجاء إدخال بيانات صحيحة </div>'; header("refresh:2;url=index.php"); exit(); } // استخدام Prepared Statements لتجنب حقن SQL $stmt = $conn->prepare("INSERT INTO student (fname, course_name, course_code, mid_exam, fir_exam, final, id_code) VALUES (?, ?, ?, ?, ?, ?, ?)"); $stmt->bind_param("sssssss", $fname, $course_name, $course_code, $mid_exam, $fir_exam, $final, $id_code); if ($stmt->execute()) { echo '<div class="alert alert-success text-center w-25" role="alert"> تم حفظ البيانات بنجاح </div>'; header("refresh:2;url=display.php"); } else { echo '<div class="alert alert-danger text-center w-25" role="alert"> حدث خطأ أثناء حفظ البيانات </div>'; echo mysqli_error($conn); } $stmt->close(); } ?> اقتباس
0 ايمن ميلاد نشر 6 ديسمبر 2023 الكاتب أرسل تقرير نشر 6 ديسمبر 2023 بتاريخ 15 ساعة قال Khaled Osama3: بالطبع اخي ايمن حتي تعمل حمايه للبيانات يمكنك اتخاذ بعض الاجراءات 1. تجنب استخدام الإدخالات المباشرة: تجنب استخدام البيانات المدخلة مباشرة في استعلام SQL بدون فحص أو تنقية. يمكن استخدام `mysqli_real_escape_string` لتنقية البيانات. ومع ذلك، يُفضل استخدام Prepared Statements (البنيات الجاهزة) بدلاً من ذلك. $fname = mysqli_real_escape_string($conn, $_POST['fname']); $course_name = mysqli_real_escape_string($conn, $_POST['course_name']); $course_code = mysqli_real_escape_string($conn, $_POST['course_code']); $mid_exam = mysqli_real_escape_string($conn, $_POST['mid_exam']); $fir_exam = mysqli_real_escape_string($conn, $_POST['fir_exam']); $final = mysqli_real_escape_string($conn, $_POST['final']); $id_code = mysqli_real_escape_string($conn, $_POST['id_code']); 2. التحقق من البيانات: يمكنك فحص نوع البيانات المدخلة للتأكد من تناسبها مع نوع البيانات المتوقع. على سبيل المثال: if (!is_numeric($mid_exam) || !is_numeric($fir_exam) || !is_numeric($final)) { // رسالة خطأ } 3. التحقق من البيانات قبل الإدخال: قم بإجراء فحص على البيانات قبل تنفيذ الاستعلام SQL. يمكنك استخدام الشروط للتحقق من صحة البيانات. if (empty($fname) || empty($course_name) || empty($course_code) || empty($mid_exam) || empty($fir_exam) || empty($final) || empty($id_code)) { // رسالة خطأ } 4. استخدام Prepared Statements: يُفضل استخدام Prepared Statements لتجنب هجمات حقن SQL. في PHP، يمكنك استخدام `mysqli` بالتالي: $stmt = $conn->prepare("INSERT INTO student (fname, course_name, course_code, mid_exam, fir_exam, final, id_code) VALUES (?, ?, ?, ?, ?, ?, ?)"); $stmt->bind_param("sssssss", $fname, $course_name, $course_code, $mid_exam, $fir_exam, $final, $id_code); if ($stmt->execute()) { // تم الإدخال بنجاح } else { // خطأ في الإدخال } $stmt->close(); باستخدام Prepared Statements، سيتم التعامل بشكل صحيح مع البيانات وتجنب تأثير هجمات حقن SQL. وهذا هو الكود كامل بعد التحسين <?php include 'database.php'; include 'navbar.php'; if (isset($_POST['submit'])) { // تنقية البيانات باستخدام mysqli_real_escape_string $fname = mysqli_real_escape_string($conn, $_POST['fname']); $course_name = mysqli_real_escape_string($conn, $_POST['course_name']); $course_code = mysqli_real_escape_string($conn, $_POST['course_code']); $mid_exam = mysqli_real_escape_string($conn, $_POST['mid_exam']); $fir_exam = mysqli_real_escape_string($conn, $_POST['fir_exam']); $final = mysqli_real_escape_string($conn, $_POST['final']); $id_code = mysqli_real_escape_string($conn, $_POST['id_code']); // التحقق من صحة البيانات if (empty($fname) || empty($course_name) || empty($course_code) || !is_numeric($mid_exam) || !is_numeric($fir_exam) || !is_numeric($final) || empty($id_code)) { echo '<div class="alert alert-danger text-center w-25" role="alert"> الرجاء إدخال بيانات صحيحة </div>'; header("refresh:2;url=index.php"); exit(); } // استخدام Prepared Statements لتجنب حقن SQL $stmt = $conn->prepare("INSERT INTO student (fname, course_name, course_code, mid_exam, fir_exam, final, id_code) VALUES (?, ?, ?, ?, ?, ?, ?)"); $stmt->bind_param("sssssss", $fname, $course_name, $course_code, $mid_exam, $fir_exam, $final, $id_code); if ($stmt->execute()) { echo '<div class="alert alert-success text-center w-25" role="alert"> تم حفظ البيانات بنجاح </div>'; header("refresh:2;url=display.php"); } else { echo '<div class="alert alert-danger text-center w-25" role="alert"> حدث خطأ أثناء حفظ البيانات </div>'; echo mysqli_error($conn); } $stmt->close(); } ?> الله يرحم والديك اخي خالد سؤال لماذا وضعت علامات استفهام في جملة ادخال وماذا تقصد بي sssss داخل bind_param("sssssss" ماذا تعني $stmt هل هو مجرد اسم متغير بتاريخ 19 دقائق مضت قال ايمن ميلاد: الله يرحم والديك اخي خالد سؤال لماذا وضعت علامات استفهام في جملة ادخال وماذا تقصد بي sssss داخل bind_param("sssssss" ماذا تعني $stmt هل هو مجرد اسم متغير بالبحث علي معني ssssssss وجدت انه تعني string وبما انه لدي 7 متغيرات لهذا كتبت 7 وقد تكون ii يعني int ياريت تشرح باقي سؤال اقتباس
0 ايمن ميلاد نشر 6 ديسمبر 2023 الكاتب أرسل تقرير نشر 6 ديسمبر 2023 لماذا في كود تعديل عندما اضع عنصر html يظهر بعد تعديل رغم استخداما دوال التي قلت عليه مرفق ملف update.php اقتباس
0 Khaled Osama3 نشر 6 ديسمبر 2023 أرسل تقرير نشر 6 ديسمبر 2023 بتاريخ 11 ساعة قال ايمن ميلاد: الله يرحم والديك اخي خالد سؤال لماذا وضعت علامات استفهام في جملة ادخال وماذا تقصد بي sssss داخل bind_param("sssssss" ماذا تعني $stmt هل هو مجرد اسم متغير بالبحث علي معني ssssssss وجدت انه تعني string وبما انه لدي 7 متغيرات لهذا كتبت 7 وقد تكون ii يعني int ياريت تشرح باقي سؤال تم وضع علامات استفهام في جملة الادخال بسبب استخدام prepared statements في PHP. Prepared statements تسمح لنا بالاعداد مسبقا لعملية الادخال ولكن بدون تحديد القيم بعد. فالعلامات الاستفهام تعني ان هذه القيم سوف تعطى لاحقا قبل تنفيذ العملية. اما بالنسبة ل$stmt فهو ليس مجرد اسم متغير بل هو object من نوع Statement يمثل العملية المعدة مسبقا. عندما نستخدم prepared statements فانه يتم انشاء عضو Statement وتخزين التعليمة المعدة فيه قبل تحديد القيم. ثم نستخدم ميثودات على هذا العضو لتعيين القيم وتنفيذ العملية مثل bind_param و execute. بشكل مختصر: - العلامات استفهام لان القيم لم تحدد بعد في التعليمة المعدة - $stmt هو عضو Statement يمثل التعليمة المعدة قبل تحديد القيم بتاريخ 9 ساعة قال ايمن ميلاد: لماذا في كود تعديل عندما اضع عنصر html يظهر بعد تعديل رغم استخداما دوال التي قلت عليه مرفق ملف update.php 3.7 kB · 1 تنزيل السبب في ظهور العناصر ال HTML بعد تعديلها رغم استخدام دوال التنقية مثل mysqli_real_escape_string هو: - دوال التنقية مثل mysqli_real_escape_string تقوم بتنقية البيانات فقط من أخطار الاقتحام عبر SQL Injection. - لكنها لا تقوم بتنقية البيانات من الشوائب أو الرموز ال HTML. - فعندما نعدل بيانات تحتوي على عناصر HTML مثل <b>، <script> إلخ فسيظل هذا المحتوى HTML موجوداً. - مثل ما اخبرتك سابقا بتاريخ On 2/12/2023 at 15:34 قال Khaled Osama3: لحماية طباعة HTML داخل `input`، يمكنك استخدام `htmlspecialchars` لتحويل الرموز الخاصة بـ HTML إلى ترميزها المقابل. على سبيل المثال: <input type="text" class="form-control" name="fname" required value="<?php echo htmlspecialchars($fname, ENT_QUOTES, 'UTF-8') ?>"> - لذا يجب إما تنقية البيانات يدوياً من الرموز الخطرة أو استخدام الدوال الخاصة بتنقية المحتوى HTML مثل strip_tags() أو htmlspecialchars(). - فهذه الدوال تقوم بترميز أو إزالة الرموز ال HTML لإبقاء البيانات آمنة عند عرضها. لذا الحل هنا هو إما تنقية يدوية للبيانات أو استخدام دوال تنقية HTML أيضاً مع mysqli_real_escape_string. اقتباس
0 ايمن ميلاد نشر 7 ديسمبر 2023 الكاتب أرسل تقرير نشر 7 ديسمبر 2023 بتاريخ 16 ساعة قال Khaled Osama3: تم وضع علامات استفهام في جملة الادخال بسبب استخدام prepared statements في PHP. Prepared statements تسمح لنا بالاعداد مسبقا لعملية الادخال ولكن بدون تحديد القيم بعد. فالعلامات الاستفهام تعني ان هذه القيم سوف تعطى لاحقا قبل تنفيذ العملية. اما بالنسبة ل$stmt فهو ليس مجرد اسم متغير بل هو object من نوع Statement يمثل العملية المعدة مسبقا. عندما نستخدم prepared statements فانه يتم انشاء عضو Statement وتخزين التعليمة المعدة فيه قبل تحديد القيم. ثم نستخدم ميثودات على هذا العضو لتعيين القيم وتنفيذ العملية مثل bind_param و execute. بشكل مختصر: - العلامات استفهام لان القيم لم تحدد بعد في التعليمة المعدة - $stmt هو عضو Statement يمثل التعليمة المعدة قبل تحديد القيم السبب في ظهور العناصر ال HTML بعد تعديلها رغم استخدام دوال التنقية مثل mysqli_real_escape_string هو: - دوال التنقية مثل mysqli_real_escape_string تقوم بتنقية البيانات فقط من أخطار الاقتحام عبر SQL Injection. - لكنها لا تقوم بتنقية البيانات من الشوائب أو الرموز ال HTML. - فعندما نعدل بيانات تحتوي على عناصر HTML مثل <b>، <script> إلخ فسيظل هذا المحتوى HTML موجوداً. - مثل ما اخبرتك سابقا - لذا يجب إما تنقية البيانات يدوياً من الرموز الخطرة أو استخدام الدوال الخاصة بتنقية المحتوى HTML مثل strip_tags() أو htmlspecialchars(). - فهذه الدوال تقوم بترميز أو إزالة الرموز ال HTML لإبقاء البيانات آمنة عند عرضها. لذا الحل هنا هو إما تنقية يدوية للبيانات أو استخدام دوال تنقية HTML أيضاً مع mysqli_real_escape_string. اخي خالد بارك الله فيك ممكن تعمل لي كود تعديل باستخدامpdo وبارك الله فيك update.php اقتباس
0 Khaled Osama3 نشر 7 ديسمبر 2023 أرسل تقرير نشر 7 ديسمبر 2023 تفضل اخي هذا هو الكود بعد التحديث واستخدام PDO update.php اقتباس
السؤال
ايمن ميلاد
السلام عليكم ورحمة الله وبركاته
لدي كود التالي لتعديل بيانات لماذا عندما اطبع متغير يظهر كاملا اسم مستخدما لكن عندما اطبعه داخل input يطبع اول كلمة فقط
مثلا اريد تعديل اسم تالي محمد خالد احمد يطبعه لكن انا اريد طبعه داخل input يطبعه محمد فقط
مرفق كود ياريت تعديل من اخوة وكيف حماية مدخلات من حقن sql وطباعة html داخل input وبارك الله فيكم جميعا تحياتي .
update.php
8 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.