Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Необходимо сделать "мягкий" поиск, Надо искать что-то типа [word] & [word1] 
:(
    Опции темы
TetraHC
Дата 11.6.2009, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 8.6.2009

Репутация: нет
Всего: нет



Есть сайт http://cabel.sjrovla.ru

На сайте реализован мною поиск четко по слову. Введите например в поиск "МГТФ"

Необходимо за 10-20$ доработать существующий php код, чтобы он делал "мягкий" поиск - искал строки типа "МГТФ 3" или "МГТФ-3" или "МГТФ/3" - и он должен искать совпадения МГТФ 3

Вот код:

Код

<?php
defined('_JEXEC') or die('Restricted access');

//echo "SETTINGS<br>";
//$path= JPATH_COMPONENT.DS.'/views/hello/tmpl/settings.inc';
//include_once ($path);

//ОПРЕДЕЛЕНИЕ ПОЛЬЗОВАТЕЛЯ
$user =& JFactory::getUser();
$usertype=$user->get('usertype');

//ПОДКЛЮЧАЕМ БАЗУ

$db= mysql_connect($db_host,$db_user,$db_pass)or die("Couldn't connect to MySQL server!".mysql_error());
mysql_select_db($db_name, $db)or die("Coulnd not select DataBase!");

// Подключаем конфиг
//require ("http://shop.skrovla.ru/egen/includes/config.php");
$sql_prefix='catalog_';

//ПОЛУЧАЕМ СЛОВО ПОИСКА
$p_title=$_POST["mytext"];
//ТУТ НАДО НЕ ЗАБЫТЬ ПРОВЕРИТЬ ЧТО ПЕРЕДАЛИ
//echo "<p><font color=\"red\">ТУТ НАДО НЕ ЗАБЫТЬ ПРОВЕРИТЬ ЧТО ПЕРЕДАЛИ и СДЕЛАТЬ ПОИСК ПО ЗОНАМ! (новый-госрезерв)</font></p>";

//ОБЛАСТЬ ПОИСКА
$zone_search=$_POST["answer"];
//1-поиск везде
//2-поиск в новом
//3-поиск в госрезерве
//echo "Область поиска [$zone_search]<br>";
$flag=0;
//ОПРЕДЕЛЯЕМ ТИП ВЫЗОВА
if(!$p_title){
    //ЛИБО ПУСТАЯ СТРОКА, ЛИБО ДАННЫЕ ОТПРАВИЛИ МЕТОДОМ GET
    $p_title=$_GET["mytext"];
    //echo "mytext - $p_title<br>";

    if(!$p_title){
        //НАДО УМЕРЕТЬ. ПУСТОЙ ЗАПРОС И ПО GET и ПО ПОСТ
        if(!$p_title)echo "<p><font color=\"red\"><center>Пустая строка поиска. Сделайте новый поисковый запрос.</center></font></p>";
        $flag=1;
    }
    else{
        //ПАРАМЕТР ПОИСКА ПЕРЕДАЛИ МЕТОДОМ GET
        //ОБЛАСТЬ ПОИСКА
        //$zone_search=$_GET["answer"];
        $zone_search=1; //ПО УМОЛЧАНИЮ
        //1-поиск везде
        //2-поиск в новом
        //3-поиск в госрезерве
        //echo "Область поиска [$zone_search]<br>";
    }
}
if($flag!=1){
    //НАЧИНАЕМ ПОИСК
    $p_title_len=strlen($p_title);
    //ОПУСКАЕМ РЕГИСТР
    $p_title=mb_strtolower($p_title, 'utf-8');
    //$p1_title=mb_strtolower($p_title, 'utf-8');//'windows-1251');
    //echo "Строка поиска [$p_title;$p1_title]<br>";
    
    // Считываем таблицу заводов
    
    //$r1 = mysql_query("SELECT * FROM ".$sql_prefix."price_raz ORDER BY rp_sort");
    $r1 = mysql_query("SELECT * FROM ".$sql_prefix."price_raz");
    $r_count = mysql_num_rows($r1);
    //echo "r_count $r_count";
    
    if($usertype=='Public Frontend'){
        echo "<p align=center><b>Зарегистрированные пользователи могут скачивать прайс листы (xls)</b>.<br><a href=\"./index.php?option=com_virtuemart&page=shop.registration&Itemid=1\">Зарегистрируйтесь</a> либо войдите на сайт [форма входа вверху справа]</p><br>";
    }

    $flag_global=0;//ПОКА НИЧЕГО ГЛОБАЛЬНО НЕ НАШЛИ

    for ($k=0; $k<$r_count; $k++)
    {
        $flag_res=0;//ПО УМОЛЧАНИЮ ПОИСК РАЗРЕШЕН ТОЛЬКО В РАЗРЕШЕННЫХ ЗАВОДАХ
        $flag_aut=0;//МЫ ПОНЯЛИ ЧТО МЕНЕДЖЕР, СУПЕР АДМИН
    
        $f = mysql_fetch_array($r1);
        $flag_s=0;
        if($f['rp_published']==1){
            //ЗАВОД ОПУБЛИКОВАН. ВЫВОДИМ СПИСОК
            //echo "<p align=\"center\"><b><font color=\"blue\">Завод [".$f['rp_title']."] Разрешен к публикации</b></font></p>";
            $table_show=$f['rp_table'];
    
            if($f['rp_search_rest']!=1){
                $flag_res=1;//ЗАВОД К ПОИСКУ РАЗРЕШЕН, СТАВИМ ФЛАГ в 1
            }
            else{
                $flag_res=0;//ЗАВОД К ПОИСКУ НЕ РАЗРЕШЕН, СТАВИМ ФЛАГ в 0
                //НУ А ЕСЛИ МЫ АДМИН ИЛИ МЕНЕЖДЕР ОПЯТЬ СТАВИМ ФЛАГ В 1
                if(($user->get('usertype')=='Manager') or ($user->get('usertype')=='Administrator') or ($user->get('usertype')=='Super Administrator'))
                    {
                    $flag_res=1; //ПРИНУДИТЕЛЬНО РАЗРЕШАЕМ ПОИСК ДЛЯ МЕНЕДЖЕРОВ И ПРОЧИХ
                    $flag_aut=1;//МЫ ПОНЯЛИ ЧТО МЕНЕДЖЕР, СУПЕР АДМИН
                }
            }
    
            if($flag_res==1){
                //ПОИСК ПО МАССИВУ РАЗРЕШЕН
                
                //ВСПОМИНАЕМ ПРО ОБЛАСТЬ ПОИСКА
                //echo "Завод область ".$f['rp_type']."";
                //1-поиск везде
                //2-поиск в новом
                //3-поиск в госрезерве
    
                if($zone_search==1)$flag_s=1;
                if($zone_search==2){
                    if($f['rp_type']!=1)$flag_s=1;//ОБЛАСТЬ ПОИСКА НОВЫЙ И ЗАВОД НЕ ГОСРЕЗЕРВ
                }
                if($zone_search==3){
                    if($f['rp_type']==1)$flag_s=1;//ОБЛАСТЬ ПОИСКА ГОСРЕЗЕРВ И ЗАВОД ГОСРЕЗЕРВ
                }
                if( ($zone_search!=1) and ($zone_search!=2) and ($zone_search!=3)){
                    echo "Error 123 Поиск будет по умолчанию<br>";
                    $flag_s=1;
                }
                //ПОИСК ДАННЫХ
                //ТУТ НАДО ОПТИМИЗИРОВАТЬ
                //echo "table_show - $table_show<br>";
                if($flag_s==1){
                    $r = mysql_query("SELECT * FROM ".$table_show."");
                    $rows = mysql_num_rows($r);
                    $cols = mysql_num_fields($r);
                    
                    
                    
                    //ТЕПЕРЬ БЕЖИМ ПО ПОЛЯМ - 1 РАЗ, ОПРЕДЕЛЯЕМ КОЛ-ВО СОВПАДЕНИЙ
                    $flag=0;        //МЫ ПОКА НИЧЕГО НЕ НАШЛИ! - В ТЕКСТЕ
                    $flag_i=0;    //МЫ ПОКА НИЧЕГО НЕ НАШЛИ В ЗАГОЛОВКЕ
        
                    for($i=0;$i<$rows;$i++){
                        $r2=mysql_fetch_row($r);
                        for($j=0;$j<$cols;$j++){
                            $t1=$r2[$j];
                            //ОПУСКАЕМ РЕГИСТР
                            $t1=mb_strtolower($t1, 'utf-8');
                            //echo " t1 - $t1 t2 - $t2";
                            //$s=stristr($t1,$p_title);
                            $s=stripos($t1,$p_title);
                            if($s===false){
                                //НЕ НАЙДЕНО СОВПАДЕНИЙ!
                            }
                            else{
                                if($i!=0)$flag=1;        //ЕСТЬ СОВПАДЕНИЕ, НО НЕ В ЗАГОЛОВКЕ!
                                if($i==0)$flag_i=1;        //ЕСТЬ СОВПАДЕНИЕ, НО В ЗАГОЛОВКЕ!
                                $flag_global=1;//НАШЛИ ХОТЬ ЧТО-ТО
                            }
                        }
        
                    }
                    mysql_free_result($r);
        
                    $r = mysql_query("SELECT * FROM ".$table_show."");
                    $rows = mysql_num_rows($r);
                    $cols = mysql_num_fields($r);
                    
                    if(($flag_i==1) or ($flag==1)){
                        //ЕСТЬ СОВПАДЕНИЕ В ЗАГОЛОВКЕ ИЛИ ТЕЛЕ СТРАНИЦЫ, НАЧИНАЕМ ПОИСК ЗАНОВО
        
                        if($flag_aut!=1){
                            //echo "<p align=\"center\"><b><font color=\"blue\">Завод [".$f['rp_title']."] разрешен к ПОИСКУ</b></font></p>";
                            if($usertype=='Public Frontend'){
                                echo"<p align=\"center\"><A HREF=\"./index.php?option=com_hello&view=hello&task=show_zavod&table_num=".$f['rp_num']."&sort=nosort\">".$f['rp_title']."</A> Дата: (".$f['rp_date']."). СКАЧАТЬ XLS НЕЛЬЗЯ. <a href=\"./index.php?option=com_virtuemart&page=shop.registration\">Зарегистрируйтесь здесь</a></p><br>";                
                            }
                            else{
                                echo"<p align=\"center\"><A HREF=\"./index.php?option=com_hello&view=hello&task=show_zavod&table_num=".$f['rp_num']."&sort=nosort\">".$f['rp_title']."</A> Дата: (".$f['rp_date']."). СКАЧАТЬ XLS <a href=\"./components/com_hello/views/hello/tmpl/sql_to_excel.php?table_num=".$f['rp_num']."\"><img src=\"./images/save_f2.png\" height=20></img></a></p><br>";
                                if(($usertype=='Manager') or ($usertype=='Administrator') or ($usertype=='Super Administrator')){
                                    echo"<p align=\"center\">Вы менеджер. Поставщик: <b>".$f['p_company']." Конт. лицо: ".$f['p_name']." Тел: ".$f['p_phone']."</b> Факс: ".$f['p_fax']." e-mail: ".$f['p_email']." icq: ".$f['p_icq']." сайт: ".$f['p_www']."</center></p><br>";
                                }
                            }
                        }
                        else{
                            echo "<p align=\"center\"><b><font color=\"red\">Завод [".$f['rp_title']."] запрещен для ПОИСКА, но вы - менеджер</b></font></p>";
                            
                            echo"<p align=\"center\"><A HREF=\"./index.php?option=com_hello&view=hello&task=show_zavod&table_num=".$f['rp_num']."&sort=nosort\">".$f['rp_title']."</A> Дата: (".$f['rp_date']."). СКАЧАТЬ XLS <a href=\"./components/com_hello/views/hello/tmpl/sql_to_excel.php?table_num=".$f['rp_num']."\"><img src=\"./images/save_f2.png\" height=20></img></a></p><br>";
                            if(($usertype=='Manager') or ($usertype=='Administrator') or ($usertype=='Super Administrator')){
                                echo"<p align=\"center\">Вы менеджер. Поставщик: <b>".$f['p_company']." Конт. лицо: ".$f['p_name']." Тел: ".$f['p_phone']."</b> Факс: ".$f['p_fax']." e-mail: ".$f['p_email']." icq: ".$f['p_icq']." сайт: ".$f['p_www']."</center></p><br>";
                            }
                        }
                        //ТЕПЕРЬ БЕЖИМ ПО ПОЛЯМ - 2 РАЗ, ВЫВОДИМ СОВПАДЕНИЯ
                        echo "<table width=\"100%\" border=\"1\">";
                        for($i=0;$i<$rows;$i++){
                            $r2=mysql_fetch_row($r);
                            $flag=0;//МЫ ПОКА НИЧЕГО НЕ НАШЛИ!
                            $flag_i=0;//НИЧЕГО НЕ НАШЛИ И В ЗАГОЛОВКЕ
                            
                            for($j=0;$j<$cols;$j++){
                                $t1=$r2[$j];
                                //ОПУСКАЕМ РЕГИСТР
                                $t1=mb_strtolower($t1, 'utf-8');
                                //echo " t1 - $t1 t2 - $t2";
                                //$s=stristr($t1,$p_title);
                                $s=stripos($t1,$p_title);
                                if($s===false){
                                    //НЕ НАЙДЕНО СОВПАДЕНИЙ!
                                }
                                else{
                                    //ЕСТЬ СОВПАДЕНИЕ!
                                    if($i!=0)$flag=1;        //ЕСТЬ СОВПАДЕНИЕ, НО НЕ В ЗАГОЛОВКЕ!
                                    if($i==0)$flag_i=1;        //ЕСТЬ СОВПАДЕНИЕ, НО В ЗАГОЛОВКЕ!
            
                                }
                            }
                            if(($flag_i==1) or ($flag==1)){
                                //НАШЛИ СОВПАДЕНИЕ
                                if($i==0){
                                    //ЭТО ЗАГОЛОВОК
                                    echo "    <tr bgcolor=\"#94B6F4\">";
                                }
                                if($i!=0){
                                    //ЭТО НЕ ЗАГОЛОВОК
                                    echo "    <tr>";
                                }
                                for($j=0;$j<$cols;$j++){
            
                                    //echo "<td>".$r2[$j]."</td>";
                                    $t1=$r2[$j];
                                    $t1=mb_strtolower($t1, 'utf-8');
                                    $t1_len=strlen($t1);
                                    if($t1_len>0){
                                        //СТРОКА НЕ ПУСТАЯ ИЩЕМ СОВПАДЕНИЕ
                                        //$s=stristr($t1,$p_title);
                                        $s=stripos($t1,$p_title);
                                        if($s===false){
                                            //НЕ НАЙДЕНО СОВПАДЕНИЙ!
                                            echo "<td>".$t1."</td>";
                                        }
                                        else{
                                            //ЕСТЬ СОВПАДЕНИЕ! В ТОЧКЕ S
                                            //НАДО ВЫВОДИТЬ С ПОДСВЕТКОЙ
                                            $t1=$r2[$j]; //ВОССТАНАВЛИВАЕМ ЗНАЧЕНИЕ БЕЗ РЕГИСТРА
                                            $t1_len=strlen($t1);
                                            //$p_title_len - длинна слова запроса!
                                            //echo "<td><br>[t1=$t1]<br>s=$s t1_len=$t1_len p_title_len=$p_title_len<br>";
                                            echo "<td>";
                                            /*for($p=0;$p<$t1_len;$p++){
                                                if($p==$s)print "<b>$t1[$p]</b>";
                                                if($p!=$s)print "$t1[$p]";
                                            }*/
                                            for($p=0;$p<$s;$p++)print "$t1[$p]";
                                            echo "<span style=\"BACKGROUND-COLOR: yellow;color:red\"><b>";
                                            for($p=$s;$p<($s+$p_title_len);$p++)print "$t1[$p]";
                                            echo "</b></span>";
                                            for($p=($s+$p_title_len);$p<$t1_len;$p++)print "$t1[$p]";
                                            echo "</td>";
                                        }
                                    }
                                    else{
                                        //ПУСТАЯ СТРОКА
                                        echo "<td>&nbsp;</td>";
                                    }
                                }
                                if($i==0){
                                    echo "<td>Заказать (км):</td>";
                                }
                                if($i!=0){
                                    //ЭТО НЕ ЗАГОЛОВОК, ВСТАВЛЯЕМ КНОПКУ "КУПИТЬ"
                                    //ТУТ БЫЛА ПРОВЕРКА НА ПУСТУЮ СТРОЧКУ
                                    //if(!$flag)echo "<td><a href=\"javascript:addToCart(".$i.",1);\">Купить</a></td>";
                                    //if($flag)echo "<td>&nbsp;</td>";
                                    //БЕЗ ПРОВЕРКИ
                                    echo "<td>";
                                    echo "<input type=\"text\" name=\"mytext\" size=\"4\" id=\"qty".$i."\">";
                                    echo "&nbsp;&nbsp;<a href=\"javascript:addToCart(".$i.",".$f['rp_num'].");\">Заказать</a>";
                                    echo "</td>";
    
                                }
                                echo "</tr>";
                            }
                            //mysql_free_result($r2);
                        }
                        echo "</table>";
                        echo "<br>";
                        mysql_free_result($r);                
                    }//КОНЕЦ ОПТИМИЗАЦИИ ПО ПОИСКУ В ЗАГОЛОВКЕ И ТЕЛЕ
                }//КОНЕЦ ПОИСКА ПО ЗОНАМ
            }//КОНЕЦ ПРОБЕГА ПО ПОЛЯМ
            else{
                //ПОИСК ПО МАССИВУ НЕ РАЗРЕШЕН
                //echo "<p align=\"center\"><b><font color=\"red\">Завод [".$f['rp_title']."] Запрещен к ПОИСКУ</b></font></p>";
            }
        }
        else
        {
            //ЗАВОД ЗАПРЕЩЕН К ПУБЛИКАЦИИ
            //echo "<p align=\"center\"><b><font color=\"red\">Завод [".$f['rp_title']."] Запрещен к публикации</b></font></p>";
        }    
    }
    if($flag_global!=1){
        echo "<p align=\"center\"><b><font color=\"red\">По вашему запросу ничего не найдено.</b></font></p>";
    }

}

?>

PM MAIL   Вверх
MoLeX
Дата 11.6.2009, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



TetraHC, тебе во фриланс надо. тема закрыта


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.