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



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

#1

Поделиться сообщением #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

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Перенос сайта на хостинг
  2. Перенос сайта на новый хостинг
  3. Пропадет ли сайт из индексации(первой страницы) поисковиков, если поменять CMS?
  4. Поменял хостинг провайдера, сайт перестал работать вообще
  5. Перенос сайта на хостинг

#2

Поделиться сообщением #2



fedornabilkin

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

Отправлено 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

Поделиться сообщением #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

Поделиться сообщением #4



fedornabilkin

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

Отправлено 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