Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [Все]   Вниз
  Печать  
Автор Тема: Поиск по базе MySQL на php  (Прочитано 42914 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Tatyana
Участник

ru
Offline Offline
Пол: Женский

« : 01-06-2009 04:22 » 

У меня такая проблема. Есть база в MySQL. В ней много таблиц.  На главной странице сайта форма для поиска (html, передача данных методом post).  Нужно сделать поиск по базе. Я пишу вот такой код:

Цитата
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Untitled Document</title>
</head>
<body>
<form action="" method=post>
<div align="right">
<table width="100%" border="0">
  <tr>
    <td width="50%" height="124"></td>
    <td width="50%">
   <br />Введите слово для поиска
   <input type="text" name="search" size="50" />
   <input type="submit" value="Найти!" name="submit">
    </td>
  </tr>
</table>
</div>
</form>
<table width="90%" border="0" bgcolor="#FFFFCC">
  <tr>
    <td colspan="2"><div align="center">
      <p><b>Добро пожаловать на сайт ООО "ПРОМЭК"</b></p>
      <p align="center"> На нашем сайте представлен католог продукции для металлургии
и машиностроения.
Если вас заинтересовало что-то из нашей продукции, вы можете связаться с нами по
телефонам указанным в <a href="AboutCompany.html">контактной информации</a>, либо
оставьте свои координаты (заполнив <a href="KontInform.php">форму</a>) и наш менеджер
свяжется с Вами в ближайшее время.</p>
      <p>Спасибо что посетили наш сайт!</p>
    </div></td>
  </tr>
</table>
<?
error_reporting(E_ERROR);
$conn=odbc_connect('KatalogSQL','Татьяна','gbnth');
if (!$conn) {   
    exit("Connection Failed: " . $conn);
}
$_POST['search'] =  substr(htmlspecialchars(trim($_POST['search'])), 0, 100);
$sql="select Name, Gruppa_ID from Pokovki where Name LIKE "%$_POST['search']%";
$rs=odbc_exec($conn,$sql);
$nf=odbc_num_fields($rs);
if (!$rs) {
     exit("Error in SQL");
}
 echo "<table border=1>\n";
 //заголовок таблицы
echo "<tr>";
for($i=0; $i<$nf;$i++){
   $field=odbc_field_name($rs,$i);
   echo "<th>".$field."</th>\n";
}
echo "</tr>\n";
while(odbc_fetch_row($rs)){
   echo "<tr>";
   for($j=0;$j<$nf;$j++){
      $val=odbc_result($rs,$j);
      echo "<td>".$val."</td> ";
   }
   echo "\n</tr>\n";
}
echo "</table>";
odbc_free_result($rs);
odbc_close($conn);
?>
</body>
</html>

Пока запрос написала только для одной таблицы. Но поиск не работает! Как исправить???  Заранее спасибо.
Записан

Smile, though your heart is aching
Smile, even though it's breaking ©
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #1 : 01-06-2009 06:13 » 

Tatyana, а если в консоли выполнить твой запрос, он будет работать?
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 01-06-2009 06:18 » 

зачем так много слов?
select Name, Gruppa_ID from Pokovki where Name LIKE "%ЧТО-ТО%";
 в пхп-админ - работает?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Chaa
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 01-06-2009 06:21 » 

У вас строчка
Код:
$sql="select Name, Gruppa_ID from Pokovki where Name LIKE "%$_POST['search']%";
неправильно написана с точки зрения синтаксиса пхп. Должно быть
Код:
$sql="select Name, Gruppa_ID from Pokovki where Name LIKE '%".$_POST['search']."%'";
Записан
Tatyana
Участник

ru
Offline Offline
Пол: Женский

« Ответ #4 : 01-06-2009 06:37 » 

Tatyana, а если в консоли выполнить твой запрос, он будет работать?

пишу в Query Analyzer:
Цитата
select Name, Gruppa_ID from Pokovki where Name LIKE 'Полые поковки'
'Полые поковки' - это одно из значений в таблице.
Запрос работает. Выводит нужные мне данные.
Но когда в самом  файле пишу :
Цитата
"select Name, Gruppa_ID from Pokovki where Name LIKE '%$_POST['search']%' ";
не работает. Т.е. никакой ошибки не выдает, но и таблицу не рисует....

select Name, Gruppa_ID from Pokovki where Name LIKE "%ЧТО-ТО%";
Что значит LIKE "%ЧТО-ТО%" Не понял Мне же нужно искать конкретное слово введенное пользователем в форму.... Не понимаю....

У вас строчка
Код:
$sql="select Name, Gruppa_ID from Pokovki where Name LIKE "%$_POST['search']%";
неправильно написана с точки зрения синтаксиса пхп. Должно быть
Код:
$sql="select Name, Gruppa_ID from Pokovki where Name LIKE '%".$_POST['search']."%'";

Спасибо, исправила.
Записан

Smile, though your heart is aching
Smile, even though it's breaking ©
Chaa
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 01-06-2009 06:44 » 

Попробуйте заменить
Код:
error_reporting(E_ERROR);
на
Код:
error_reporting(E_ALL);
Может какие-то ошибки всплывут.
Записан
Tatyana
Участник

ru
Offline Offline
Пол: Женский

« Ответ #6 : 01-06-2009 06:49 » 

Попробуйте заменить
Код:
error_reporting(E_ERROR);
на
Код:
error_reporting(E_ALL);
Может какие-то ошибки всплывут.

изменила, но ошибок никаких не выдаёт.... я вот думаю, может сделать какую-то дополнительную форму или страницу на которую выводить результат?
Записан

Smile, though your heart is aching
Smile, even though it's breaking ©
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 01-06-2009 06:56 » 

как ты делаешь отладку?
в какой кодировке таблица?
сделай
после
$sql="select Name, Gruppa_ID from Pokovki where Name LIKE "%$_POST['search']%";
echo $sql;

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #8 : 01-06-2009 06:58 » 

В $_POST['search'] у тебя нужно слово?
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Tatyana
Участник

ru
Offline Offline
Пол: Женский

« Ответ #9 : 01-06-2009 07:00 » 

как ты делаешь отладку?
эээ... просто запускаю файл с кодом....  

в какой кодировке таблица?

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

ты это имеешь ввиду???

сделай после
$sql="select Name, Gruppa_ID from Pokovki where Name LIKE "%$_POST['search']%";
echo $sql;
сделала, без изменений....
Записан

Smile, though your heart is aching
Smile, even though it's breaking ©
Tatyana
Участник

ru
Offline Offline
Пол: Женский

« Ответ #10 : 01-06-2009 07:01 » 

В $_POST['search'] у тебя нужно слово?
Да,  у меня есть форма (html), в ней есть поле ввода <input type="text" name="search" size="50" /> Нужно искать в базе введенное слово.
Записан

Smile, though your heart is aching
Smile, even though it's breaking ©
Chaa
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 01-06-2009 07:05 » 

И что вообще выдает скрипт? Посмотрите в браузере исходный текст страницы, и покажите нам здесь.
Записан
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #12 : 01-06-2009 07:07 » 

Tatyana, я это прекрасно вижу по твоему коду, я спрашиваю о другом, после вот этого: _POST['search'] =  substr(htmlspecialchars(trim($_POST['search'])), 0, 100); у тебя в $_POST['search'] остается нужное слово?

а Слава тебя спросил про это: echo $sql; в том смысле что на страничке должен напечататься твой запрос, который ты пытаешься выполнить.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Tatyana
Участник

ru
Offline Offline
Пол: Женский

« Ответ #13 : 01-06-2009 07:09 » 

И что вообще выдает скрипт? Посмотрите в браузере исходный текст страницы, и покажите нам здесь.


Цитата
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Untitled Document</title>
</head>
<body>
<table width="100%" border="0">
  <tr>
    <td width="50%" height="124"></td>
    <td width="50%">
<form id="frmSearch" name="frmSearch" method="post" action="">
  <label><br />
  <br />
 Введите слово для поиска
  <input type="text" name="textfield" />
  </label>
  <label>
  <input type="submit" name="Submit" value="Найти!" onclick="" />
  </label>
<p><label></label>
  </p>

</form>
   </td>
  </tr>
</table>
<table width="90%" border="0" bgcolor="#FFFFCC">
  <tr>
    <td colspan="2"><div align="center">
      <p><b>Добро пожаловать на сайт ООО "ПРОМЭК"</b></p>
      <p align="center"> На нашем сайте представлен католог продукции для металлургии и машиностроения.
Если вас заинтересовало что-то из нашей продукции, вы можете связаться с нами по телефонам указанным в <a href="AboutCompany.html">контактной информации</a>, либо оставьте свои координаты (заполнив <a href="KontInform.php">форму</a>) и наш менеджер свяжется с Вами в ближайшее время.</p>

      <p>Спасибо что посетили наш сайт!</p>
    </div></td>
  </tr>
</table>
</body>
</html>
Записан

Smile, though your heart is aching
Smile, even though it's breaking ©
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 01-06-2009 07:10 » 

я так понимаю, что возможно не происходит подключения к базе
 и как это ничего не вывело?

тогда хочу такого

$sql="select Name, Gruppa_ID from Pokovki where Name LIKE "%$_POST['search']%";
echo "sql = $sql";

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #15 : 01-06-2009 07:11 » 

Tatyana, а давай скриншот, до и после выполнения.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Tatyana
Участник

ru
Offline Offline
Пол: Женский

« Ответ #16 : 01-06-2009 07:12 » 

Tatyana, я это прекрасно вижу по твоему коду, я спрашиваю о другом, после вот этого: _POST['search'] =  substr(htmlspecialchars(trim($_POST['search'])), 0, 100); у тебя в $_POST['search'] остается нужное слово?

хм.. ну по-идее да... я точно не могу сказать...  Во всяком случае, когда я делала отправку писем с сайта, я введенные слова в поле ввода "доставала"  именно так ))
Записан

Smile, though your heart is aching
Smile, even though it's breaking ©
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #17 : 01-06-2009 07:14 » 

Tatyana, как это ты не можешь сказать точно? Ты просто выведи на ту же страницу до выполнения эту переменную!
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Chaa
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 01-06-2009 07:15 » 

Судя по тому, что инструкции
Код:
echo "</table>";
не выполняются, у вас пхп на сервере настроен неправильно. Нужно разбираться.
Для начала заставьте работать скрипт
Код:
<?php
phpinfo
();
?>
Насколько я понимаю, вы работаете под Windows на IIS. Попробуйте вместо
Код:
<?
писать
Код:
<?php
чтобы случайно не путатлось с ASP.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #19 : 01-06-2009 07:18 » 

сделай следующее
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Untitled Document</title>
</head>
<body>
<form action="search.php" method=post>
<div align="right">
<table width="100%" border="0">
  <tr>
    <td width="50%" height="124"></td>
    <td width="50%">
   <br />Введите слово для поиска
   <input type="text" name="search" size="50" />
   <input type="submit" value="Найти!" name="submit">
    </td>
  </tr>
</table>
</div>
</form>
</body>
</html>
создаешь файл
search.php
примерно с таким кодом
Код:
<?php
error_reporting
(E_ERROR);
$conn=odbc_connect(&#39;KatalogSQL&#39;,&#39;Татьяна&#39;,&#39;gbnth&#39;);
if (!$conn) {   
    exit(
"Connection Failed: " $conn);
}
$_POST[&#39;search&#39;] =  substr(htmlspecialchars(trim($_POST[&#39;search&#39;])), 0, 100);
echo "строка ".$_POST[&#39;search&#39;]."<br>"; 
$sql="select Name, Gruppa_ID from Pokovki where Name LIKE "%$_POST[&#39;search&#39;]%";
echo "sql = $sql <br>";
$rs=odbc_exec($conn,$sql);
$nf=odbc_num_fields($rs);
if (!
$rs) {
     exit(
"Error in SQL");
}
 echo 
"<table border=1>\n";
 
//заголовок таблицы
echo "<tr>";
for(
$i=0$i<$nf;$i++){
   
$field=odbc_field_name($rs,$i);
   echo 
"<th>".$field."</th>\n";
}
echo 
"</tr>\n";
while(
odbc_fetch_row($rs)){
   echo 
"<tr>";
   for(
$j=0;$j<$nf;$j++){
      
$val=odbc_result($rs,$j);
      echo 
"<td>".$val."</td> ";
   }
   echo 
"\n</tr>\n";
}
echo 
"</table>";
odbc_free_result($rs);
odbc_close($conn);
?>

Результат в студию
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Tatyana
Участник

ru
Offline Offline
Пол: Женский

« Ответ #20 : 01-06-2009 07:28 » 

сделай следующее
.....
Результат в студию

Работает!!!!!!!!!!!!  Улыбаюсь) Надо только внешний вид подкорректировать  Ага

* 2.JPG (12.66 Кб - загружено 878 раз.)
Записан

Smile, though your heart is aching
Smile, even though it's breaking ©
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #21 : 01-06-2009 07:30 » 

суду все яно Улыбаюсь
Код:
<?php
...
?>

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Tatyana
Участник

ru
Offline Offline
Пол: Женский

« Ответ #22 : 01-06-2009 07:35 » 

хм.. у меня ещё один вопрос... А как мне теперь cделать, чтобы  поиcк был по всем таблицам в базе??? По идее, нужно прописаnь во фразе FROM имена всех таблиц... Но у меня их 30 штук....  Во фразе фром можно использовать "*" ?
Записан

Smile, though your heart is aching
Smile, even though it's breaking ©
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #23 : 01-06-2009 07:36 » 

Tatyana, нет нельзя, у тебя во всех таблицах одна и та же информация?
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Tatyana
Участник

ru
Offline Offline
Пол: Женский

« Ответ #24 : 01-06-2009 07:40 » 

Tatyana, нет нельзя, у тебя во всех таблицах одна и та же информация?
Нет, информация разная, но столбец Name (по которому идёт поиск - есть во всех таблицах)
Записан

Smile, though your heart is aching
Smile, even though it's breaking ©
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #25 : 01-06-2009 07:44 » 

делать union

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Chaa
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #26 : 01-06-2009 07:53 » 

А что мешает информацию о всей продукции поместить в одну таблицу?
Записан
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #27 : 01-06-2009 07:56 » 

Tatyana, хорошо бы услышать вообще общую картину что необходимо получить. В разные отчеты нужны разные данные, значит разные запросы, пусть даже 30 штук.
Sla, я думаю union на 30 таблицах будет выглядеть громоздко и работать будет не быстро.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #28 : 01-06-2009 07:58 » 

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

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Tatyana
Участник

ru
Offline Offline
Пол: Женский

« Ответ #29 : 01-06-2009 08:03 » 

Ребята!! Спасибо большое за помошь! Все ваши советы учту!! Ещё раз спасибо!
Записан

Smile, though your heart is aching
Smile, even though it's breaking ©
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #30 : 02-06-2009 13:25 » 

Tatyana, хочу предупредить, что как в исходном варианте есть дырка для атаки типа SQL-Injection! В варианте Славы она решена, но некорректно (htmlspacialchars исказит первоначальную строку).

Во-первых, если нет на то специальных требований, лучше воспользоваться встроенным модулем mysql и соотв. функциями: mysql_connect, mysql_query и т.п.
Во-вторых, данные, переданные от пользователя - $_POST['search'], необходимо пропустить через функцию mysql_escape_string - как раз для ликвидации дырки.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Chaa
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #31 : 03-06-2009 01:54 » 

В том варианте, как есть, лучше использовать odbc_prepare и odbc_execute вместо odbc_exec.
И, судя по Query Analyzer, БД видимо MS SQL.
Записан
Ayat
Гость
« Ответ #32 : 16-06-2010 05:00 » 

здрасти, я новичек в программировании, по этому хочу попросить Вашей помощи и направить в нужные русла. Пробовал поставить себе код Sla который высше указан но я даже там не разоюрался. у меня есть таблица baza там три столбца id, name, kurator. мне на этой таблице по столбцу name нужно организовать фильтр, у меня есть такая форма
Код:
<form action="name.php">
<input type="text" name="search" size="50">
<input type="submit" value="Найти!" name="submit">
которая отправляет на этот файл name.php
теперь мне нужно написать скрипт в файле name.php, который сделает поиск по введенному слову на столбце name, и выводит не только содержимое name но и содержимое столбца kurator.
вот мой скрипт который я сам написал, но к сожелению она не работает:
Код:
<HTML>
<HEAD>
<TITLE>
Вывод результатов поиска
</TITLE>
</HEAD>
<BODY>
<?php
@mysql_connect("localhost""baza""baza") or die("Невозможно подключиться  к серверу MySQL!");
@
mysql_select_db("baza") or die("Невозможно подключиться  к базе данных!");
$link=mysql_connect("localhost","baza","baza");
?>

</BODY>
</HTML>
все дальше темнота, может у кого та готовый скрипт есть или может кто то пару минут подарит, я думаю написать такой скрипт много времени не займет для программиста это кажется пустяк, а вот для меня как начинающему это ........
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #33 : 16-06-2010 05:58 » 

Ayat, mysql_connect два раза делать не нужно. Он и с первого раза поймет.
Про классический пример я тебе уже написал в другой теме.. Попробуй, все-таки найти пример (гугл в помощь) и в нем разобраться.

В скрипте name.php ты можешь обрабатывать переменную $_REQUEST['search'] , которая будет содержать текст, введенный пользователем. Тебе остается только составить SQL-запрос, выполнить его, получить строку (строки) результатов и вывести её в нужном виде.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Ayat
Гость
« Ответ #34 : 16-06-2010 06:13 » 

Ayat, mysql_connect два раза делать не нужно. Он и с первого раза поймет.
Про классический пример я тебе уже написал в другой теме.. Попробуй, все-таки найти пример (гугл в помощь) и в нем разобраться.

В скрипте name.php ты можешь обрабатывать переменную $_REQUEST['search'] , которая будет содержать текст, введенный пользователем. Тебе остается только составить SQL-запрос, выполнить его, получить строку (строки) результатов и вывести её в нужном виде.

а как это все делать я же говорю темнота у меня))) может подскажешь хотя бы где про это по читать, где нормально легким языком написано, желательно с примерами
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #35 : 16-06-2010 06:18 » 

Ayat, вот тут все есть: http://www.google.ru/search?q=%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA+PHP
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Страниц: 1 2 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines