Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не выполняется условие LIKE, помогите, plizzz
 
 автор: webzorb   (26.11.2006 в 08:42)   письмо автору
 
 

Здравствуйте!
Помогите, пожалуйста, разобраться.

Осуществляю поиск в базе данных по поисковому запросу, который передаётся из формы, но не выполняется условие 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>";
.....
?>

   
 
 автор: AlexelA   (26.11.2006 в 10:14)   письмо автору
 
   для: webzorb   (26.11.2006 в 08:42)
 

Попробуйте так:
$query = "SELECT * FROM find WHERE textname LIKE(' %".$st_sql."%')
LIMIT ' ". $start ." ',' ". $per_page." ' ";

   
 
 автор: webzorb   (26.11.2006 в 12:16)   письмо автору
 
   для: AlexelA   (26.11.2006 в 10:14)
 

AlexelA
К сожалению, так тоже выводит:
По вашему запросу ничего не найдено.

   
 
 автор: AlexelA   (26.11.2006 в 13:11)   письмо автору
 
   для: 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";

   
 
 автор: webzorb   (26.11.2006 в 13:44)   письмо автору
 
   для: 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']))."%'";)

   
 
 автор: AlexelA   (26.11.2006 в 15:16)   письмо автору
 
   для: webzorb   (26.11.2006 в 13:44)
 

Я бы использовал сессии

   
 
 автор: webzorb   (26.11.2006 в 15:28)   письмо автору
 
   для: AlexelA   (26.11.2006 в 15:16)
 

AlexelA

1)А почему использовать сессии лучше!
2) А как без сессий решить проблему с $_GET!

   
 
 автор: AlexelA   (26.11.2006 в 16:23)   письмо автору
 
   для: webzorb   (26.11.2006 в 15:28)
 

Так как переменные $_GET не сохраняются, я и предлагаю вам
держать их в сессии, что будет надежнее и удобнее.
Если хотите через GET, то, возможно, поможет
формирование в ссылке на новую страницу переменной с
поисковым запросом, т.е.

...?searchterm=".$_GET['searchterm']."&...

   
 
 автор: cheops   (26.11.2006 в 12:09)   письмо автору
 
   для: webzorb   (26.11.2006 в 08:42)
 

Хм... странно, должно бы работать.

   
 
 автор: webzorb   (26.11.2006 в 12:17)   письмо автору
 
   для: cheops   (26.11.2006 в 12:09)
 

cheops
Я тоже думаю странно! Вот и маюсь уже 3-и часа

   
 
 автор: Trianon   (26.11.2006 в 13:00)   письмо автору
 
   для: webzorb   (26.11.2006 в 12:17)
 

не должно так работать. st_sql УЖЕ в кавычках. Это УЖЕ сформированный литерал.

   
 
 автор: webzorb   (26.11.2006 в 13:06)   письмо автору
 
   для: Trianon   (26.11.2006 в 13:00)
 

Trianon
Как нужно задать тогда условие поиска по базе!

   
 
 автор: webzorb   (26.11.2006 в 13:27)   письмо автору
 
   для: Trianon   (26.11.2006 в 13:00)
 

Trianon
не должно так работать. st_sql УЖЕ в кавычках. Это УЖЕ сформированный литерал.

Как нужно правильно. Пожалуйста, скажите, мне это очень нужно.

   
 
 автор: Trianon   (26.11.2006 в 16:56)   письмо автору
 
   для: 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";

   
 
 автор: webzorb   (27.11.2006 в 05:15)   письмо автору
 
   для: Trianon   (26.11.2006 в 16:56)
 

Спасибо большое Trianon, AlexelA

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования