Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: поиск по mysql помогите разобраться
 
 автор: margarita   (16.11.2009 в 20:10)   письмо автору
 
 

здравствуйте помогите разобраться в коде, то в php я ничего не понимаю, можете расписать как работает данный скрипт, если можно что делает каждая строка:


<h3>Форма поиска:</h3>
<form method="POST" action="">
Введите полное или неполное название товара:<br><input type="text" name="search" size="40" />
<input type="submit" value="Поиск" />
</form>



function choose_color($text, $search, $color) {
   $text = eregi_replace($search , "<span style='color:{$color}'>\\0</span>", $text);
   return $text;
}
function checkSearch($search)
{
   if($search == "" || strlen($search) < 3)
   {
      echo "Ваш запрос некорректен";
      return false;
   }
   return $search;
}
if(isset($_POST['search']))
{
    if(($search = checkSearch($_POST['search'])) !== false)
    {
       $resource = mysql_query("SELECT * FROM tovar WHERE naz_tovara LIKE '%{$search}%'");
       if(mysql_num_rows($resource) == 0)
      {
         echo "По вашему запросу товара не найдено. Попробуйте ещё раз";
      } else {
         while($array = mysql_fetch_array($resource))
         {
             $array['naz_tovara'] = choose_color($array['naz_tovara'], $search, "#FF0000"); 
             echo "<a href=tovar.php?view=".$array['id'].">{$array['naz_tovara']}</a><br /><br />"; 
         }
      }
   }
}

  Ответить  
 
 автор: antosha2023   (16.11.2009 в 23:41)   письмо автору
 
   для: margarita   (16.11.2009 в 20:10)
 

пример

1ч.php
<form action="search.php" method="post" id="search-form">
<p>
<input name="search" type="text" size="17" maxlength="40">
<input type="submit" name="submit" value="Search!" />
</p>
</form>

2ч.php
<?php include("blocs/bd.php");/*соединение с базой*/
if (isset($_POST['submit']))
{
$submit = $_POST['submit'];
}

if (isset($_POST['search']))
{
$search = $_POST['search'];
}

if (isset($submit))
{

if (empty($search) or strlen($search) < 4)
{
exit ("<p>Поисковый запрос не введен, либо он менее 4-х символов.</p>");
}

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

}

else
{
exit("<p>Вы обратились к файлу без необходимых параметров.</p>");
}



?>



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title><?php echo "Поиск: $search"; ?> </title>
<link href="Style_ph.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/cufon.js"></script>
<script type="text/javascript" src="js/myriadpro.font.js"></script>
<script type="text/javascript">
Cufon.replace('h1, h2, h3, h5');
</script>
<script type="text/javascript" src="js/cycle.js"></script>
<script type="text/javascript" src="js/slideshow.js"></script>
<script type="text/javascript" src="jQuery.js"></script>
<script type="text/javascript" src="interface.js"></script>

<link href="style_text.css" rel="stylesheet" type="text/css">

<div id="status-bar">
<div id="status-bar-content">
<form action="search.php" method="post" id="search-form">
<p>
<input name="search" type="text" size="17" maxlength="40">
<input type="submit" name="submit" value="Search!" />
</p>
</form>
<div id="status-bar-commands">
<p id="welcome">Добро пожаловать</p>
</div>
</div>
</div>
<div id="header">
<div id="logo">
<h1><a href="Dizaine.php" title="Home Page">Dizaine</a></h1>
<h2>Studio</h2>
</div>
</div>
<div id=" content-top-shadow"></div>
<br><br>
<br>
<br>

<p>&nbsp;</p><div id="content">
<?php include("blocs/nav.php"); ?>

<div id="page-wrapper">
<div class="one"><?php include("blocs/menuph.php"); ?></div>
<div class="lessons"><?
$result = mysql_query("SELECT id, title, description, date, author, mini_img,view FROM data WHERE MATCH(text) AGAINST('$search') ",$db);
if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору antosha2027@gmail.com. <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error());
}

if (mysql_num_rows($result) > 0)

{
$myrow = mysql_fetch_array($result);




do
{

$date = $myrow["date"];
list($year, $month, $day) = explode("-", $date); // Или сразу, за место $date, поставить $myrow["date"]
$date = "$day.$month.".substr($year, 2, 2); // Дата в новом формате
printf ("<br><table class='lessons'>
<tr>
<td><p class='post_name'><p class='lasens_ads'><img src='images/calendar.png' width='16' height='16'>&nbsp;$date</p><br>
<div class='nav_les'><img class='mini' align='left' src='%s'><a class='nav_les_a' href='lessons.php?id=%s'>%s</a></div>
<div class='lasens_adds'>Автор урока: %s</div>
<div claass='info' >
%s <br><br><span class='lasens_adds'>Просмотров: %s </span></div></td>
</tr>
<tr>
<div class='line'></div>
</tr>
</table><br><br>",$myrow["mini_img"],$myrow["id"],$myrow["title"], $myrow["author"],$myrow["description"], $myrow["view"]);

}
while ($myrow = mysql_fetch_array($result));




}

else
{
echo "<p>Информация по запросу не может быть извлечена в таблице нет записей.</p>";
exit();
}

?>

</div>
<div class="one_2">
<?php include("blocs/munuph_rh.php"); ?>
</div>
</div></div>
<p>&nbsp;</p>
<?php include("blocs/header-2.php"); ?>
</body>
</html>

  Ответить  
 
 автор: heed   (17.11.2009 в 00:49)   письмо автору
 
   для: antosha2023   (16.11.2009 в 23:41)
 

по поводу второго листинга

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

К этому моменту имеется любое колличество более четырёх абсолютно любых символов

1. удаляются пробельные символы в конце строки и в начале
2. убирается экранирование опасных символов типа (')
3. заменяются html-символы
& на '&amp;'
, '" на '&quot;
, ' на '&#039;' только в режиме ENT_QUOTES.
, < на '&lt;'
, > на '&gt;'
( В режиме по умолчанию, ENT_COMPAT
, преобразуются двойные кавычки, одиночные остаются без изменений)

и после этого всё чего получится вставляется в строку запроса
"SELECT .......... WHERE MATCH(text) AGAINST('$search') "

можно-ли в запрос будет впихнуть что-то постороннее?
возможно можно. вместо AGAINST('кофемолк')
получить например AGAINST('кофе') OR (DELETE чего-нибудь WHERE '1')
, но даже если не так , и если ' на '&#039; всётаки заменится
то можно что-нибудь попроще
, например зная как в большой таблице тормозит поиск некоторых слов
, написать туда весь список этих слов ,) чтобы посмотреть сколько будет выполняться запрос

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

  Ответить  
 
 автор: heed   (17.11.2009 в 01:18)   письмо автору
 
   для: margarita   (16.11.2009 в 20:10)
 

извиняюсь не смотрел на никнэймы :) и думал что это два поста одного человека

у Вас тоже не сильно понятно чего может получиться с таким кодом :)

function choose_color($text, $search, $color) {
$text = eregi_replace($search , "<span style='color:{$color}'>\\0</span>", $text);
return $text;
}

функция получает на входе будем шаблон $search для eregi_replace()
, который Вашей функцией checkSearch() тоже можно сказать совсем не проверяется
так как можно-было-бы проверить. Пользовательские данные из $_POST['search']
, и кроме того что это впихивается в запрос
, это ещё и при удачном нахождении должно подсвечиваться тегами spаn :)
Если на сервере включены magic_quotes, то возможно и не будет такой sql-инъекции
, потомучто не используете так-же stripslashes(), но это всёравно лучше поправлять
, и eregi_replace() сейчас модно заменять на preg_replace()? с немного другим синтаксисом шаблона.



а так просто в поле 'naz_tovara' из таблицы 'tovar' ищется вхождение последовательности символов
получаемых из $_POST['search'] и в запросе это тоже шаблон, только с другим синтаксисом, где '%' любое колличество символов , а '_' один любой символ

  Ответить  
 
 автор: sim5   (17.11.2009 в 03:24)   письмо автору
 
   для: heed   (17.11.2009 в 01:18)
 

> и eregi_replace() сейчас модно заменять на preg_replace()?

Да, модно, от Кардена :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования