30 марта 2013
16293
поиск php mysql

Простой поиск PHP MySQL

PHP
Демонстрация » Скачать »

В сегодняшнем уроке мы рассмотрим поиск php mysql​. Скриптов поиска огромное множество, некоторые используют базу данных, другие обходятся без нее, есть расширенные поиски с точной сортировкой. Мы же остановимся на обычном простом поиске, который ищет информацию по двум таблицам из базы данных MySQL.

 

Первый шаг. База данных MySQL.

 

Создаем базу данных search_lite, в ней две таблицы news - новости и vac - вакансии.

Задаем привилегии:

   Логин -  "root",

   Пароль - "",

   Хост - "localhost".

 

Дамп таблицы news - новостей.

--
-- Table structure for table `news`
--

CREATE TABLE IF NOT EXISTS `news` (
  `id` int(2) NOT NULL,
  `title` varchar(255) NOT NULL,
  `text` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

 

Дамп таблицы vac - вакансий.

 

--
-- Table structure for table `vac`
--

CREATE TABLE IF NOT EXISTS `vac` (
  `id` int(2) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `text` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;

 

 

Второй шаг. HTML и PHP.

 

Подключаемся к базе данных. Задаем условие по переменной $search, в которой поисковый запрос не введен, либо он меньше 4-х символов, а также проверяем на слеши и обрезаем переменную. Создаем два запроса, которые ищут в базе данных две таблицы news и vac по условию поиска по полю text. (Вы можете сами уже выбирать, сколько таблиц нужно будет для поиска. К примеру, у Вас будут таблицы lessons, materials, articles и т.п.. Также можете менять условия поиска, вместо поля text, можно выбрать поле title или другое поле.) Затем указываем сколько символов в тексте при выводе поиска в переменной $symbolls. Если же в таблицах news и vac по поиску ничего не найдено, выводим сообщение. Если же найдено, выводим данные из двух таблиц news и vac по заданному запросу поиска.

 

<?
$db = mysql_connect ("localhost", "root", "");
mysql_select_db ("search_lite", $db);
if (!$db) echo mysql_error();

if(isset($search))
{
if(empty($search) OR strlen($search) < 4)
{
echo "
<div class='search_questions'>Результаты поиска по запросу:
<span class='search_query'> $search</span></div><br>";
echo "
<div class='search_error'>Поисковый запрос не веден, либо
он меньше 4-х символов!</div><br>";
}
else
{
echo "<div class='search_questions'>
Результаты поиска по запросу:<span class='search_query'>
$search</span></div><br>";

$search = htmlspecialchars(stripslashes(trim($search)));

$sql_news = mysql_query("SELECT id, title, text FROM news
WHERE text LIKE '%$search%'");
$news = mysql_num_rows($sql_news);

$sql_vac = mysql_query("SELECT id, title, text FROM vac
WHERE text LIKE '%$search%'");
$vac = mysql_num_rows($sql_vac);

$find = $search;
$symbolls = '80';

if ($news==0 and $vac==0)
echo "<div class='search_error'>По Вашему запросу \"$search\"
ничего не найдено! Ведите другой запрос!</div><br>";
else
{

/*Новости/news - таблица*/

for($i=1; $news = mysql_fetch_array($sql_news); $i++)
{
$search_text = $news['text'];
$search_text = strip_tags($search_text, '<br><strong>');
$search_txt_length = strlen ($search_text);
$search_first_enter = strpos (strtolower($search_text),
strtolower($find));
$pad_left = $search_first_enter - $symbolls;
$pad_right = $search_first_enter + $symbolls + 5;
if ($pad_right>$search_txt_length) $pad_right = $search_txt_length;
if ($pad_left<0) $pad_left = '0';
$search_text = substr($search_text, $pad_left, $pad_right);
$search_text = str_replace (strtolower($find),
"<span class='search_word'>".strtolower($find)."</span>",
strtolower($search_text));
echo"
<div valign='top' align='center'>
<table width='500' cellspacing='0' cellpadding='0'>
<tr>
<td>
<div class='search_title'>$i. $news[title]</div>
</td>
</tr>
<tr>
<td>
<div class='search_text'>...$search_text...</div>
<div class='search_cat'>найдено в новостях<div>
</td>
</tr>
</table>
</div>
<br>";
}

/*Вакансии/vac - таблица*/

for($i=1; $vac = mysql_fetch_array($sql_vac); $i++)
{
$search_text = $vac['text'];
$search_text = strip_tags($search_text, '<br><strong>');
$search_txt_length = strlen ($search_text);
$search_first_enter = strpos (strtolower($search_text),
strtolower($find));
$pad_left = $search_first_enter - $symbolls;
$pad_right = $search_first_enter + $symbolls + 5;
if ($pad_right>$search_txt_length) $pad_right = $search_txt_length;
if ($pad_left<0) $pad_left = '0';
$search_text = substr($search_text, $pad_left, $pad_right);
$search_text = str_replace (strtolower($find),
"<span class='search_word'>".strtolower($find)."</span>",
strtolower($search_text));
echo"
<div valign='top' align='center'>
<table width='500' cellspacing='0' cellpadding='0'>
<tr>
<td>
<div class='search_title'>$i. $vac[title]</div>
</td>
</tr>
<tr>
<td>
<div class='search_text'>...$search_text...</div>
<div class='search_cat'>найдено в вакансиях<div>
</td>
</tr>
</table>
</div>
<br>";
}
}
}
}
?>
Третий шаг. CSS.

 

Пропишем немного стилей, которые будут формировать наш поиск.

 

.search_name
{
color: black;
font-size: 18px;
}

.search_questions
{
color: black;
font-weight: bold;
font-size: 15px;

}

.search_query
{
color: blue;
font-style: Italic;
}

.search_error
{
color: red;
font-size: 15px;
}

.search_input
{
border: 1px solid black;
width: 500px;
height: 30px;
}

.search_word
{
color: blue;
}

.search_title
{
font-size: 20px;
color: blue;
font-weight: bold;
}

.search_text
{
font-size: 15px;
color: black;
}

.search_cat
{
font-size: 12px;
color: grey;
float: right;
margin-top: 20px;
}

 

Мы рассмотрели с Вами простой поиск php mysql, который ищет информацию из базы данных. По условию используются две таблицы, Вы можете настроить под себя любым удобным способом. Следующий урок будет посвящен аналогии простого поиска, только с расширенными возможностями.