اذهب إلى المحتوى
  • 0

أبحث عن طريقة لإضافة شيفرة جافاسكريبت للحماية من إدراج بيانات متكررة في PHP

Ehab Ragab

السؤال

ارغب عند كتابة كود المستخدم  بمربع النص يتم البحث فى قاعدة البيانات وطباعة اسم المستخدم عن طريق php  فى حال وجوده حتى لا يقوم المستخدم بادخال البيانات مرتين

وفى حال عدم وجود الكود يسمح بتسجيل البيانات

حاولت عن طريق استخدام دالة جافاسكربيت عن طريق الاحداث ولم تفلح معى الرجاء المساعدة 

<?php

         if(isset($_POST['add'])){

             $code=$_POST['code'];

             $name=$_POST['name'];

            $add=$database->prepare("INSERT INTO `test` (`id`, `code`, `name`)  VALUES (NULL, $code, '$name')");

   $add->execute(); 

       }

 ?>



    <form action="" method="POST">
        <input onchange="search()" name="code" type="number" placeholder="ادخل الكود">

        <input name="name" type="text" placeholder="ادخل الاسم">

        <button name="add" type="submit">add اضافة</button>

    </form>



    <script>
    function search() {

        <?php

       $ser = $database->prepare("SELECT * FROM `test` WHERE CODE = $code");

       $ser->execute();

       foreach($ser as $res){

       echo "الكود مسجل من قبل" . " " . $res['name'] ; } ?>

    };

    </script>

 

تم التعديل في بواسطة Hassan Hedr
تنسيق الشيفرة وتوضيح العنوان
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0
بتاريخ 24 دقائق مضت قال Ehab Ragab:

بشكر حضرتك على الرد 

بس انا محتاج مجرد كتابة كود المستخدم فى مربع النص يظهر اسم المستخدم اذا كان مخزن بقاعدة البيانات 

قبل ما يضغط على الزر 

اسف على الازعاج

في هذه الحالة يجب استخدام طلبات AJAX، يمكن الاستفادة من الحدث change على حقل الإدخال لإرسال طلبات إلى الخادم للاستعلام عن القيمة الحالية كالتالي:

<script>
 
  document.querySelector('input[name=code]').addEventListener('change', function(e) {
    const code = e.target.value;
    
    // إرسال طلب للاستعلام
    fetch(`/?code=${code}`)
      .then(res => res.text())
      .then(nameExists => nameExists == 1 ? showError('الاسم مسجل مسبقًا')) : clearError();
  });
    
   function showError(message) {
     // .. HTML إظهار رسالة الخطأ ضمن
   }
    
   function clearError(){
     // .. إخفاء رسالة الخطأ
   }
</script>

وضمن شيفرة php يمكن تلقي القيمة q من GET_ وإرسال رد إما ب 1 أو 0 ليعبر وجود الاسم مسبقًا أم لا (من الضروري طباعة النتيجة وإنهاء الطلب مباشرة لأنه طلب استعلام فقط )كالتالي:

<?php 
if(isset($_GET['code']){

  $code = $_GET['code'];

  $ser = $database->prepare("SELECT * FROM `test` WHERE CODE = $code");

  $ser->execute();

  echo count($ser->fetchAll()) > 0 ? "1" : "0"; // طباعة نتيجة الاستعلام

  exit(); // انهاء الطلب
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

عملية التحقق تتم بالكامل بطرف الخادم، أي لا داعي لوجود شيفرة جافاسكريبت ضمن الصفحة، المشكلة لديك أن الشيفرة تتحقق من ووجود القيمة add في المصفوفة POST_$ وعلى أساسها تدرج سجل جديد ضمن قاعدة البيانات دون التحقق فيما إذا كان موجودًا من قبل، لحل المشكلة يجب نقل عملية التحقق إلى الأعلى قبل عملية الإدراج وتسجيل نتيجة عملية التحقق في حال فشلت في متغير ما يتم عرضه كرسالة للمستخدم أسفل النموذج كالتالي:

<?php

// محاولة إنشاء جديدة
if(isset($_POST['add'])){

  // نتحقق أولًا
  $code=$_POST['code'];

  $name=$_POST['name'];

  $ser = $database->prepare("SELECT * FROM `test` WHERE CODE = $code");

  $ser->execute();

  $error = null;

  if(count($ser->fetchAll()) > 0) {
   // نظهر خطأ
    $error = "الكود مسجل من قبل" . " " . $_POST['add'] ;
  } else {
    // نضيف سجل جديد
    
    $add=$database->prepare("INSERT INTO `test` (`id`, `code`, `name`)  VALUES (NULL, $code, '$name')");

    $add->execute();
  }
}
?>

<form action="" method="POST">
  <input onchange="search()" name="code" type="number" placeholder="ادخل الكود">

  <input name="name" type="text" placeholder="ادخل الاسم">

  <button name="add" type="submit">add اضافة</button>

</form>

<?php /* عرض رسالة الخطأ */ if($error) echo $error;  ?>

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بشكر حضرتك على الرد 

بس انا محتاج مجرد كتابة كود المستخدم فى مربع النص يظهر اسم المستخدم اذا كان مخزن بقاعدة البيانات 

قبل ما يضغط على الزر 

اسف على الازعاج

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...