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

Форум MySQL

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

 

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

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

тема: Помогите с поиском по базе данных
 
 автор: p.novikov   (04.01.2009 в 15:43)   письмо автору
 
 

Здравствуйте!
Есть вот такой код (я его немного переделал):
<form action="index.php" method="post" name="form_s">
<p class="search_t">Поисковый запрос должен быть не менее 4-х символов.</p>
<p><input name="search" type="text" size="25" maxlength="40">
<br>
<input class="search_b" name="submit_s" type="submit" value="Искать">
</p>
</form>
<? include ("bd.php");
if (isset(
$_POST['submit_s']))
{
$submit_s $_POST['submit_s'];
}
if (isset(
$_POST['search']))
{
$search $_POST['search'];
}

   if (isset(
$submit_s))
   {
   if (empty(
$search) or strlen($search) < 4)
   {
   exit (
"<p>Поисковый запрос не введен, либо он менее 4-х символов.</p>");
   }
     
$search trim($search);
     
$search stripslashes($search);
     
$search htmlspecialchars($search);
   }
   else 
   {
   exit(
"<p>Вы обратились к файлу без необходимых параметров.</p>");
   }
?>

<?      
        $result 
mysql_query("SELECT * FROM jos_product WHERE (num LIKE '%$search%')
OR (name LIKE '%
$search%') OR (an LIKE '%$search%') OR (note LIKE '%$search%') ORDER BY price",$db);

if (!
$result)
{
echo 
"<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору mwc@korgp.com. <br> <strong>Код ошибки:</strong></p>";
exit(
mysql_error());
}

if (
mysql_num_rows($result) > 0)

{
?>
    <table class="table" border="1" cellpadding="3" cellspacing="0" width="100%" bordercolordark="white" bordercolorlight="silver">
     <tr class="zagtrtable" align="center">
       <td height="20">Номер детали</td>
       <td>Наим. детали</td>
       <td>Цена</td>
       <td>Цена, рек. </td>
       <td>Кол-во</td>
       <td>Аналог</td>
       <td>Поставщик</td>       
       <td>Прим.</td>
     </tr>
<?php     
$myrow 
mysql_fetch_array($result); 

do 
{

$r $myrow["price"]/$myrow["rec"];
$r intval($r);

printf ("<tr>
                <td>"
.$myrow['num']."</td>
                <td>"
.$myrow['name']."</td>
                <td>"
.$myrow['price']."</td>
                <td>"
.$myrow['rec']."</td>
                <td>"
.$myrow['qty']."</td>
                <td>"
.$myrow['an']."</td>
                <td>"
.$myrow['seller']."</td>                
                <td>"
.$myrow['note']."</td>
              </tr>"
,$myrow["num"],$myrow["name"],$myrow["price"], $myrow["rec"],$myrow["qty"],$myrow["an"], $myrow["seller"], $myrow["note"], $r);



}
while (
$myrow mysql_fetch_array($result));



}

else
{
echo 
"<p>Информация по Вашему запросу не найдена.</p>";
exit();
}
?>


Помощь нужна вот в чем: в базе могут присутствовать данные, которые записаны через дефис или пробел, или слитно (например: 2531025050, 25310-25050, 25310 25050). Так вот при вводе в поле поиска 2531025 результат естественно только 2531025050, а остальные не выдает... Раньше у меня было вот так:

  if(!empty($_POST['name']))  
    $tmp1 = " and REPLACE(REPLACE(REPLACE(name, ' ', ''), '_', ''), '-', '') " 
          . "LIKE '%".$_POST['name']."%' ";
$query = "SELECT * FROM jos_product WHERE hide='show' ".$tmp1." ORDER BY price";

куда теперь прицепить and REPLACE(REPLACE(REPLACE(name, ' ', ''), '_', ''), '-', '') я не знаю, потому как специалист... подскажите пожалуйста...

  Ответить  
 
 автор: Николай2357   (04.01.2009 в 21:27)   письмо автору
 
   для: p.novikov   (04.01.2009 в 15:43)
 

Ну так а туда же и прицепите, где было...
<?
"......WHERE REPLACE(REPLACE(REPLACE(num , ' ', ''), '_', ''), '-', '') LIKE '%$search%' 
OR (REPLACE(REPLACE(REPLACE(name, ' ', ''), '_', ''), '-', '') LIKE '%
$search%'..........."

только вот это Вам eще нужно привести в порядок.
<?
     $search 
trim($search); 
     
$search stripslashes($search); 
     
$search htmlspecialchars($search);

  Ответить  
 
 автор: Trianon   (04.01.2009 в 21:42)   письмо автору
 
   для: Николай2357   (04.01.2009 в 21:27)
 

а я бы сперва все поля склеил, а потом уже над результатом стал бы замены и LIKE учинять.

  Ответить  
 
 автор: p.novikov   (05.01.2009 в 13:08)   письмо автору
 
   для: Trianon   (04.01.2009 в 21:42)
 

А что не так здесь?

     $search = trim($search);
     $search = stripslashes($search);
     $search = htmlspecialchars($search);


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

  Ответить  
 
 автор: Trianon   (05.01.2009 в 15:46)   письмо автору
 
   для: p.novikov   (05.01.2009 в 13:08)
 

Здесь не так всё.
Все эти три строки ничего, кроме вреда не приносят. Первая слегка, остальные две - по крупному.
Склеить - значит из строк нескольких полей сделать одну большую строку, и уже в ней менять и искать.
Просто чтоб не по несколько раз на запись выполнять замены и поиски.

[поправлено модератором]

  Ответить  
 
 автор: p.novikov   (05.01.2009 в 16:31)   письмо автору
 
   для: Trianon   (05.01.2009 в 15:46)
 

[поправлено модератором]

  Ответить  
 
 автор: Trianon   (05.01.2009 в 16:41)   письмо автору
 
   для: p.novikov   (05.01.2009 в 16:31)
 

SELECT * FROM jos_product 
  WHERE (REPLACE(REPLACE(REPLACE(CONCAT(num,'/',name,'/',an,'/',note), ' ', ''), '_', ''), '-', '') 
LIKE '%$search%')  ORDER BY price

  Ответить  
 
 автор: p.novikov   (11.01.2009 в 17:11)   письмо автору
 
   для: Trianon   (05.01.2009 в 16:41)
 

Благодарствую!

  Ответить  
Rambler's Top100
вверх

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