Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

При переносе сайта на реальный хостинг перестал работать поиск

#1 werd_34

werd_34
  • Пользователь
  • 34 сообщений
  • Репутация: 0
0

Отправлено 17 Ноябрь 2013 - 23:04

Доюрого времени суток, уважаемые форумчане!

При переносе сайта на реальный хостинг перестал работать поиск. На локальном - всё отлично. В чём может быть причина?
Скрипт отрабатывает - пишет "Поисковый запрос должен содержать не менее 4-х символов", "Ничего не найдено!", но статьи не ищет...

config.php я изменил, связь с базой есть

<?php
require_once './config.php';
require_once './functions.php';
session_start();
if($_POST['submit_search']){
	   $search = mysql_real_escape_string($_POST['search']);
	   if(mb_strlen($search,'UTF-8') < 4){
	   $_SESSION['res'] = '<p>Поисковый запрос должен содержать не менее 4-х символов</p>';
	   header("Location: {$_SERVER['PHP_SELF']}");
	   exit();
}else{
	   $res = mysql_query("SELECT `article_id`, `title`, `date`, `short_text`, `views` FROM `articles` WHERE MATCH(title, short_text, content) AGAINST('{$search}') AND `visible`='1' ORDER BY `date` DESC") or die(mysql_error());
			 if(mysql_num_rows($res) > 0){
/* если что-то найдено */
	 while($row_search = mysql_fetch_assoc($res)){
	 $result[] = $row_search;
	 }
}else{
	 $_SESSION['res'] = '<p>Ничего не найдено!</p>';
	 header("Location: {$_SERVER['PHP_SELF']}");
	 exit();
}
	  }
}
?>


<h1>Результаты поиска</h1>
<?php
echo $_SESSION['res'];
unset($_SESSION['res']);
  
if(count($result) > 0){
   foreach($result as $item){ ?>
<h1><a href="<?php echo $site_url; ?>view_article.php?article_id=<?php echo $item['article_id']; ?>"> <?php echo htmlspecialchars($item['title']); ?></a></h1><?php echo $item['short_text']; ?>
		 <?php }
	 }
?>

 

 

  • 0

#2 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 18 Ноябрь 2013 - 10:07

Посмотри, что у тебя падает в $search и потом посмотри, что отдает mb_strlen($search,'UTF-8')

Скрипт отрабатывает - пишет "Поисковый запрос должен содержать не менее 4-х символов", "Ничего не найдено!", но статьи не ищет...

А это настораживает, по скрипту либо не менее 4 символов, либо ничего не найдено и при этом, конечно же, никакого результата не должно быть.
Мне кажется должно быть что-то одно:
  • результат
  • не менее 4 символов
  • ничего не найдено
<h1>Результаты поиска</h1>
<?php
echo $_SESSION['res'];
unset($_SESSION['res']);

if(count($result) > 0){
   foreach($result as $item){ ?>
<h1><a href="<?php echo $site_url; ?>view_article.php?article_id=<?php echo $item['article_id']; ?>"> <?php echo htmlspecialchars($item['title']); ?></a></h1><?php echo $item['short_text']; ?>
				 <?php }
		 }
?>
Этот код ужасен, предлагаю такой вариант
<?php
$html = '<h1>Результаты поиска</h1>';
$html .= $_SESSION['res'];
unset($_SESSION['res']);

if( count($result) > 0 ){
  foreach($result as $row){
   $html .= '
	<h2><a href="'.$site_url.'view_article.php?article_id='.$row['article_id'].'">'.$row['title'].'</a></h2>
	<div class="short">'.$row['short_text'].'</div>
   ';
  }
}

echo $html;


?>
htmlspecialchars, если и использовать, то при сохранении в БД, а не при выводе. Но тут уже кому как.
В цикле h2, потому что h1 на странице используется только один раз.
Еще я бы рекомендовал использовать кеширование для страниц поиска, что бы не нагружать лишний раз БД и для поисковиков лишняя страница.
Правда немного логику придется изменить.
  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#3 werd_34

werd_34
    Topic Starter
  • Пользователь
  • 34 сообщений
  • Репутация: 0

Отправлено 19 Ноябрь 2013 - 10:43

В $search попадает текст, переданный методом POST при нажатии submit_search.

Спасибо за вариант кода, попробовал, но! У меня где-то есть ошибка (предполагаю, что в сессии) - даже не выводится значение $html = '<h1>Результаты поиска</h1>'
При наборе 1,2,3 символов выводит "Поисковый запрос должен содержать не менее 4-х символов"
При наборе слова выводит "Ничего не найдено!"
  • 0

#4 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 25 Ноябрь 2013 - 09:09

Как вариант, можно вывести на страницу строку запроса.
Вот эту строку
$res = mysql_query("SELECT `article_id`, `title`, `date`, `short_text`, `views` FROM `articles` WHERE MATCH(title, short_text, content) AGAINST('{$search}') AND `visible`='1' ORDER BY `date` DESC") or die(mysql_error());
Заменить на такое
$sql = "SELECT `article_id`, `title`, `date`, `short_text`, `views` FROM `articles` WHERE MATCH(title, short_text, content) AGAINST('{$search}') AND `visible`='1' ORDER BY `date` DESC"
$res = mysql_query($sql) or die(mysql_error());
echo $sql;
Получить строку запроса, скопировать и выполнить запрос непосредственно через пхпадмин, возможно действительно ничего не ищет.
Тогда уже смотреть сам запрос и параметры таблиц.
  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.



Оформление форума – IPBSkins.ru