Omer Amad نشر 9 يوليو أرسل تقرير نشر 9 يوليو كيف نقدر نعمل منع تكرار ارسال البيانات عن طريق الفورم... مثال في حال تم ارسال المعلومات المطلوبة عن طريق الفورم... لايسمح إرسالها مره ثانيه 2 اقتباس
0 Chihab Hedidi نشر 9 يوليو أرسل تقرير نشر 9 يوليو يمكنك استخدام رمز CSRF و هو رمز مميز يتم إنشاؤه لكل طلب فورم ويتم التحقق منه عند إعادة تقديم الفورم، يمكن أن يساعد في منع تكرار تقديم البيانات، أو كحل آخر يمكنك استخدام حالة الجلسة (Session State) حيث يتم تخزين حالة الفورم بعد تقديمها في الجلسة لتتبع ما إذا كان الفورم قد تم تقديمه من قبل أم لا، و تكون الطريقة كالآتي حيث عند تحميل الصفحة لأول مرة، يتم إنشاء رمز CSRF وحفظه في الجلسة، و عند تقديم الفورم، يتم إرسال رمز CSRF مع البيانات، ثم يتم التحقق من صحة رمز CSRF ومعرفة ما إذا كان الفورم قد تم تقديمه مسبقا من خلال حالة الجلسة، إذا كان الفورم قد تم تقديمه مسبقًا، يتم عرض رسالة منع إعادة التقديم، بينما إذا كان الفورم لم يتم تقديمه مسبقا، يتم معالجة البيانات وتحديد حالة الجلسة لمنع إعادة التقديم. اقتباس
0 محمد عاطف17 نشر 9 يوليو أرسل تقرير نشر 9 يوليو هذا يعتمد على ما الذي تقصده . هل تقصد إذا قام بإرسال بيانات لا يحق له إرسالها مرة أخري ؟ أم يحق له إرسال بيانات أكثر من مرة ولكن لا تتكرر ؟ على العموم يوجد أكثر من حل من خلال ال Session أو من خلال قاعدة البيانات . استخدام الجلسات (Sessions): عندما يتم إرسال البيانات لأول مرة من خلال الفورم قم بتخزين متغير والذى يدل على أنه تم إرسال البيانات في جلسة المستخدم. عندما يحاول المستخدم إرسال البيانات مرة أخرى تحقق إذا كانت هذه المعلومة موجودة في الجلسة؛ إذا كانت موجودة، فلا تسمح بإعادة إرسال البيانات. // في صفحة إرسال الفورم session_start(); if (isset($_SESSION['form_submitted'])) { // لا تسمح بإرسال البيانات مرة أخرى // يمكنك عرض رسالة خطأ أو إعادة توجيه المستخدم إلى صفحة أخرى } else { // معالجة البيانات هنا // ... $_SESSION['form_submitted'] = true; } استخدام من قاعدة البيانات: قم بإنشاء جدول يحوي على ال id الخاص بالمستخدم و عند إرسال البيانات تأكد هل هذا ال id موجود في الجدول أم لا إذا كان موجود فلا تقم بإضافة البيانات وإذا لم يكن موجود قم بإضافة البيانات و أيضا أضف ال id لخاص بالمستخدم في قاعدة البيانات . 1 اقتباس
0 Omer Amad نشر 11 يوليو الكاتب أرسل تقرير نشر 11 يوليو بتاريخ On 9/7/2024 at 18:23 قال محمد عاطف17: هذا يعتمد على ما الذي تقصده . هل تقصد إذا قام بإرسال بيانات لا يحق له إرسالها مرة أخري ؟ أم يحق له إرسال بيانات أكثر من مرة ولكن لا تتكرر ؟ على العموم يوجد أكثر من حل من خلال ال Session أو من خلال قاعدة البيانات . استخدام الجلسات (Sessions): عندما يتم إرسال البيانات لأول مرة من خلال الفورم قم بتخزين متغير والذى يدل على أنه تم إرسال البيانات في جلسة المستخدم. عندما يحاول المستخدم إرسال البيانات مرة أخرى تحقق إذا كانت هذه المعلومة موجودة في الجلسة؛ إذا كانت موجودة، فلا تسمح بإعادة إرسال البيانات. // في صفحة إرسال الفورم session_start(); if (isset($_SESSION['form_submitted'])) { // لا تسمح بإرسال البيانات مرة أخرى // يمكنك عرض رسالة خطأ أو إعادة توجيه المستخدم إلى صفحة أخرى } else { // معالجة البيانات هنا // ... $_SESSION['form_submitted'] = true; } استخدام من قاعدة البيانات: قم بإنشاء جدول يحوي على ال id الخاص بالمستخدم و عند إرسال البيانات تأكد هل هذا ال id موجود في الجدول أم لا إذا كان موجود فلا تقم بإضافة البيانات وإذا لم يكن موجود قم بإضافة البيانات و أيضا أضف ال id لخاص بالمستخدم في قاعدة البيانات . انا اقصد... لا اريد ارسال معلومات أكثر من مرة... يعني المتقدم يستطيع ارسال العديد من المعلومات لكن غير مكرره... كيف يتم ذلك 1 اقتباس
0 Mustafa Suleiman نشر 12 يوليو أرسل تقرير نشر 12 يوليو بتاريخ On 11/7/2024 at 15:50 قال Baker Mohammed: انا اقصد... لا اريد ارسال معلومات أكثر من مرة... يعني المتقدم يستطيع ارسال العديد من المعلومات لكن غير مكرره... كيف يتم ذلك وما الذي يؤدي إلى تكرار البيانات من خلال الواجهة الأمامية؟ هناك حقول ثابتة ويتم ملؤها ثم إرسالها، الفكرة هي منع المستخدم من إرسال نفس البيانات مرة أخرى. وهناك طرق مختلفة مثل استخدام قاعدة البيانات لمنع تكرار تلك البيانات من خلال التحقق من البيانات المرسلة في قاعدة البيانات وإن كانت مكررة يتم رفضها والتعامل معها حسب ما تريده مثل رفض الطلب من الأساس، مثل التالي في ملف معالجة الطلب: <?php $data = $_POST; $db = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass'); $stmt = $db->prepare('SELECT COUNT(*) FROM submissions WHERE data = :data'); $stmt->execute(['data' => serialize($data)]); if ($stmt->fetchColumn() > 0) { header('Location: error.php'); exit; } else { $stmt = $db->prepare('INSERT INTO submissions (data) VALUES (:data)'); $stmt->execute(['data' => serialize($data)]); } أو من خلال التعرف على المستخدم من خلال id معين وربط ذلك بالبيانات التي يرسلها، ثم مقارنًة البيانات التالية بالبيانات الخاصة به ورفض الطلب إن كانت مكررة. أو من خلال طريقة Checksum-based وهي الأفضل حسب ما فهمت ما تريد تنفيذه، عند إرسال النموذج، نستخدم دالة هاش (مثل MD5, SHA1, SHA256) لإنشاء Checksum للبيانات المرسلة، وتضمين جميع الحقول المهمة التي تريدين التحقق منها في عملية حساب الـ Checksum. ولديك دالة sha256 لحساب ذلك. ثم تخزين الـ Checksum المحسوب في جدول خاص بقاعدة البيانات واستخدام حقل UNIQUE لضمان عدم تكرار قيمة الـ Checksum في الجدول. عند إرسال نموذج جديد، يتم حساب الـ Checksum للبيانات المرسلة بنفس الطريقة السابقة والتحقق من وجود الـ Checksum المحسوب في جدول قاعدة البيانات. لو كان الـ Checksum موجودًا، فيعني أن نفس البيانات تم إرسالها من قبل، ويتم عرض رسالة خطأ للمستخدم، وإن لم يكن الـ Checksum موجودًا، فيعني أن البيانات جديدة، ويتم إضافتها إلى قاعدة البيانات ومعالجتها كالمعتاد. اقتباس
السؤال
Omer Amad
كيف نقدر نعمل منع تكرار ارسال البيانات عن طريق الفورم... مثال في حال تم ارسال المعلومات المطلوبة عن طريق الفورم... لايسمح إرسالها مره ثانيه
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.