Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 13.02.2015
Сообщений: 105

Поиск по сайту

12.03.2015, 10:55. Показов 2115. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите организовать поиск по сайту. Нашёл код, попытался его прикрутить, но выдаёт при любом запросе и его отсутствии: Вы искали: Запрос на поиск не поступал! Подскажите что сделано не так.
Привожу код:
HTML5
1
2
3
4
5
6
<form  method="get" id="searchform" action="phprusearch/index.php">
        <div>
        <input type="text" value="Поиск..." name="s" id="s" onfocus="defaultInput(this)"onblur="clearInput(this)" />
        <input type="submit" id="searchsubmit" value=" " />
        </div>
    </form>
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<TABLE BORDER=0 WIDTH=95%>
<TR><TD>
Вы искали: <B>
<?
require ('sinc/func_list.php');
$CONFIG = file('sinc/sconfig.php'); // файл конфигурации
 
if (isset($_POST["query"]))
{
echo htmlspecialchars(trim($_POST["query"])).'</B></CENTER>';
$microtime = microtime();
$microsecs = substr($microtime, 2, 8);
$secs = substr($microtime, 11);
$start_time = "$secs.$microsecs";
$sizetotal = 0;
 
if ( ereg ( "[><?]+", $_POST["query"], $error_1 ))
{
?>
<BR>Найдены запрещенные символы в строке запроса - ( <FONT COLOR=BLUE><?=htmlspecialchars($error_1[0])?></FONT> )
<BR><BR>
</TD></TR>
</TABLE>
<?
    exit;
}
if (strlen(trim($_POST["query"])) < 3)
{
?>
<BR>Слишком короткие запросы не обрабатываются. Используйте не менее 3 символов.
<BR><BR>
</TD></TR>
</TABLE>
<?
    exit;
}
$searchstring = PHPruLow(trim($_POST["query"]));
$searchword = explode (" ",$searchstring); // массив строки запроса
$allwords = count($searchword); // сколько слов в запросе
 
##################################################################
 
$FILE = file('sdata/search.php');
$count = count($FILE);
PHPruSearch('..','rus');
for ($x = 0; $x < $count; $x++) // выбираем файл
{
    @list($filename,$filesize,$content,$modify) = explode('^^^',$FILE[$x],4);
    $temp = explode('%%%',$content);
    $true = $find = $full_result = $long = 0;
    $sizetotal += $filesize;
        
    foreach($temp as $key => $value) // выбираем строку
    {
        if($allwords > 1) // если более одного слова в запросе
        {
            if(preg_match_all("/".$searchstring."/i", $value, $ok, PREG_PATTERN_ORDER))
                $new = str_replace($ok[0][0],'<FONT COLOR='.trim($CONFIG[2]).'>'.trim($CONFIG[6]).$ok[0][0].'</FONT>'.trim($CONFIG[7]), $value);
            else
                $new = $value;
            if($new != $value)
            {
                $find++;
                $true = 1;
                $show[$find] = $new;
                $full_result++; 
            }
        }
        for ($all = 0; $all < $allwords; $all++) // проходим по каждому из слов в запросе
        {   
            $chekfull = explode(" ",$value);
            if(in_array($searchword[$all],$chekfull))
                $full_result++; 
            
            $long = strlen($searchword[$all]);
            if ($long > 5)
            {
            if(preg_match("/(у|ы|а|о|я|е|и|ь)$/i", $searchword[$all]))
                $long = -1;
            if(preg_match("/(и|е|о|а|ы|у)[еямюйивх]$/i", $searchword[$all]))
                $long = -2;
            $short = substr($searchword[$all],0,$long);
            if(preg_match_all("/".$short."/i", $value, $ok, PREG_PATTERN_ORDER))
                $new = str_replace(PHPruLow($ok[0][0]),'<FONT COLOR='.trim($CONFIG[2]).'>'.trim($CONFIG[6]).$ok[0][0].'</FONT>'.trim($CONFIG[7]), PHPruLow($value));
            else
                $new = $value;
 
                if($new != $value)
                {
                    $find++;
                    $true = 1;
                    $show[$find] = $new;
                }
            }
            else
            {
                $short = $searchword[$all];
                if(preg_match_all("/".$short."/i", $value, $ok, PREG_PATTERN_ORDER))
                    $new = str_replace(PHPruLow($ok[0][0]),'<FONT COLOR='.trim($CONFIG[2]).'>'.trim($CONFIG[6]).$ok[0][0].'</FONT>'.trim($CONFIG[7]), PHPruLow($value));
                else
                    $new = $value;
                if($new != $value)
                {
                    $find++;
                    $true = 1;
                    $show[$find] = $new;
                }
            }
        }   
    }
    if ($true !== 0)
    {
        $fulltrue = 1;
        echo '<BR><BR><B>'.$filename.'</B><BR><I>дата последнего обновления документа - '.$modify.', размeр - '.$filesize.'Kb</I><BR> найдено '.$find.' совпадений ( точных - '.$full_result.', похожих - '.($find-$full_result).')<BR>среди них такие как:';
        
        if ($find > trim($CONFIG[1])) // ограничение количества выводимых строк
            $STROK = trim($CONFIG[1]);
        else
            $STROK = $find;
        for ($a = 1; $a < $STROK+1; $a++) // выводим совпадения построчно
        {
            echo '<LI>...'.$show[$a].'...</LI>';
        }
    }
}
 
if(!isset($fulltrue))
    echo '<BR>К сожалению, по Вашему запросу ничего не найдено!';
 
echo '<BR><BR><CENTER>всего обработано '.$sizetotal.'Kb в '.$count.' файлах за ';
$microtime = microtime();
$microsecs = substr($microtime, 2, 8);
$secs = substr($microtime, 11);
$end_time = "$secs.$microsecs";
$total = round(($end_time - $start_time),2);
echo $total.' сек. <BR><BR>';
PHPruRw(); flush();
if (isset($_SERVER["REMOTE_ADDR"]))
    $IP = $_SERVER["REMOTE_ADDR"];
else
    $IP = 'нет данных';
$NEW = time().'^^'.$searchstring.'^^'.$_SERVER["HTTP_REFERER"].'^^'.$IP."\r\n";
PHPruSave($NEW,'sinc/query.php','a+');
}
else
    echo 'Запрос на поиск не поступал!<BR><BR><CENTER>';
?>
<BR>
</TD></TR>
</TABLE>
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.03.2015, 10:55
Ответы с готовыми решениями:

Поиск по сайту
Пишу поиск по сайту. Сам поиск у меня сейчас работает нормально, всё ищет без проблем. Проблема только с выводом результатов... Всё...

поиск по сайту
В таблице есть ячейка tema(тип text) с FULLTEXT, и есть 1 запись, где в ячейке tema указано число &quot;11111&quot;. Пробую найти...

Поиск по сайту
наверняка этот вопрос уже рассматривался, но что-то я не нашла такой темы.... Задача следующая. Есть сайт - пока не размещен на...

9
 Аватар для UchihaSV
285 / 234 / 113
Регистрация: 08.06.2013
Сообщений: 725
12.03.2015, 13:55
Ну скрипт у вас ожидает переменную query, значит имя поля с поиском нужно задать query:
HTML5
1
<input type="text" value="Поиск..." name="query" id="s" onfocus="defaultInput(this)"onblur="clearInput(this)" />
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
12.03.2015, 13:55
Цитата Сообщение от MePHiSto88 Посмотреть сообщение
method="get"
Цитата Сообщение от MePHiSto88 Посмотреть сообщение
if (isset($_POST["query"]))
Цитата Сообщение от MePHiSto88 Посмотреть сообщение
name="s"
...
0
0 / 0 / 0
Регистрация: 13.02.2015
Сообщений: 105
12.03.2015, 14:06  [ТС]
UchihaSV, Изменил на name="query", как вы показали, тоже сообщение выдаёт
Jewbacabra , не понял что тут не так method="get", поясните, если можете
0
 Аватар для UchihaSV
285 / 234 / 113
Регистрация: 08.06.2013
Сообщений: 725
12.03.2015, 14:12
Так скрипт еще ждет данные в POST, а вы данные передаете через GET, исправьте метод на POST:
HTML5
1
<form  method="post" id="searchform" action="phprusearch/index.php">
0
0 / 0 / 0
Регистрация: 13.02.2015
Сообщений: 105
12.03.2015, 14:55  [ТС]
Начало прогонять код, но теперь ругается на функцию ereg:
Вы искали: Поля
Deprecated: Function ereg() is deprecated in Y:\home\busnes-mlm.com\www\phprusearch\index.php on line 35

К сожалению, по Вашему запросу ничего не найдено!

всего обработано 0Kb в 0 файлах за 0.09 сек.

PHPru_Search v.2.7
вот так выглядит тот кусок кода
PHP
1
2
3
4
5
6
7
8
9
10
if ( ereg ( "[><?]+", $_POST["query"], $error_1 ))
{
?>
<BR>Найдены запрещенные символы в строке запроса - ( <FONT COLOR=BLUE><?=htmlspecialchars($error_1[0])?></FONT> )
<BR><BR>
</TD></TR>
</TABLE>
<?
    exit;
}
0
 Аватар для UchihaSV
285 / 234 / 113
Регистрация: 08.06.2013
Сообщений: 725
12.03.2015, 15:46
Ошибка означает, что функция ereg() устарела, и вместо нее нужно юзать preg_match():
PHP
1
2
3
4
5
6
7
8
9
10
11
12
....
if (preg_match("/[><?]+/", $_POST["query"], $error_1)):
?>
<BR>Найдены запрещенные символы в строке запроса - ( <FONT COLOR=BLUE><?=htmlspecialchars($error_1[0])?></FONT> )
<BR><BR>
</TD></TR>
</TABLE>
<?php
endif;
exit;
}
....
0
0 / 0 / 0
Регистрация: 13.02.2015
Сообщений: 105
12.03.2015, 16:14  [ТС]
UchihaSV, код теперь прорабатывается почти до конца, но ругается на строки 162 и 163 поочерёдно (это строка 144 - 145 в коде сверху) и выдаёт следующее: Parse error: syntax error, unexpected '}' in Y:\home\busnes-mlm.com\www\phprusearch\index.php on line 162 и Parse error: syntax error, unexpected T_ELSE in Y:\home\busnes-mlm.com\www\phprusearch\index.php on line 163.

Если убрать } и else, переходит в новое окно и выдаёт: Вы искали: Цель , т.е. слово, которое вбил в строку поиска...
0
 Аватар для UchihaSV
285 / 234 / 113
Регистрация: 08.06.2013
Сообщений: 725
12.03.2015, 16:38
Лучший ответ Сообщение было отмечено MePHiSto88 как решение

Решение

Ну значит проверьте еще раз, видимо вы там лишнюю фигурную скобку где-то поставили.
Я ваш код сверху взял и проверил, там фигурная скобка правильно стоит и елсе тоже.

Добавлено через 3 минуты
А ну да вы же поменяли на мой код часть кода, но там я не учел что он будет обернут в if, поэтому исправьте:
PHP
1
2
3
4
5
6
7
8
9
if (preg_match("/[><?]+/", $_POST["query"], $error_1)) {
?>
<BR>Найдены запрещенные символы в строке запроса - ( <FONT COLOR=BLUE><?=htmlspecialchars($error_1[0])?></FONT> )
<BR><BR>
</TD></TR>
</TABLE>
<?php
exit;
}
0
0 / 0 / 0
Регистрация: 13.02.2015
Сообщений: 105
12.03.2015, 21:15  [ТС]
Ошибки, вроде как пропали, спасибо, но поиск работает совсем не так, как я ожидал: в новом окне открывает, то слово, которое я искал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.03.2015, 21:15
Помогаю со студенческими работами здесь

Поиск по сайту
Всем привет! В очередной раз не такой опытный юзер обращается за помощью)) Делаю поиск по сайту,написал такой код,выводит только название...

Поиск по сайту
Добрый день. Просьба к тому кто знает и кому не лень, написать последовательно действия создания на сайте поиска по сайту. На данный...

Поиск по сайту
Делаю поиск по новостям. Форма: &lt;form method=&quot;post&quot; action=&quot;../Models/Search.php&quot;&gt; &lt;input type=&quot;search&quot; name=&quot;query&quot;...

Поиск по сайту
Помогите справится со стилями. Поиск сделал, но получилась загвоздка, при выводе нескольких результатов поиска, эти же результаты нарушают...

Поиск по сайту
&lt;?php if (isset($_POST)) { include('db.php'); $db = new db(); $word = mysql_real_escape_string($_POST); $sql =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru