Tatyana
|
|
« : 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
|
|
« Ответ #1 : 01-06-2009 06:13 » |
|
Tatyana, а если в консоли выполнить твой запрос, он будет работать?
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Sla
|
|
« Ответ #2 : 01-06-2009 06:18 » |
|
зачем так много слов? select Name, Gruppa_ID from Pokovki where Name LIKE "%ЧТО-ТО%"; в пхп-админ - работает?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Chaa
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #5 : 01-06-2009 06:44 » |
|
Попробуйте заменить error_reporting(E_ERROR); на Может какие-то ошибки всплывут.
|
|
|
Записан
|
|
|
|
Tatyana
|
|
« Ответ #6 : 01-06-2009 06:49 » |
|
Попробуйте заменить error_reporting(E_ERROR); на Может какие-то ошибки всплывут. изменила, но ошибок никаких не выдаёт.... я вот думаю, может сделать какую-то дополнительную форму или страницу на которую выводить результат?
|
|
|
Записан
|
Smile, though your heart is aching Smile, even though it's breaking ©
|
|
|
Sla
|
|
« Ответ #7 : 01-06-2009 06:56 » |
|
как ты делаешь отладку? в какой кодировке таблица? сделай после $sql="select Name, Gruppa_ID from Pokovki where Name LIKE "%$_POST['search']%"; echo $sql;
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
McZim
|
|
« Ответ #8 : 01-06-2009 06:58 » |
|
В $_POST['search'] у тебя нужно слово?
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Tatyana
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #11 : 01-06-2009 07:05 » |
|
И что вообще выдает скрипт? Посмотрите в браузере исходный текст страницы, и покажите нам здесь.
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #14 : 01-06-2009 07:10 » |
|
я так понимаю, что возможно не происходит подключения к базе и как это ничего не вывело?
тогда хочу такого
$sql="select Name, Gruppa_ID from Pokovki where Name LIKE "%$_POST['search']%"; echo "sql = $sql";
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
McZim
|
|
« Ответ #15 : 01-06-2009 07:11 » |
|
Tatyana, а давай скриншот, до и после выполнения.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Tatyana
|
|
« Ответ #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
|
|
« Ответ #17 : 01-06-2009 07:14 » |
|
Tatyana, как это ты не можешь сказать точно? Ты просто выведи на ту же страницу до выполнения эту переменную!
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Chaa
|
|
« Ответ #18 : 01-06-2009 07:15 » |
|
Судя по тому, что инструкции не выполняются, у вас пхп на сервере настроен неправильно. Нужно разбираться. Для начала заставьте работать скрипт Насколько я понимаю, вы работаете под Windows на IIS. Попробуйте вместо писать чтобы случайно не путатлось с ASP.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #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('KatalogSQL','Татьяна','gbnth'); if (!$conn) { exit("Connection Failed: " . $conn); } $_POST['search'] = substr(htmlspecialchars(trim($_POST['search'])), 0, 100); echo "строка ".$_POST['search']."<br>"; $sql="select Name, Gruppa_ID from Pokovki where Name LIKE "%$_POST['search']%"; 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
|
|
« Ответ #20 : 01-06-2009 07:28 » |
|
сделай следующее ..... Результат в студию
Работает!!!!!!!!!!!! ) Надо только внешний вид подкорректировать
|
2.JPG (12.66 Кб - загружено 942 раз.)
|
|
Записан
|
Smile, though your heart is aching Smile, even though it's breaking ©
|
|
|
Sla
|
|
« Ответ #21 : 01-06-2009 07:30 » |
|
суду все яно
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Tatyana
|
|
« Ответ #22 : 01-06-2009 07:35 » |
|
хм.. у меня ещё один вопрос... А как мне теперь cделать, чтобы поиcк был по всем таблицам в базе??? По идее, нужно прописаnь во фразе FROM имена всех таблиц... Но у меня их 30 штук.... Во фразе фром можно использовать "*" ?
|
|
|
Записан
|
Smile, though your heart is aching Smile, even though it's breaking ©
|
|
|
McZim
|
|
« Ответ #23 : 01-06-2009 07:36 » |
|
Tatyana, нет нельзя, у тебя во всех таблицах одна и та же информация?
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Tatyana
|
|
« Ответ #24 : 01-06-2009 07:40 » |
|
Tatyana, нет нельзя, у тебя во всех таблицах одна и та же информация?
Нет, информация разная, но столбец Name (по которому идёт поиск - есть во всех таблицах)
|
|
|
Записан
|
Smile, though your heart is aching Smile, even though it's breaking ©
|
|
|
Sla
|
|
« Ответ #25 : 01-06-2009 07:44 » |
|
делать union
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Chaa
|
|
« Ответ #26 : 01-06-2009 07:53 » |
|
А что мешает информацию о всей продукции поместить в одну таблицу?
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #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
|
|
« Ответ #28 : 01-06-2009 07:58 » |
|
Chaa, я думаю что есть определенная архитектура, которую не будут переделывать, пусть даже она не верная. Tatyana, можно например хранимой процедурой предварительно готовить вьюху, с нужной информацией, а из нее выводить информацию на страницу.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Tatyana
|
|
« Ответ #29 : 01-06-2009 08:03 » |
|
Ребята!! Спасибо большое за помошь! Все ваши советы учту!! Ещё раз спасибо!
|
|
|
Записан
|
Smile, though your heart is aching Smile, even though it's breaking ©
|
|
|
|