|
|
|
| Здравствуйте!
Помогите, пожалуйста, разобраться.
Осуществляю поиск в базе данных по поисковому запросу, который передаётся из формы, но не выполняется условие LIKE ...
Например, в базе есть числа 7, 78, 768 и т.д , если в поисковом запросе ввести только 7, то необходимо, чтобы выводились все подобные совпадения т.е. 78, 768 и т.д , но почему - то выводится: По вашему запросу ничего не найдено.
Если использовать только условие WHERE textname=$st_sql , то всё работает, но данное условие мне не подходит(выводятся только строгие совпадения), а мне нужны все совпадения, которые схожи поисковой фразе.
Я не могу понять почему в моём скрипте не выполняется условие LIKE! Пожалуйста, помогите.
Код обработчика:
<?php
if(!isset($_POST['searchterm']))
{
if(isset($_GET['searchterm']))
{
$st_sql = "'".mysql_escape_string(trim($_GET['searchterm']))."'";
$st_ref = urlencode($_GET['searchterm']);
}
}
else
{
$st_sql = '"'.mysql_escape_string(trim($_POST['searchterm'])).'"';
$st_ref = urlencode($_POST['searchterm']);
}
if (!($conn_id = @mysql_connect("localhost", "root", "webwizard")))
die ("Cannot connect to server<br>");
if (!@mysql_select_db("search", $conn_id))
die ("Cannot select database<br>");
$per_page=2; // Количество сообщений на одной страниче
if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
$start=abs($page*$per_page);
$query = "SELECT * FROM find WHERE textname LIKE '%$st_sql%' LIMIT $start, $per_page";
$result=mysql_query($query);
echo "<TABLE border = 1 borderColor = '#7b90b7' cellpadding = 5 cellspacing = 0 width = 100%>";
while($row=mysql_fetch_array($result))
{
$temp = "1";
$url = $row['linkname'];
$poisk = $row['textname'];
echo "
<TR>
<TD><a href = 'http://$url' class = 'load'>$poisk</a></TD>
</TR>";
}
echo "</TABLE><p>";
.....
?>
|
| |
|
|
|
|
|
|
|
для: webzorb
(26.11.2006 в 08:42)
| | Попробуйте так:
$query = "SELECT * FROM find WHERE textname LIKE(' %".$st_sql."%')
LIMIT ' ". $start ." ',' ". $per_page." ' "; | |
|
|
|
|
|
|
|
для: AlexelA
(26.11.2006 в 10:14)
| | AlexelA
К сожалению, так тоже выводит:
По вашему запросу ничего не найдено. | |
|
|
|
|
|
|
|
для: webzorb
(26.11.2006 в 12:16)
| | Может так
$st_sql = "'%".mysql_escape_string(trim($_GET['searchterm']))."%'";
...
$query = "SELECT * FROM find WHERE textname LIKE ".$st_sql." LIMIT $start, $per_page"; | |
|
|
|
|
|
|
|
для: AlexelA
(26.11.2006 в 13:11)
| | AlexelA
>Может так
>$st_sql = "'%".mysql_escape_string(trim($_GET['searchterm']))."%'";
>...
>$query = "SELECT * FROM find WHERE textname LIKE ".$st_sql." LIMIT $start, $per_page";
Вот так работает,
$st_sql = "'%".mysql_escape_string(trim($_POST['searchterm']))."%'";
но теряется поисковый запрос при переходе на другую страницу!
Как быть с $_GET
($st_sql = "'%".mysql_escape_string(trim($_GET['searchterm']))."%'";) | |
|
|
|
|
|
|
|
для: webzorb
(26.11.2006 в 13:44)
| | Я бы использовал сессии | |
|
|
|
|
|
|
|
для: AlexelA
(26.11.2006 в 15:16)
| | AlexelA
1)А почему использовать сессии лучше!
2) А как без сессий решить проблему с $_GET! | |
|
|
|
|
|
|
|
для: webzorb
(26.11.2006 в 15:28)
| | Так как переменные $_GET не сохраняются, я и предлагаю вам
держать их в сессии, что будет надежнее и удобнее.
Если хотите через GET, то, возможно, поможет
формирование в ссылке на новую страницу переменной с
поисковым запросом, т.е.
...?searchterm=".$_GET['searchterm']."&... | |
|
|
|
|
|
|
|
для: webzorb
(26.11.2006 в 08:42)
| | Хм... странно, должно бы работать. | |
|
|
|
|
|
|
|
для: cheops
(26.11.2006 в 12:09)
| | cheops
Я тоже думаю странно! Вот и маюсь уже 3-и часа | |
|
|
|
|
|
|
|
для: webzorb
(26.11.2006 в 12:17)
| | не должно так работать. st_sql УЖЕ в кавычках. Это УЖЕ сформированный литерал. | |
|
|
|
|
|
|
|
для: Trianon
(26.11.2006 в 13:00)
| | Trianon
Как нужно задать тогда условие поиска по базе! | |
|
|
|
|
|
|
|
для: Trianon
(26.11.2006 в 13:00)
| | Trianon
не должно так работать. st_sql УЖЕ в кавычках. Это УЖЕ сформированный литерал.
Как нужно правильно. Пожалуйста, скажите, мне это очень нужно. | |
|
|
|
|
|
|
|
для: Trianon
(26.11.2006 в 13:00)
| |
$st_sql = "'".mysql_escape_string(trim($_GET['searchterm']))."'";
$st_like_sql = "'%".mysql_escape_string(trim($_GET['searchterm']))."%'";
...
$query = "SELECT * FROM find WHERE textname LIKE $st_like_sql LIMIT $start, $per_page";
|
| |
|
|
|
|
|
|
|
для: Trianon
(26.11.2006 в 16:56)
| | Спасибо большое Trianon, AlexelA | |
|
|
|