Есть сайт 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> </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> </td>"; //БЕЗ ПРОВЕРКИ echo "<td>"; echo "<input type=\"text\" name=\"mytext\" size=\"4\" id=\"qty".$i."\">"; echo " <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>"; }
}
?>
|
|