Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > поиск слова в БД


Автор: jikaka 17.2.2011, 08:52
всем привет!
в универе на занятиях делаем свой мини-блог, в котором в частности есть заметки и комментарии к ним
встал вопрос с поиском слова по заметкам и вывода всех заметок имеющих поисковое слово
не могу сообразить что делать

в общем имеется 2 таблицы:
notes с полями id, title, added, content
comments с полями id, added, author, content, notied

форма поиска выглядит таким образом:
Код

echo "<h1>Поиск по заметкам</h1>";
echo "<div align='center'>";
echo "<form action='search.php' method='POST'>";
echo "<input type='text' name='word' size='65' /> ";
echo "<input type='submit' value='Поиск' /> ";
echo "</form>";
echo "</div>";


сам поиск делаю таким образом:

Код

$submit = $_POST['submit'];
if ($submit) {
    $query = "SELECT * FROM notes WHERE content LIKE '%$word%'";
    $result = mysqli_query($link, $query) or die(mysqli_error());
    while ($search_word = mysqli_fetch_array($result)) { 
     echo $search_word['content']; 
    } 
}


не пойму, что не так делаю...
прошу помощи
очень нужно
заранее спасибо...

Автор: patap 17.2.2011, 10:21
глядя на код , можно предположить, что register_globals = Off, и переменная $word - неопределенна. => нужно 

Код

$word = $_POST['word'];

Автор: jikaka 17.2.2011, 11:22
все верно, у меня так и есть, забыл просто указать...
т.е. вот так:
Код

$word = $_POST['word'];
$submit = $_POST['submit'];
if ($submit) {
    $query = "SELECT * FROM notes WHERE content LIKE '%$word%'";
    $result = mysqli_query($link, $query) or die(mysqli_error());
    while ($search_word = mysqli_fetch_array($result)) { 
     echo $search_word['content']; 
    } 
}

Автор: patap 17.2.2011, 11:39
возможно нужно проверить правильность всех кодировок:

http://phpfaq.ru/charset, чтобы много не говорить

проверь явно что приходит в $_POST['word']

также такой код ошибки не выведет, в mysqli_error() нужно передать $link
Код

$result = mysqli_query($link, $query) or die(mysqli_error());


и еще посотри что выводит
Код

$result = mysqli_query($link, $query) or die(mysqli_error($link));
var_dump($result);


и как рекомендация, когда используешь http://php.net/manual/en/mysqli-result.fetch-array.php, желателательно вторым параметром передать тип возвращаемого результата (MYSQLI_ASSOC, MYSQLI_NUM, или MYSQLI_BOTH), тошо по умолчанию тебе будет возвращать двойной набор данных (нумерованый и ассоциативный массивы в одном)

Автор: jikaka 17.2.2011, 11:56
Цитата

и еще посотри что выводит

ничего не выводит, просто отрабатывает и все...

Автор: patap 17.2.2011, 12:01
тю ты блин. ты ж переменную $_POST['submit'] не передаешь, по-этому там всегда false будет

и условие не срабатывает
Код

$submit = $_POST['submit'];
if ($submit) {

.....


вот так измени
Код

echo echo "<input type='submit' value='Поиск' name='submit' /> ";


Добавлено через 20 секунд
но все равно, все написанное выше - полезно знать

Автор: jikaka 17.2.2011, 13:17
отлично, спасибо!

Добавлено @ 13:22
для тех, кому может пригодиться, привожу полностью рабочий вариант
организация простого поиска
Код

<?php
require_once("config.php");
require_once("header-blog.php");
require_once("menu-blog.php");
require_once("library.php");

echo "<h1>Поиск по заметкам</h1>";
echo "<div align='center'>";
echo "<form action='' method='POST'>";
echo "<input type='text' name='word' size='65' /> ";
echo "<input type='submit' name='submit' value='Поиск' /> ";
echo "</form>";
echo "</div>";
 
$word = $_POST['word'];
$submit = $_POST['submit'];
if ($submit) {
    $query = "SELECT * FROM notes WHERE content LIKE '%$word%'";
    $result = mysqli_query($link, $query) or die(mysqli_error());
    echo "<h2>Результаты поиска</h2>";
    while ($search_word = mysqli_fetch_array($result)) { 
    echo "<div class='com'>";
        echo "<b>".$search_word['title']."</b><br />";
        echo "<i>".$search_word['added']."</i><br />";
    echo prepareText($search_word['content']);
        echo "</div>";
    } 
}

require_once("footer-blog.php");
?>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)