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

السؤال

نشر (معدل)

ارغب عند كتابة كود المستخدم  بمربع النص يتم البحث فى قاعدة البيانات وطباعة اسم المستخدم عن طريق 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...