Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Простая поисковая система (PHP + MySQL)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Как с нуля написать?!
KuPbI4
Отправлено: 06 Декабря, 2010 - 23:51:03
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Приветствую всех.
Возник вопрос - как написать c нуля простую поисковую систему на php, чтоб искала через БД?
Вот, допустим, есть каталог книг.
Имеется такая таблица:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CREATE TABLE `books`(
  3. `id` int( 11 ) NOT NULL AUTO_INCREMENT,
  4. `namebook` varchar( 255 ) NOT NULL,
  5. `authors` varchar( 255 ) NOT NULL,
  6. `shifr` varchar( 255 ) NOT NULL,
  7. `year` int( 11 ) NOT NULL,
  8. `mesto` varchar( 255 ) NOT NULL,
  9. `nameizd` varchar( 255 ) NOT NULL,
  10. `kol_ekz_b` int( 11 ) NOT NULL,
  11. `kol_ekz_online` int( 11 ) NOT NULL,
  12. UNIQUE KEY `id`(`id`)
  13. ) TYPE=MyISAM AUTO_INCREMENT=1;
  14.  

Вот данные из БД:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. Название книги: Органическая химия
  3. Список авторов: Кононов
  4. Библиотечный шифр: 2у00з
  5. Год и место издания: Пермь, 2007 г.
  6. Название издательства: Мосфильм
  7. Общее кол-во экземпляров книги: 50 книг
  8. Кол-во экземпляров, доступных в текущий момент: 25 книг
  9.  

CODE (text):
скопировать код в буфер обмена
  1.  
  2. Название книги: Математический анализ
  3. Список авторов: Седова
  4. Библиотечный шифр: з30уц1
  5. Год и место издания: Москва, 2001 г.
  6. Название издательства: Книга АБС
  7. Общее кол-во экземпляров книги: 50 книг
  8. Кол-во экземпляров, доступных в текущий момент: 32 книг
  9.  

Как осуществить поиск по названию книги и по библ. шифру?
Заранее буду благодарен )
(Добавление)
Ладно, начну с самого простого.
Реализую простой поиск:
search_b.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. include ("admin/config.php");
  4. $search = mysql_real_escape_string($_POST['search']);
  5. $res = mysql_query("SELECT `namebook` from `books` where `namebook` like '%".$_POST['search']."%'", $db);
  6. if (!$res) {echo "Запрос не прошел."; exit(mysql_error());}
  7. $myrow = mysql_fetch_array($res);
  8. ?>
  9. <? echo $myrow["namebook"];?>
  10.  

Форма:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <form action="search_b.php" method=post>
  3. <input id="inputtext" type="text" name="search">
  4. </form>
  5.  

Итак, скрипт работает, это конечно хорошо, но одно, если допустим в данные - о названиях книги в бд записаны, скажем так Математический анализ и Теорический анализ
то выводится только Математический анализ, а как сделать чтоб нашел оба результата и даже несколько?!
 
 Top
KuPbI4
Отправлено: 07 Декабря, 2010 - 04:28:45
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Наверное, решил проблему:
Поиск по книге:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. include ("admin/config.php");
  4. $search = mysql_real_escape_string($_POST['search']);
  5. $res = mysql_query("SELECT `namebook` from `books` where `namebook` like '%".$_POST['search']."%'", $db);
  6. echo "<h4>Результаты поиска:</h4>";
  7. while($row=mysql_fetch_array($res))
  8. {
  9.         /*foreach($row as $el)
  10.         {
  11.                 echo $el."<br>";
  12.         }*/
  13.         echo $row['namebook']."<br>";
  14. };
  15. if (!$res) {echo "Запрос не прошел."; exit(mysql_error());}
  16. ?>
  17.  

Поиск по шифру:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. include ("admin/config.php");
  4. $search = mysql_real_escape_string($_POST['search']);
  5. $res = mysql_query("SELECT `shifr` from `books` where `shifr` like '%".$_POST['search']."%'", $db);
  6. echo "<h4>Результаты поиска:</h4>";
  7. while($row=mysql_fetch_array($res))
  8. {
  9.         /*foreach($row as $el)
  10.         {
  11.                 echo $el."<br>";
  12.         }*/
  13.         echo $row['shifr']."<br>";
  14. };
  15.  
  16. if (!$res) {echo "Запрос не прошел."; exit(mysql_error());}
  17. ?>
  18.  

CODE (html):
скопировать код в буфер обмена
  1.  
  2. Поиск по названию книги:
  3. <form action="search_b.php" method=post>
  4. <input id="inputtext" type="text" name="search">
  5. </form>
  6. Поиск по введенному библиотечному шифру:
  7. <form action="search_s.php" method=post>
  8. <input id="inputtext" type="text" name="search">
  9. </form>
  10.  

Мне б хотелось на одной странице... то есть в текущей странице отображались результаты поиска, а не в след. странице. как сделать?!
и вдобавок, есть скажем так, две одинаковые библиотечные шифры с названием A1 и A1 и вводим в поиске A1 и выводит только две, а надо только одну, как исправить или добавить в скрипте?!

(Отредактировано автором: 07 Декабря, 2010 - 05:17:45)

 
 Top
OrmaJever Модератор
Отправлено: 07 Декабря, 2010 - 13:01:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Под формой вставить

в начале файлас поиском
Ну а результат место

написать
PHP:
скопировать код в буфер обмена
  1. $_SESSION['result'] .= $row['namebook'].'<br>';
  2. // и после цыкла header('Location:search_page.php');

И ещё если вы написали вот такую строку

То в запрос нужно вставлять $search, а не $_POST['search'].


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
KuPbI4
Отправлено: 07 Декабря, 2010 - 14:35:19
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Итак, давайте по порядку. Не очень понял Вас.
1. под формой вставил, должно так:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <form action="search.php" method=post>
  3. <input id="inputtext" type="text" name="search">
  4. <?=$_SESSION['result']?>
  5. </form>

2. в начале файла - сделано.
3. вместо
написал
PHP:
скопировать код в буфер обмена
  1. $_SESSION['result'] .= $row['namebook'].'<br>';

4. и в запросе если стоит

то сменил на
так показываю весь скрипт.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. include ("admin/config.php");
  4. $search = mysql_real_escape_string($_POST['search']);
  5. $res = mysql_query("SELECT `namebook` from `books` where `namebook` like '%".$search."%'", $db);
  6. echo "<h4>Результаты поиска:</h4>";
  7. while($row=mysql_fetch_array($res))
  8. {
  9.         /*foreach($row as $el)
  10.         {
  11.                 echo $el."<br>";
  12.         }*/
  13.         $_SESSION['result'] .= $row['namebook'].'<br>';
  14. };
  15. if (!$res) {echo "Запрос не прошел."; exit(mysql_error());}
  16. }
  17. ?>
  18.  

далее.. пишу в поле ввода и хочу найти нужно и выводит все, почти все данные с БД. где глюк?

(Отредактировано автором: 07 Декабря, 2010 - 14:36:52)

 
 Top
metiz
Отправлено: 07 Декабря, 2010 - 16:30:23
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




А почему просто не дописать поиск и вывод ниже, либо выше формы?
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.  
  4.  
  5. <form action=" Файл с формой" method=post>
  6. <input id="inputtext" type="text" name="search">
  7. <input type="submit" name="submit"/>
  8. </form>
  9. <?PHP
  10. if (isset($_POST['submit'])){
  11.    
  12.     //Выполняем поиск и вывод
  13.  
  14. }
  15.  
  16.  
 
 Top
KuPbI4
Отправлено: 07 Декабря, 2010 - 19:52:51
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




metiz
Спасибо Вам.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. include ("admin/config.php");
  4. if (isset($_POST['submit'])){
  5. $search = mysql_real_escape_string($_POST['search']);
  6. $res = mysql_query("SELECT `namebook` from `books` where `namebook` like '%".$search."%'", $db);
  7. echo "<h4>Результаты поиска:</h4>";
  8. while($row=mysql_fetch_array($res))
  9. {
  10.         /*foreach($row as $el)
  11.         {
  12.                 echo $el."<br>";
  13.         }*/
  14.         echo $row['namebook'].'<br>';
  15. }
  16. if (!$res) {echo "Запрос не прошел."; exit(mysql_error());}
  17. }
  18. ?>
  19.  

теперь поиск выводится на одной и той же странице.
Это все таки хорошо, но с поиском нужно доработать.
Скажем так, две одинаковые библиотечные шифры с названием A1 и A1 и вводим в поиске A1 и выводит только две, а надо только одну, как исправить или добавить в скрипте?!
(Добавление)
Добавлю еще одну идею, но не получается:

Мне б хотелось, чтоб поиск работал выборочно, то есть выберу опцию - по названию и хочу искать только по названию книги, а ищется все и даже без выборки.. как доработать?! Я с поисковиками уже целый день изучаю...
код на хтмл:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <form action="search.php" method=post>
  3. <input id="inputtext" type="text" name="search">
  4. <select name="inputtext" id="search">
  5. <option selected value=""></selected>
  6. <option value="namebook">по названию книги</option>
  7. <option value="shifr">по библ. шифру</option>
  8. </select>
  9. <input type="submit" name="submit"/>
  10. </form>
  11.  

вот сам скрипт пхп:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. include ("admin/config.php");
  4. if (isset($_POST['submit'])){
  5. $search = mysql_real_escape_string($_POST['search']);
  6. $res = mysql_query("SELECT `namebook` from `books` where `namebook` like '%".$search."%'", $db);
  7. $res1 = mysql_query("SELECT `shifr` from `books` where `shifr` like '%".$search."%'", $db);
  8. echo "<h4>Результаты поиска:</h4>";
  9. while($row=mysql_fetch_array($res))
  10. {
  11.         echo $row['namebook'].'<br>';
  12. }
  13. while($row1=mysql_fetch_array($res1))
  14. {
  15.         echo $row1['shifr'].'<br>';
  16. }
  17. if (!$res) {echo "Запрос не прошел."; exit(mysql_error());}
  18. if (!$res1) {echo "Запрос не прошел."; exit(mysql_error());}
  19. }
  20. ?>
  21.  
 
 Top
OrmaJever Модератор
Отправлено: 07 Декабря, 2010 - 20:24:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




KuPbI4 пишет:
Мне б хотелось, чтоб поиск работал выборочно, то есть выберу опцию - по названию и хочу искать только по названию книги, а ищется все и даже без выборки

ну дак вы же сами выбераете 2 раза. Чтож вы хотите?
Попробуйте вот так
PHP:
скопировать код в буфер обмена
  1. <?
  2. include ("admin/config.php");
  3. if (isset($_POST['submit'])){
  4. $search = mysql_real_escape_string($_POST['search']);
  5. $res = mysql_query("SELECT `namebook` from `books` where ".mysql_escape_string($_POST['inputtext'])." like '%".$search."%'", $db);
  6. echo "<h4>Результаты поиска:</h4>";
  7. while($row=mysql_fetch_array($res))
  8. {
  9.         echo $row['namebook'].'<br>';
  10. }
  11. if (!$res) {echo "Запрос не прошел."; exit(mysql_error());}
  12. }
  13. ?>


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
KuPbI4
Отправлено: 07 Декабря, 2010 - 21:43:42
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Я и говорю, что нужно 2 раза выбирать - поиск по выбранной книге и поиск по введенному шифру.
Все работает конечно, но если искать по выбранной книге, то и книга выводится и библ. шифр, а хотелось бы по-отдельности.
HTML-форма:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <form action="search.php" method=post>
  3. <input id="inputtext" type="text" name="search">
  4. <select name="inputtext" id="search">
  5. <option selected value=""></selected>
  6. <option value="namebook">по названию книги</option>
  7. <option value="shifr">по библ. шифру</option>
  8. </select>
  9. <input type="submit" name="submit"/>
  10. </form>
  11.  


Тут скрипт находит по найденной книге, а по шифру не находит. Где ошибка?
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. include ("admin/config.php");
  4. if (isset($_POST['submit'])){
  5. $search = mysql_real_escape_string($_POST['search']);
  6. $res = mysql_query("SELECT `namebook` from `books` where ".mysql_escape_string($_POST['inputtext'])." like '%".$search."%'", $db);
  7. $res1 = mysql_query("SELECT `shifr` from `books` where ".mysql_escape_string($_POST['inputtext'])." like '%".$search."%'", $db);
  8. echo "<h4>Результаты поиска:</h4>";
  9.  
  10. if (!$res || !$res1)
  11. {
  12.         echo "Не правильно ввели запрос!<br>Сделайте выбор - или по названию книги или по введенному шифру!";
  13. }
  14. elseif ($res)
  15. {
  16.         while($row=mysql_fetch_array($res))
  17.         {
  18.                 echo $row['namebook'].'<br>';
  19.         }
  20. }
  21. elseif ($res1)
  22. {
  23.         while($row1=mysql_fetch_array($res1))
  24.         {
  25.                 echo $row1['shifr'].'<br>';
  26.         }
  27. }
  28. ?>
  29.  

Да, я третий раз пишу как мне сделать, допустим, две одинаковые библиотечные шифры с названием A1 и A1 и вводим в поиске A1 и выводит только две, а надо только одну, как исправить?!

(Отредактировано автором: 08 Декабря, 2010 - 00:01:46)

 
 Top
KuPbI4
Отправлено: 08 Декабря, 2010 - 00:30:08
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Кажется, я наверное правильно смысл задачи понял:
Цитата:

поиск книг в каталоге на основании введенного шифра или названия книги

то есть как я понимаю, когда выбираю поиск по выбранному книгу - результат - книга.
а если введенный ширф - то тоже результат книга...
или не так?!
 
 Top
Uchkuma
Отправлено: 08 Декабря, 2010 - 00:52:12
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Может я что-то не понял, но зачем искать книгу по фрагменту библиотечного шифра?
 
 Top
KuPbI4
Отправлено: 08 Декабря, 2010 - 01:37:42
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Uchkuma пишет:
Может я что-то не понял, но зачем искать книгу по фрагменту библиотечного шифра?

Такова задача поставлена.
 
 Top
OrmaJever Модератор
Отправлено: 08 Декабря, 2010 - 01:50:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




KuPbI4 пишет:
Кажется, я наверное правильно смысл задачи понял:
Цитата:

поиск книг в каталоге на основании введенного шифра или названия книги

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

я чтото не так понял? Выже сами создали тему и сами пытаетесь понять что вам нужно? Однако


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
KuPbI4
Отправлено: 08 Декабря, 2010 - 03:52:56
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Вы конечно правы, что я создал тему, потеряв себя, что не знаю. А потом пришло время и подумав и уверенно мыслив, вроде правильно написал код или нет.)
 
 Top
Uchkuma
Отправлено: 08 Декабря, 2010 - 10:27:03
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




KuPbI4 пишет:
Такова задача поставлена.
Цитата:
поиск книг в каталоге на основании введенного шифра или названия книги
Лично я не вижу тут такой задачи.
С поиском по названию все понятно, но шифр-то должен указывать на конкретную книгу. Кто, зная шифр книги, будет искать ее, скажем, по части шифра из середины? И самое главное ЗАЧЕМ?
Если при поиске по названию будут найдены книги с похожими названиями, то по части шифра будут найдены совершенно разные книги, не имеющие ничего общего между собой.

Ваша миссия еще и в том, чтобы правильно истолковать поставленную задачу и если есть какие-то двоякости, уточнить у заказчика. К тому же для заказчика не всегда очевидно, как будет выполняться та или иная задача и программист должен ему подсказать.
 
 Top
KuPbI4
Отправлено: 08 Декабря, 2010 - 12:19:58
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Uchkuma пишет:
Лично я не вижу тут такой задачи.
С поиском по названию все понятно, но шифр-то должен указывать на конкретную книгу. Кто, зная шифр книги, будет искать ее, скажем, по части шифра из середины? И самое главное ЗАЧЕМ?

Все еще спрашиваете ЗАЧЕМ?! Улыбка
Uchkuma пишет:

Если при поиске по названию будут найдены книги с похожими названиями, то по части шифра будут найдены совершенно разные книги, не имеющие ничего общего между собой.

Тут вы правы.
Uchkuma пишет:

Ваша миссия еще и в том, чтобы правильно истолковать поставленную задачу и если есть какие-то двоякости, уточнить у заказчика. К тому же для заказчика не всегда очевидно, как будет выполняться та или иная задача и программист должен ему подсказать

Ну мне тут придется еще работать с заказом... то есть зарегистрированный пользователь выбрал эту книгу.. статус - скажем,так Выбрана эта книга. Идет в библиотеку - библиотекарь выдает - и статус ставит - Выдана книга в такое-то - такое-то время и когда будет возвращена. Когда книга будет возвращена, то статус меняется на возвращена, но при этом запись не удаляется.
Тут мне придется посложнее думать. Придется связывать таблицы?
Ну то есть
вот скажем:
таблица пользователь(фамилия, имя, отчество, библ_номер, дата_выдачи_библ_номера, срок_действия_библ_номера),
таблица Книги (название_книги, список_авторов, Библиотечный_шифр, Год_и место_издания, Название_издательства, Общее_кол-во_экземпляров_книги,Кол-во_ экземпляров_доступных_в_текущий момент)
таблица статус (фамилия, имя, отчество, выдана_эта_книга, когда_выдана, когда_будет_возвращена, возвращена_эта книга)
Описал таблицы, как все таки правильно реализовать оформление заказа выдачи книги и возвращения? и как правильно связать таблицы?

(Отредактировано автором: 08 Декабря, 2010 - 12:21:59)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB