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]   

> Без описания
ATOM
Отправлено: 29 Ноября, 2011 - 21:50:57
Post Id


Гость


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


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




Здравствуйте. Столкнулся с такой проблемой, захотел написать свой поиск, не совсем понял как это реализовать.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $dbhost = "localhost";
  3. $dbuser = "user";
  4. $dbpass = "pass";
  5. $dbname = "dbname";
  6. mysql_connect($dbhost,$dbuser,$dbpass)
  7. or die("Fail, no connect<br />" . mysql_error());
  8. mysql_select_db($dbname);
  9. ?>

это подключение к бд это ясно.
потом есть страница для поиска допустим:
CODE (html):
скопировать код в буфер обмена
  1. <form method="post">
  2.  
  3. Введите текст для поиска<br>
  4.  
  5. <input type="text" name="text" size="60" value="">
  6.  
  7. <input type="submit" name="submit" value="Искать">
  8.  
  9. <input type="reset" name="reset" value="Очистить">
  10.  
  11. </form>

и что дальше, как реализовать вывод. допустим в базе данных назовём её gtext, в ней есть таблица search, и как можно реализовать поиск, допустим ввёл какое то предложение или список слов через запятую, и выведет статьи где упоминается это словосочетание или ключевые слова.
 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Ноября, 2011 - 22:05:49
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




мдя... А какие мысли есть хоть?
Давайте я задам вопрос, если ответите - будем разбирать, если нет - значит немного рановато...
Точнее это будет не вопрос, а задачка.
Необходимо слова принятые из формы разбить на массив и почистить от SQL-инъекций.
Как вы это сделаете???
 
 Top
ATOM
Отправлено: 29 Ноября, 2011 - 22:13:20
Post Id


Гость


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


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




эмм. если не ошибаюсь как то так "ф-ция explode + real_escape_string"
 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Ноября, 2011 - 22:15:01
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Напишите код. Закатив глазки
 
 Top
sKaa
Отправлено: 29 Ноября, 2011 - 22:19:06
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


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

[+]


DeepVarvar Да рановато или нет зря ты так Недовольство, огорчение
В общем если кратко то как-то так :

Search.php :
PHP:
скопировать код в буфер обмена
  1.  
  2. $dbhost = "localhost";
  3. $dbuser = "user";
  4. $dbpass = "pass";
  5. $dbname = "dbname";
  6. mysql_connect($dbhost,$dbuser,$dbpass)
  7. or die("Fail, no connect<br />" . mysql_error());
  8. mysql_select_db($dbname);
  9.  
  10.  
  11. $text = '';
  12. if(isset($_POST['text'])) $text = mysql_real_escape_string($_POST['text']); // Запрос который пришел на страницу..
  13.  
  14. if(empty($text)) return; // Ничего не делаем если он пуст...
  15.  
  16. $array_words = explode(' ', $text);
  17.  
  18. $query = "SELECT * FROM blabla_db.blabla_table WHERE text LIKE '%".$array_words[0]."%'";
  19. $res = mysql_query($query);
  20. if($res)
  21. if(mysql_num_rows($res))
  22. while($array = mysql_fetch_assoc($res)){
  23. // ....
  24. }
  25.  
 
 Top
ATOM
Отправлено: 29 Ноября, 2011 - 22:23:01
Post Id


Гость


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


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




спасибо буду пробовать
(Добавление)
видимо я криво жопый , и из жопы растут руки, могу отблагодарить первый кто сделает готовый скрипт с подключением с вводом текста в поиск и вывод и пример бд, отблагодарю 5WMZ, мелочь но приятно=)
 
 Top
DlTA
Отправлено: 29 Ноября, 2011 - 23:01:37
Post Id



Постоянный участник


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


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




sKaa приведенный код без предварительной чистки от множественных пробелов найдет "все"
(Добавление)
та и в принцыпе не совсем корректный
 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Ноября, 2011 - 23:38:54
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Блиин, я гдето тут на форуме писал как собрать все слова в запрос..
(Добавление)
PHP:
скопировать код в буфер обмена
  1. $arr = explode(" ",$_POST['text']);
  2. $query = "SELECT * FROM tbl WHERE field LIKE '%";
  3. $words = array();
  4. foreach ($arr as $word) {
  5.   if (trim($word) != "")
  6.   }
  7. $query .= implode("%' OR field LIKE '%",$words)."%'";
  8. // дальше обычный запрос и вывод, такой, какой нужен...

(Отредактировано автором: 29 Ноября, 2011 - 23:46:53)

 
 Top
ATOM
Отправлено: 29 Ноября, 2011 - 23:56:15
Post Id


Гость


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


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




ребята извиняюсь соображалка вообще не работает, как это всё впихнуть, в отдельные файлы и что бы работало, нужен готовый скрипт
 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Ноября, 2011 - 23:58:26
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




если никто не напишет, я с утра напишу..
 
 Top
DlTA
Отправлено: 30 Ноября, 2011 - 00:04:57
Post Id



Постоянный участник


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


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




ATOM пишет:
ребята извиняюсь соображалка вообще не работает, как это всё впихнуть, в отдельные файлы и что бы работало, нужен готовый скрипт
ды там же уже все написано
DeepVarvar пишет:
$arr = explode(" ",$_POST['text']);
...
$query .= implode("%' OR field LIKE '%",$words)."%'";


только перед $arr = explode(" ",$_POST['text']);
надо сделать ченить типа
$_POST['text'] = preg_replace("/\s{2,}/"," ",$_POST['text']);
иначе если кто нить введет множественный пробел, вывод загнется, ну или выведет первое что попадет по списку, а не то что искали
 
 Top
ATOM
Отправлено: 30 Ноября, 2011 - 00:27:14
Post Id


Гость


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


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




спасибо товарищи, буду ждать DeepVarvar =)
 
 Top
DeepVarvar Супермодератор
Отправлено: 30 Ноября, 2011 - 12:00:06
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




PHP:
скопировать код в буфер обмена
  1. $dbhost = "localhost";
  2. $dbuser = "user";
  3. $dbpass = "pass";
  4. $dbname = "dbname";
  5. mysql_connect($dbhost,$dbuser,$dbpass)
  6.     or die("Fail, no connect<br />" . mysql_error());
  7. mysql_select_db($dbname);
  8.  
  9. $action = false;
  10. $searchresult = array();
  11. if isset($_POST['submit']) {
  12.   $text = preg_replace("/\s+/"," ",$_POST['text']);
  13.   if (trim($text) != "" and strlen(trim($text)) > 5) $action = true;
  14.   }
  15.  
  16. if ($action) {
  17.   $arr = explode(" ",$text);
  18.   $query = "SELECT ututu,blabla FROM tbl WHERE field LIKE '%";
  19.   $words = array();
  20.   foreach ($arr as $word) {
  21.     if (trim($word) != "")
  22.       $words[] = htmlspecialchars(mysql_real_escape_string(trim($word)));
  23.     }
  24.   $query .= implode("%' OR field LIKE '%",$words)."%'";
  25.   $res = mysql_query($query);
  26.   if(mysql_num_rows($res) > 0)
  27.     while($row = mysql_fetch_assoc($res)) $searchresult[] = $row;
  28.   }
  29.  
  30. if (count($searchresult) > 0) var_dump($searchresult);
  31. else echo "Ничо не нашлося...";
 
 Top
ATOM
Отправлено: 30 Ноября, 2011 - 12:51:07
Post Id


Гость


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


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




спасибо товарищи всем за помощь, но увы ничего не смог сам сделать.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB