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

السؤال

نشر

السلام عليكم

لدي حقل بحث وارغب فى عرض اقتراحات على المستخدم اثناء قيامه بالكتابة.. الاقتراح يعتمد على الاتصال بقاعدة البيانات جدول items حيث يوجد بع عمودان للبحث (NAME , description2)؛ انا ارغب فى ان يكون البحث فى عمود NAME لكن يعطي لى رسالة خطأ؛ اما اذا اخترت البحث فى الحقل الاخر يتم تقديم الاقتراح بنجاح. أريد ان يكون البحث فى عمود NAME  ؛ ما الحل؟

رسالة الخطأ هي:

Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'NAME' in where clause is ambiguous in C:\xampp2\htdocs\LAFETAA\search.php:59 Stack trace:
#0 C:\xampp2\htdocs\LAFETAA\search.php(59): PDOStatement->execute(Array)
#1 {main} thrown in C:\xampp2\htdocs\LAFETAA\search.php on line 59

 

Recommended Posts

  • 0
نشر
بتاريخ 4 دقائق مضت قال Our World عالمنا:

             WHERE   =? 

ما سبب ؟ في السطر في الشيفرة؟

لا أعتقد أن له داع ليصبح:

JOIN city      
ON items.city_id=city.city_id
WHERE  
items.NAME LIKE '%$inputSearch%'
or items.description2 LIKE '%$inputSearch%'  ");

أما في الجزء الثاني  لم تستخدم fetch all

          $searchRslt=$stmt3->fetch();

وبما أن هنالك limit 2 أي عنصرين، نحتاج لحلقة لآخر جزء

<?php

if (!empty($searchRslt)) {
  foreach ($searchRslt as $value){
    echo "<div class='show'>".$value['NAME'].'<br>'."</div>";
  }
}else{
  echo "<div class='show'>No results</div>";
}

إن بقي مشكلة حاول تحديدها بشكل أفضل. فنحن لا نستطيع اختبار البرنامج

  • 0
نشر

يبدو أنك تقوم ضمن الاستعلام بعملية جمع Join لجدول آخر مع الجدول items يحوي أيضًا على الحقل NAME، يمكنك تعديل الاستعلام وذكر اسم الجدول items بشكل تصريحي قبل اسم الحقل ضمن جملة الشرط، ليصبح الاستعلام لديك يشبع التالي:

SELECT * FROM items
WHERE items.NAME = "..."
      ^^^^^^
JOIN other_table ...

 

  • 0
نشر
بتاريخ 13 دقائق مضت قال Hassan Hedr:

يبدو أنك تقوم ضمن الاستعلام بعملية جمع Join لجدول آخر مع الجدول items يحوي أيضًا على الحقل NAME، يمكنك تعديل الاستعلام وذكر اسم الجدول items بشكل تصريحي قبل اسم الحقل ضمن جملة الشرط، ليصبح الاستعلام لديك يشبع التالي:


SELECT * FROM items
WHERE items.NAME = "..."
      ^^^^^^
JOIN other_table ...

 

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

بتاريخ 16 دقائق مضت قال Hassan Hedr:

يبدو أنك تقوم ضمن الاستعلام بعملية جمع Join لجدول آخر مع الجدول items يحوي أيضًا على الحقل NAME، يمكنك تعديل الاستعلام وذكر اسم الجدول items بشكل تصريحي قبل اسم الحقل ضمن جملة الشرط، ليصبح الاستعلام لديك يشبع التالي:


SELECT * FROM items
WHERE items.NAME = "..."
      ^^^^^^
JOIN other_table ...

 

سؤال اخر:

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

  • 0
نشر
بتاريخ 8 دقائق مضت قال Our World عالمنا:

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

أرجو مشاركة الاستعلام و الشيفرة البرمجية لنستطيع المساعدة

  • 0
نشر
بتاريخ 15 دقائق مضت قال Wael Aljamal:

أرجو مشاركة الاستعلام و الشيفرة البرمجية لنستطيع المساعدة

HTML

<input type="text" name="input-search" id="input-search" autocomplete="off" >
        <button class="btn btn-success btn-search-index" id="btn-search-index">SEARCH</button>
        <div class="show2"></div>



ajax

<script type="text/javascript" src="<?php echo $js; ?>jquery-3.6.0.min.js"></script>
       <script>
       $(document).ready(function(){
                //ajax call input search 
                $("#input-search").on("keyup", function(){
                  var search=$(this).val();
                      if ($(this).val().length>0){
                  $.ajax({
                  url:"showSearch.php",
                  data:{sentSearch:search},
                  success: function(data){                             
                    $('.show2').html(data);
                     }
                   });
                        }else{
                            $('.show2').html('');
                        }
                   });



PHP

if ($_SERVER['REQUEST_METHOD']=='POST') {
            
             $inputSearch   =$_POST['input-search'];

$stmt=$conn->prepare(" SELECT *
                 FROM items
             join categories on categories.cat_id=items.CAT_ID
             join sub        on items.subcat_id=sub.subcat_id 
             JOIN country    ON items.country_id=country.country_id
             JOIN state      ON items.state_id=state.state_id
             JOIN city       ON items.city_id=city.city_id
             WHERE   =? 
             items.NAME LIKE '%$inputSearch%'
             or items.description2 LIKE '%$inputSearch%'  ");
           
     $stmt->execute();
     $items= $stmt->fetchAll();

}

if (!empty($items)) { foreach ($items as $value) { echo $value['NAME']; } }

PHP to get ajax suggestions

if (isset($_GET['sentSearch'])  ) {
          $search= $_GET['sentSearch'];
          $stmt3=$conn->prepare(" SELECT * FROM  items
            WHERE (CONVERT(items.NAME USING utf8) LIKE '%$search%')
            ORDER BY  item_id  DESC LIMIT 2");
          $stmt3->execute();
          $searchRslt=$stmt3->fetch();
          $row=$stmt3->rowCount();
          if (!empty($searchRslt)) {
            echo "<div class='show'>".$searchRslt['NAME'].'<br>'."</div>";
          }else{
            echo "<div class='show'>No results</div>";
          }

       }

 

  • 0
نشر
بتاريخ الآن قال Our World عالمنا:

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

تأكد أي جزء من الشيفرة يعمل و أي جزء لا يعمل، 

حاول ضباعة echo row لنعرف هل المشكلة في الاستعلام أم غيره

  • 0
نشر
بتاريخ 5 دقائق مضت قال Wael Aljamal:

يمكنك مشاركة الحل النهائي أو آخر تعديل ليستفيد من يقرأ السؤال

شكرا لك

العمل و الاكواد كانت صحيحة ولكنني جعلت القسم الذي سيظهر به الاقتراح position absolute ,z-index 10 ليكون ظاهر فوق العناصر فجاءت النتائج فوق بعضها ولم ارى الا واحدة فقط

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...