|
|
|
| У меня на сайте есть поиск товара. Он ищет название из таблицы MySQL и выдаёт результаты. Проблема в том, что он ищет только полное вхождение, т.е. слово должно закончится.
Пример: если ищу "мыши", то выводятся только названия "мышей", а мне нужно, чтобы туда попадали и названия "мышиный", "мыши-звери" и т.д.
А при вводе слова "мыш" он вообще ничего не выводит!
Вот код:
<?php
$link = mysql_connect("mysql.root5.ru", "dbu_monyc_2", "werbnm")
or die("Не соединилось!!!");
mysql_select_db("db_monyc_3") or die("Не найдена БД");
$query = "select * from materialy order by material";
$result = mysql_query($query) or die($query);
$row = mysql_fetch_array($result);
$poisk= $_POST['poisk'];
$poisk = trim($poisk);
...
echo "Вы искали: <span class='page_name'>$poisk</span>";
echo "<br><br>";
while ($row = mysql_fetch_array($result))
{
$mat = $row['material'];
$id = $row['id_materiala'];
$ed_izm= $row['ed_izm'];
$cost = $row['primer'];
$mat=strtolower($mat);
$poisk=strtolower($poisk);
if((stristr($mat, $poisk)!=False))
{
вывод результатов }
|
И ещё - почему не работает преобразование в ниж. регистр? | |
|
|
|
|
|
|
|
для: Stasycat
(27.02.2008 в 18:02)
| | >не работает преобразование в ниж. регистр
установите русскую локаль setlocale()
<?
setlocale(LC_ALL, 'ru_RU.CP1251');
?>
|
<?
if((stristr($mat, $poisk)!=False))
{
вывод результатов }
?>
|
Это по вашему поиск? Это просто сравнение. Пошарьте поиск | |
|
|
|
|
|
|
|
для: mihdan
(27.02.2008 в 18:06)
| | А что это - русскуя локаль?
Я до этого уже делала на другом сайте такой поиск, но было это год назад, версии php и mysql, видимо, были другие. Мой поиск всего лишь должен проверять - входит ли искомое слово в название товара (всего один столбец таблицы). На прошлом сайте получалось.
А все другие поиски, которые я встречала, осуществляют "Поиск по сайту" или в текстовых файлах. Но это не то.
Посоветуйте, как по-другому решить эту задачу, без примитивного вхождения подстроки? | |
|
|
|
|
|
|
|
для: Stasycat
(28.02.2008 в 09:05)
| | Используй регулярные выражения типа
$query_tovar=mysql_query("select * from tovar");
for($i=0;$i<=mysql_num_rows($query_tovar);$i++)
{
$all_tovar=mysql_fetch_array($query_tovar);
$_1=strtolower($poisk); //Перевод в нижний регистр запрос от пользователя
$_2=strtolower($all_tovar["name"]); //Перевод в нижний регистр имени товара из базы
if(@ereg("$_1",$_2)==true) // ereg ищит именно вхождение в строку, проверяем есть ли вхождение
{
echo "Результат";
}
}
|
| |
|
|
|