تعديل كود برمجي لو سمحتم

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

انا اريده يبحث بالكلمة ولو كتبها الشخص بالخطاء مثال : شخص يريد سيارة فكتب شيارة فهنا اريد الكود ياتي له بالسيارات

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

  <?php

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

   $search_box = $_POST['search_box'];

   $search_box = filter_var($search_box, FILTER_SANITIZE_STRING);

   $select_products = $conn->prepare("SELECT id,name,image,price,date FROM `products` 

WHERE name LIKE '%{$search_box}%' 

UNION

SELECT id,name,image,price,date FROM `car` 

WHERE name LIKE '%{$search_box}%'

UNION

SELECT id,name,image,price,date FROM `sellhome` 

WHERE name LIKE '%{$search_box}%'

UNION

SELECT id,name,image,price,date FROM `wod`

WHERE name LIKE '%{$search_box}%'

UNION

SELECT id,name,image,price,date FROM `alic`

WHERE name LIKE '%{$search_box}%'

UNION

SELECT id,name,image,price,date FROM `shos`

WHERE name LIKE '%{$search_box}%'

UNION

SELECT id,name,image,price,date FROM `moto`

WHERE name LIKE '%{$search_box}%'

UNION

SELECT id,name,image,price,date FROM `big`

WHERE name LIKE '%{$search_box}%'

UNION

SELECT id,name,image,price,date FROM `tool`

WHERE name LIKE '%{$search_box}%'

UNION

SELECT id,name,image,price,date FROM `job`

WHERE name LIKE '%{$search_box}%'

UNION

SELECT id,name,image,price,date FROM `honey`

WHERE name LIKE '%{$search_box}%' 

UNION

SELECT id,name,image,price,date FROM `mid`

WHERE name LIKE '%{$search_box}%'

");

   $select_products->execute();

   if($select_products->rowCount() > 0){

     while($fetch_products = $select_products->fetch(PDO::FETCH_ASSOC)){ 

  ?>

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

يمكنك استخدام تقنية تسمى تقريب النص هناك عدة طرق لتحقيق ذلك في قاعدة البيانات، وأحد الحلول الشائعة هو استخدام دالة SOUNDEX أو LEVENSHTEIN لتقييم مدى التشابه بين الكلمات.

في حالتك يمكن استخدام مكتبة PHP مثل levenshtein أو similar_text لتحديد مدى التشابه بين الكلمات، ولكن بما أن الحل يجب أن يكون في قاعدة البيانات، يمكن استخدام دالة LEVENSHTEIN المتوفرة في MySQL.

جرب تعديل الكود ليشمل هذا النوع من البحث بالشكل التالي:

<?php


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


    $search_box = $_POST['search_box'];
    $search_box = filter_var($search_box, FILTER_SANITIZE_STRING);


    // تحديد المسافة القصوى المسموح بها للبحث (يمكن تعديلها حسب الحاجة)
    $max_distance = 2; 


    $query = "
        SELECT id, name, image, price, date FROM (
            SELECT id, name, image, price, date FROM `products`
            UNION
            SELECT id, name, image, price, date FROM `car`
            UNION
            SELECT id, name, image, price, date FROM `sellhome`
            UNION
            SELECT id, name, image, price, date FROM `wod`
            UNION
            SELECT id, name, image, price, date FROM `alic`
            UNION
            SELECT id, name, image, price, date FROM `shos`
            UNION
            SELECT id, name, image, price, date FROM `moto`
            UNION
            SELECT id, name, image, price, date FROM `big`
            UNION
            SELECT id, name, image, price, date FROM `tool`
            UNION
            SELECT id, name, image, price, date FROM `job`
            UNION
            SELECT id, name, image, price, date FROM `honey`
            UNION
            SELECT id, name, image, price, date FROM `mid`
        ) AS combined
        WHERE LEVENSHTEIN(name, '{$search_box}') <= {$max_distance}
    ";


    $select_products = $conn->prepare($query);
    $select_products->execute();


    if($select_products->rowCount() > 0){
        while($fetch_products = $select_products->fetch(PDO::FETCH_ASSOC)){
            // قم بعرض النتائج هنا
        }
    } else {
        echo "لا توجد نتائج للبحث.";
    }
}
?>

نستخدم الدالة LEVENSHTEIN لتحديد المسافة بين الكلمة المدخلة والكلمات المخزنة في قاعدة البيانات، و يمكنك تعديل $max_distance لتحديد مدى التباعد المقبول بين الكلمات، قيمة أقل تعني تطابق أكثر دقة، وقيمة أعلى تعني مرونة أكبر في البحث.

بالتوفيق إن شاء الله.

الله يوفقك دنيا واخرة ويلحقك بالصالحين