Php strpos() function
Содержание:
- Как заменить один элемент строки!?
- Продвинутая работа со строками
- stripos
- Поиск определенного сотрудника
- Создание таблицы
- Поиск символа в строке — использование регулярных выражений
- Замена слов в скобках php
- Пример использования strpos для поиска вводимого пользователем термина
- Использование регулярных выражений для поиска точного вхождения слова
- Другие примеры
- Проверка на соответствие критерию
- Замена подстроки
- Найти первое повторяющееся слово и выделить его
- Простой пример использования функции strpos
- Разработка формы
- Как заменить слово/слова в Php
- Поиск по буквам
Как заменить один элемент строки!?
У нас есть некая строка, в которой требуется найти какой-то элемент и заменить его на другой!
Здесь текст с нижним тире_, которое_ надо заменить на обыкновенное —
Мы воспользуемся функцией str_replace
Для этой функции и множества аналогичных нужно запомнить, что внутри неё…
Я запомнил так: str_replace(«ЧТО»,»НА ЧТО»,»ГДЕ»);
Нам потребуется переменная…
$переменная = «Здесь текст с нижним тире_, которое_ надо заменить на обыкновенное -«;
Замена str_replace будет иметь такой вид:
$переменная = str_replace(«_»,»-«, $переменная);
Результат:
Как видим наше подчеркивание заменилось удачно!
Здесь текст с нижним тире-, которое- надо заменить на обыкновенное —
Продвинутая работа со строками
Если вы часто работаете со строками, то возможно вам пригодятся более высокоуровневые методы для их обработки.
Взгляните как будут выглядеть поиск и замена строк с помощью symfony/string:
// checks if the string starts/ends with the given string u('https://symfony.com')->startsWith('https'); // true u('report-1234.pdf')->endsWith('.pdf'); // true // checks if the string contents are exactly the same as the given contents u('foo')->equalsTo('foo'); // true // checks if the string content match the given regular expression u('avatar-73647.png')->match('/avatar-(\d+)\.png/'); // result = // checks if the string contains any of the other given strings u('aeiou')->containsAny('a'); // true u('aeiou')->containsAny(); // false u('aeiou')->containsAny(); // true // finds the position of the first occurrence of the given string // (the second argument is the position where the search starts and negative // values have the same meaning as in PHP functions) u('abcdeabcde')->indexOf('c'); // 2 u('abcdeabcde')->indexOf('c', 2); // 2 u('abcdeabcde')->indexOf('c', -4); // 7 u('abcdeabcde')->indexOf('eab'); // 4 u('abcdeabcde')->indexOf('k'); // null // finds the position of the last occurrence of the given string // (the second argument is the position where the search starts and negative // values have the same meaning as in PHP functions) u('abcdeabcde')->indexOfLast('c'); // 7 u('abcdeabcde')->indexOfLast('c', 2); // 7 u('abcdeabcde')->indexOfLast('c', -4); // 2 u('abcdeabcde')->indexOfLast('eab'); // 4 u('abcdeabcde')->indexOfLast('k'); // null // replaces all occurrences of the given string u('http://symfony.com')->replace('http://', 'https://'); // 'https://symfony.com' // replaces all occurrences of the given regular expression u('(+1) 206-555-0100')->replaceMatches('/++/', ''); // '12065550100' // you can pass a callable as the second argument to perform advanced replacements u('123')->replaceMatches('/\d/', function ($match) { return '.']'; }); // result = ''
Помогла ли Вам эта статья?
Да
Нет
stripos
Находит позицию первого вхождения подстроки в заданной строке без учета регистра.
Синтаксис:
int stripos(string where, string what )
Функция stripos() пытается найти в строке were подстроку what и в случае успеха возвращает позицию (индекс) этой подстроки в строке. В отличие от strpos(), эта функция не учитывает регистр символов. Первый символ строки имеет индекс 0. Необязательный параметр fromwhere можно задавать, если поиск нужно вести не с начало строки, а с какой-то другой позиции. В этом случае следует эту позицию передать в fromwhere. Если подстроку не удалось найти, функция возвращает false.
Если параметр what не строка, в этом случае его значение преобразуется в целое и используется как код искомого символа.
<?php $findme = 'a'; $mystring1 = 'xyz'; $mystring2 = 'ABC'; $pos1 = stripos($mystring1, $findme); $pos2 = stripos($mystring2, $findme); // Конечно, 'a' не входит в 'xyz' if ($pos1 === false) { echo "Строка '$findme' не найдена в строке '$mystring1'"; } // Заметьте, что используется ===. Использование == не даст верного // результата, так как 'a' в нулевой позиции. if ($pos2 !== false) { echo "Нашел '$findme' в '$mystring2' в позиции $pos2"; } ?>
Примечание: Функция stripos() может применяться для поиска данных в двоичной форме.
Поддержка: PHP 5
Поиск определенного сотрудника
Чтобы отобразить информацию об остальном персонале, которая передается через уникальное id внутри нашей ссылки, нужно добавить следующий код прямо после закрывающей фигурной скобки в скрипте letter, как показано ниже:
}//Окончание скрипта if(isset($_GET)){ $contactid=$_GET; //Подключение к базе данных $db=mysql_connect ("servername", "username", "password") or die ('Я не могу подключиться к базе данных, так как: ' . mysql_error()); //-select the database to use $mydb=mysql_select_db("yourDatabase"); //- Запрос к таблице базы данных $sql="SELECT * FROM Contacts WHERE ID=" . $contactid; //- Запустить запрос к функции mysql_query() $result=mysql_query($sql); //- Запуск цикла и сортировка результатов while($row=mysql_fetch_array($result)){ $FirstName =$row; $LastName=$row; $PhoneNumber=$row; $Email=$row; //- Вывести результат в массиве echo "<ul>n"; echo "<li>" . $FirstName . " " . $LastName . "</li>n"; echo "<li>" . $PhoneNumber . "</li>n"; echo "<li>" . "<a href=mailto:" . $Email . ">" . $Email . "</a></li>n"; echo "</ul>"; } }
Здесь мы изменили четыре фрагмента кода:
- Мы используем функцию isset(), и с ее помощью проверяем значение ID в массиве $_GET;
- Создаем переменную $contactid и инициализируем ее массивом $_GET;
- В таблице выделяем все, что отмечено звездочкой *. Звездочка – это сокращенное обозначение в SQL, которое означает «дайте мне все столбцы и строки из таблицы». Чтобы определить, какую информацию выводить, мы упоминаем переменную contactid в конце SQL-выражения;
- Выводим дополнительную информацию о каждом представителе персонала.
Сохраните файл search_byid.php и проверьте результат.
Обратите внимание, что наш функционал работает так, как и положено. При вводе имени или фамилии в поле, или при выборе буквы в качестве гиперссылки, отображаются только имена представителей персонала
Если навести курсор на ссылку, то в строке статуса можно увидеть уникальный ID. Если кликнуть по конкретному человеку, то адресная строка изменится, и отобразится дополнительная информация об этом сотруднике.
Создание таблицы
Наша таблица должна быть создана в следующем формате:
Column Name | Data Type | Length | Null or Not Null | Primary key? | Auto Increment |
ID | INT | 1 | Not Null | Yes | Yes |
FirstName | Varchar | 50 | Not Null | No | No |
LastName | Varchar | 50 | Not Null | No | No |
Varchar | 50 | Not Null | No | No | |
PhoneNumber | Varchar | 15 | Not Null | No | No |
Таблица базы данных состоит из столбцов и строк, как в Excel. Первый столбец позволяет идентифицировать данные по имени. Далее идет колонка Data types (тип данных), которая указывает нам на тип данных, содержащихся в колонке. В поле Length (Длина) указывается максимальный объем памяти (хранилища) для столбца таблицы. Мы используем переменные, которые дают больше гибкости. Другими словами, если длина ФИО меньше 50 символов, то будет занята лишь часть отведенного места.
И среди данных персонала не может быть пустых значений (null, empty). Первая строка выделена желтым цветом, потому что столбец ID – наш основной ключ. Основной ключ в базе данных гарантирует, что каждая запись будет уникальной. К этой колонке также применен автоинкремент, а это значит, что каждой записи в нашей базе данных будет присваиваться уникальный номер автоматически.
Поиск символа в строке — использование регулярных выражений
Также для поиска можно использовать регулярные выражения. Они лучше подходят для случаев, когда вы ищете в строке более сложные конструкции.
Но помните, что функция strpos() работает в три раза быстрее, чем регулярные выражения. Следующий пример демонстрирует, как с их помощью найти слово, символ в строке:
$the_string = "Я на 5 лет старше тебя."; $the_word = "лет"; $the_character = "Я"; $the_substring = "5 лет"; // Вывод — Слово "лет" есть в данной строке. if (preg_match('/лет/', $the_string)) { echo 'Слово "'.$the_word.'" есть в данной строке.'; } // Вывод — Символ "Я" есть в данной строке. if (preg_match('/Я/', $the_string)) { echo 'Символ "'.$the_character.'" есть в данной строке.'; } // Вывод — Подстрока "5 лет" есть в данной строке. if (preg_match('/5 лет/', $the_string)) { echo 'Подстрока "'.$the_substring.'" есть в данной строке.'; }
Использование функции preg_match() имеет смысл только при сложном поиске. Например, для проверки того, содержит ли строка слова с десятью и более символами и т.п. Пример:
$the_string = 'Фотосинтез и рискованный – длинные слова.'; // Вывод — Данная строка содержит слова из 10 и более символов. if (preg_match('/w{10,}/i', $the_string)) { echo 'Данная строка содержит слова из 10 и более символов.'; }
Чтобы сделать поиск регистронезависимым, добавьте флаг i в конец шаблона. Пример реализации:
$the_string = "Ваня любит и яблоки, и апельсины."; $the_word = "ваня"; $the_character = "Я"; $the_substring = "ЛЮбИт И"; // Вывод — Слово "ваня" есть в данной строке. if (preg_match('/ваня/i', $the_string)) { echo 'Слово "'.$the_word.'" есть в данной строке.'; } // Вывод — Символ "Я" есть в данной строке. if (preg_match('/Я/i', $the_string)) { echo 'Символ "'.$the_character.'" есть в данной строке.'; } // Вывод — Подстрока "ЛЮбИт И" есть в данной строке. if (preg_match('/ЛЮбИт И/i', $the_string)) { echo 'Подстрока "'.$the_substring.'" есть в данной строке.'; }
Замена слов в скобках php
Замена слов в скобках phpВ чем фишка!?Как это работает
Если напишу вот так : php в коде… либо css , то никаких квадратных скобок вы не увидите… смотри скрин ниже:
После обработки php скриптом, это будут обычные ссылки, слова в скобках были заменены на :
В первом случае с php:
<a href=»https://dwweb.ru/?tema=php» target=»_blank»>php</a>
Во втором случае с css:
<a href=»https://dwweb.ru/?tema=css» target=»_blank»>css</a>
Таких слов огромное количество и естественно, что запомнить их все невозможно, поэтому у меня есть кнопка, которая выводит все эти слова в других кнопках, и достаточно кнопку нажать — она вставляется с помощью скрипта js.
Эту картинку, скриншот, можно увеличить в отдельном окне нажмите по нему!здесь мелькает эта панельПродолжение:
Поскольку довольно редкий поисковый запрос… напишите — вам интересен этот скрипт?!
Пример использования strpos для поиска вводимого пользователем термина
Этот метод может оказаться полезным в определенных сценариях. Например, когда в форму не разрешается вводить определенные слова.
Кроме этого можно проверить, содержится ли слово, заданное пользователем на поиск, в исходной строке. Исходя из этого, можно вывести определенные результаты в виде ответа.
В этой демо-версии, пользователь может ввести термин в текстовое поле. После нажатия кнопки запускается функция strpos, чтобы проверить, содержит ли исходная строка подстроку. На экран будет выводиться соответствующее сообщение:
Для демо-версии я использовал следующую исходную строку:
$source_string = 'In this demo, I am using a user entered search term to check if string contains search term or not by using strpos!';
Попробуйте ввести разные буквы или слова для поиска, чтобы проверить вернет ли функция значение false. Кроме этого попробуйте ввести термины заглавными или маленькими буквами, чтобы увидеть разницу.
Для этого был использован следующий пример PHP strpos utf 8:
<?php $search_term=$_POST; $source_string = 'In this demo, I am using a user entered search term to check if string contains search term or not by using strpos!'; // = 'strpos'; $posistion = strpos($source_string, $search_term); if( $search_term ){ echo "<div class='result'>"; if ($posistion === false) { echo "The source string does not contain the: '$search_term'!"; } else { echo "The string contains the search term: '$search_term'! </BR>"; echo " The given substring found at: $posistion"; } echo "</div>"; } ?>
Также можете посмотреть разметку strpos PHP примера:
<!doctype html> <html> <head> <style> .result { background: #5BB75B; height: auto; width:220px; border-radius: 15px; padding:20px; font-size:20px; color:#000; } .searchterm{ background: #6A0432; width:220px; border-radius: 15px; padding:20px; font-size:18px; color:#fff; } </style> <div class="searchterm"> <form method="post" action=""> <label>Enter a string:</label><input type="text" name="searchterm"> <input type="submit"/> </form> </div> </body> </html>
Полную версию можно увидеть в исходном коде страницы демо-версии.
Кроме этого вы можете использовать в качестве источника базу данных для создания системы поиска на своем сайте.
Использование регулярных выражений для поиска точного вхождения слова
Функции strpos() и stripos()работают быстрее, чем регулярные выражения. Но их использование для поиска точного вхождения слова может быть проблематичным.
В подобных ситуациях лучше применять регулярные выражения. Можно использовать выражение b в шаблоне регулярного выражения, чтобы обозначить границу слова. Если слово, которое вы ищете, заключено в выражения b, функция preg_match() найдёт только точные вхождения слова и вернет FALSE для частичных совпадений. Вот пример:
$the_string = 'Фотосинтез и рискованный – длинные слова.'; $the_word = 'синтез'; // Вывод — Слово "синтез" имеет точное совпадение в данной строке. if (preg_match('/синтез/', $the_string)) { echo 'Слово "синтез" имеет точное совпадение в данной строке. '; } // Вывод — Слово "синтез" имеет точное совпадение в данной строке. if (strpos($the_string, $the_word)) { echo 'Слово "синтез" имеет точное совпадение в данной строке. '; } // Вывод — Слово "синтез" не имеет точных совпадений в данной строке. if (preg_match('/bсинтезb/', $the_string)) { echo 'Слово "синтез" имеет точное совпадение в данной строке. '; } else { echo 'Слово "синтез" не имеет точных совпадений в данной строке. '; }
Другие примеры
Рассмотрим еще несколько примеров:
// Порядок замены $str = "Строка 1\nСтрока 2\rСтрока 3\r\nСтрока 4\n"; $order = array("\r\n", "\n", "\r"); $replace = '<br />'; // Обрабатывает сначала \r\n для избежания их повторной замены. echo $newstr = str_replace($order, $replace, $str); // Выводит F, т.к. A заменяется на B, затем B на C, и так далее... // В итоге E будет заменено F, так как замена происходит слева направо. $search = array('A', 'B', 'C', 'D', 'E'); $replace = array('B', 'C', 'D', 'E', 'F'); $subject = 'A'; echo str_replace($search, $replace, $subject); // Выводит: яблорехкорех орех (по вышеуказанной причине) $letters = array('я', 'о'); $fruit = array('яблоко', 'орех'); $text = 'я о'; $output = str_replace($letters, $fruit, $text); echo $output;
Эта функция не поддерживает регулярные выражения, но для этого есть другая функция: preg_replace()
Проверка на соответствие критерию
Когда пользователь вводит имя или фамилию, а затем нажимает кнопку подтверждения, форма передает данные самой себе и добавляет в конце строку запроса “go”. На данном этапе мы проверяем наличие строки запроса go. Если результат положительный, выводим результаты поиска.
До вывода запрашиваемых результатов нам нужно перепроверить: (1) была ли подтверждена форма, (2) содержит ли строка запроса значение go, (3) был ли поисковой запрос введен в нижнем или верхнем регистре? Если ни одна из проверок не дает положительного результата (true), то от нас не требуется выполнять какие-либо действия.
Для начала добавим небольшой блок кода PHP поиск по сайту после закрывающего тега </form>:
</form> <?php //сделать что-то в коде ?> </body> </html>
Сначала мы открываем блок PHP-кода тегом ””.
Любой PHP-код внутри этой пары тегов будет исполняться сервером. Затем мы проверяем, была ли подтверждена форма:
<?php if(isset($_POST)){ // сделать что-то в коде } else{ echo "<p> Введите поисковый запрос</p>"; } ?>
Мы воспользуемся встроенной функцией isset, которая возвращает значение типа bool, и поместим в нее массив $_POST. Логическое выражение в программировании позволяет получить нам либо true, либо false.
Следовательно, если функция возвращает значение true, то форма была подтверждена, и нам нужно продолжить выполнение кода дальше. Если же функция возвращает значение false, то мы выведем сообщение об ошибке. Сохраните весь набранный код в файле search_submit.php.
Далее нам нужно проверить, имеется ли в строке запроса значение go:
<?php if(isset($_POST)){ if(isset($_GET)){ else{ echo "<p> Введите поисковый запрос</p>"; } } } ?>
Мы вкладываем еще одно условное логическое выражение внутрь основного, но только в этот раз мы используем массив $_GET вместе со значением “go”. Сохраните изменения в файле search_go.php.
Теперь нам нужно убедиться, что посетители могут вводить первую букву в строку запроса только в верхнем или только в нижнем регистре. Нам также нужно предусмотреть способ учета критериев поиска, введенных посетителем. Лучше всего проверять введенные посетителем данные с помощью регулярного выражения:
<?php if(isset($_POST)){ if(isset($_GET)){ if(preg_match("^/+/", $_POST)){ $name=$_POST; } } else{ echo "<p>Пожалуйста, введите поисковый запрос</p>"; } }?>
Мы вкладываем еще одно условное логическое выражение внутрь наших двух. На этот раз мы используем регулярное выражение для проверки ввода. Мы используем встроенную функцию preg_match с двумя параметрами: регулярное выражение, и поле формы, к которому должна применяться проверка.
В нашем случае, это будет поле «Имя» (name). Чтобы извлечь параметры поиска, указанные посетителем, мы создаем переменную $name, и привязываем к ней значение POST с названием поля из формы, которое будет использоваться в SQL-запросе. Сейчас мы реализовали: (1) отправку данных формы, (2) строка запроса включает значение go и (3) посетитель ввел либо заглавную, либо строчную первую букву. И все эти проверки происходят еще до внесения изменений в базу данных. Сохраните все изменения.
Замена подстроки
Пример: заменим bbb на zzz:
$str = 'aaa bbb ccc bbb ddd'; $result = str_replace('bbb', 'zzz', $str); echo $result; // результат: aaa zzz ccc zzz ddd
Мы заменили «bbb» на «zzz» и в $result запишется строка «aaa zzz ccc zzz ddd». У нас было 2 вхождения подстроки bbb и мы заменили их на zzz.
А что если нам нужно также заменить и ccc на zzz? Мы бы конечно могли запустить функцию 2 раза, в первый раз заменив первую подстроку, а второй раз другую, но можно просто указать массив подстрок поиска первым параметром.
Пример: заменим bbb и ccc на zzz:
$str = 'aaa bbb ccc bbb ddd'; $result = str_replace(, 'zzz', $str); echo $result; // результат: aaa zzz zzz zzz ddd
Что если нам нужно заменить bbb на zzz, а ccc на www?
Мы конечно снова можем запустить функцию 2 раза, но оптимальнее с точки зрения производительности будет и вторым параметром передать массив. В первом массиве будут подстроки, которые мы ищем, а во втором те, на которые заменяем.
Пример: заменяем bbb на zzz, а ccc на www:
$str = 'aaa bbb ccc bbb ddd'; $result = str_replace(, , $str); echo $result; // результат: aaa zzz www zzz ddd
Результат у нас правильный, но читабельность конечно страдает. А представьте если бы мы указывали сразу 50 таких строк для замены? И потом когда мы добавляем или заменяем строку, ее приходилось бы искать в 2 местах.
Более читабельным был бы код:
$str = 'aaa bbb ccc bbb ddd'; $replaces = ; $result = str_replace(array_keys($replaces), array_values($replaces), $str); echo $result; // результат: aaa zzz www zzz ddd
Тут нам помогли функции array_keys и array_values которые вернули все ключи и все значения соответственно.
Кстати для подобной замены вам не обязательно использовать функцию str_replace, а можно воспользоваться strtr, и тогда наш код выглядел бы еще более просто:
$str = 'aaa bbb ccc bbb ddd'; $result = strtr($str, ); echo $result; // результат: aaa zzz www zzz ddd
У функции str_replace также есть четвертый параметр $count, в котором мы ничего не передаем, а наоборот получаем количество вхождений.
Таким образом если дополнить наш пример:
$str = 'aaa bbb ccc bbb ddd'; $result = str_replace('bbb', 'zzz', $str, $count); echo $result; // результат: aaa zzz ccc zzz ddd echo 'Вхождений: ' . $count; // Вхождений: 2
Обязательно прочитайте подробную документацию: https://www.php.net/manual/ru/function.str-replace.php
Найти первое повторяющееся слово и выделить его
Условие задачи:
Требуется найти в тексте первое повторяющиеся слово и подчеркнуть его(выделить).
Предположим, что вам нужно найти первое повторяющееся слово в тексте и его же нужно подчеркнуть!
Создадим сразу несколько переменных с разным текстом:
$text = ‘This is do a test — «do do do»‘;
$text_1 = ‘Это тестовый текст в котором есть повторяющееся слово текст’;
$text_2 = ‘Это слово и тестовый текст в котором есть повторяющееся слово и слово текст’;
$text_3 = ‘Это слово и тестовый текст в котором есть повторяющееся слово и слово это текст ‘;
Разбиваем текст по пробелу с помощью explode
$ex = explode(‘ ‘, $thetext);
Далее нам потребуется два цикла. Внутри второго чикла пишем условие, если слово в массиве будет повторяться, то создаем счетчик, по имени слова:
$$ex ++;
Далее следующее условие, если счетчик будет равен 2, то прерываем цикл :
break;
Соберем циклы:
$ex = explode(‘ ‘, $thetext);
for ($i = 0; $i < count($ex); $i++)
{
for ($j = 0; $j < count($ex); $j++)
{
if ( my_strtolower($ex) == my_strtolower( $ex) )
{
$$ex ++;
if($$ex ==2) {$the_word = my_strtolower( $ex ); break;}
}
}
if($the_word){break;}
}
Создаем третий цикл, в котором, как только встретится слово найденное в предыдущих двух циклах, то сразу его выделим цветом слово в массиве с помощью тега
for ($d = 0; $d
{
if( my_strtolower( $ex ) == $the_word) { $ex = ‘<mark>’.$ex.'</mark>’; break; }
}
Далее Измененный массив преобразуем в строку:
implode(‘ ‘, $ex);
Запакуем это все в функцию :
Добавлено… в условии and $ex — (2 — 1 = 1) количество символов, отсекать одинарные буквы. Если требуется отсечь предлоги с двумя и менее буквами — $ex
function find_first($thetext)
{
$ex = explode(‘ ‘, $thetext);
for ($i = 0; $i < count($ex); $i++)
{
for ($j = 0; $j < count($ex); $j++)
{
if ( my_strtolower($ex) == my_strtolower( $ex) and $ex )
{
$$ex ++;
if($$ex ==2) {$the_word = my_strtolower( $ex ); break;}
}
}
if($the_word){break;}
}
for ($d = 0; $d < count($ex); $d++)
{
if( my_strtolower( $ex ) == $the_word) { $ex = ‘<mark>’.$ex.'</mark>’; break; }
}
return implode(‘ ‘, $ex);
}
Выведем результаты, нахождения первого повторяющегося слова в тексте :
echo find_first($text);
echo ‘<br>’;
echo find_first($text_1);
echo ‘<br>’;
echo find_first($text_2);
echo ‘<br>’;
echo find_first($text_3);
Простой пример использования функции strpos
Посмотрите следующий пример, в котором я использовал заданные для поиска значения, чтобы продемонстрировать работу функции strpos PHP:
Посмотреть онлайн демо-версию и код
Код PHP
<?php $source_string = 'This is a strpos Tuotrial which is used to search strings. It tells whether a given string contains a search string or not!'; $search_term = 'strpos'; $posistion = strpos($source_string, $search_term); if ($posistion === false) { echo "The source string does not contain the: '$search_term'!"; } else { echo "The string contains the search term: '$search_term'! </BR>"; echo " The given substr found at: $posistion"; } ?>
Разработка формы
Чтобы создать форму поиска по сайту через , откройте любой подходящий текстовый редактор. Я рекомендую воспользоваться бесплатным PSPad. Вы можете использовать любой текстовый редактор, где предусмотрена подсветка синтаксиса. Это в значительной степени облегчит процесс написания и отладки PHP-кода. Создавая страницу для формы поиска, не забудьте сохранить ее в формате .php, иначе PHP-код не будет обрабатываться должным образом. Как только сохраните документ, скопируйте в него следующую разметку:
<!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=utf-8"> <title>Поиск контактов:</title> </head> <p><body> <h3>Детальный поиск контактов</h3> <p>Вы можете искать по имени или фамилии</p> <form method="post" action="search.php?go" id="searchform"> <input type="text" name="name"> <input type="submit" name="submit" value="Search"> </form> </body> </html> </p>
Если вы знакомы с языком HTML, то тут вам все должно быть понятно как минимум до открывающего тега form. Внутри этого тега находится важнейший элемент всего кода – атрибут action. В качестве действия нашей формы мы указали название нашего файла, а затем применили к нему строку запроса “go”.
Как заменить слово/слова в Php
Для того, чтобы заменить слово в тексте нам потребуется некий текст с некими словами, и желательно, чтобы это слово повторялось несколько раз! И если это слово будет найдено, то покрасим в какой-то цвет! А давайте вот этот текст, в котором и идет речь о замене слова, покрасим данное слово в красный цвет!(если вы не поняли, то он кричит — «это гениально!!!»)
И тут внимание!Интересно!?$search$search_1 = array(«слово»,»слова»);
Далее нам потребуется массив, на который будем менять… слова будут те же. но вот мы обернем их в цвет…
$replace_1 = array(«<span style=\»color: red\»>слово</span >»,»<span style=\»color: #1b00ff;\»>слова</span>»);
Ну и собственно текст, где и будем менять массив на массив:
$subject_1 = «Для того, чтобы заменить слово в тексте нам потребуется некий текст с некими словами, и желательно, чтобы это слово повторялось несколько раз! И если это слово будет найдено, то покрасим в какой-то цвет! А давайте вот этот текст, в котором и идет речь о замене слова, покрасим данное слово в красный цвет!, а все слова, которые будут иметь в совсем составе слово «слова» , будут покрашены в синий «;
И выведем прямо здесь нашу замену слова:
echo str_replace($search_1, $replace_1, $subject_1 );
Поиск по буквам
Для реализации поиска по буквам потребуется лишь несколько дополнительных строк кода. Добавим этот удобный функционал для посетителей. Таким образом, они смогут находить представителей персонала по буквам, которые содержатся в имени или фамилии.
Добавьте следующую строку кода после закрывающего тега form:
</form> <p><a href="?by=A">A</a> | <a href="?by=B">B</a> | <a href="?by=K">K</a></p> <?php
Мы привязываем тег <a> к строке запроса с by с помощью анкора, и устанавливаем его равным определенной букве. Чтобы реализовать функционал поиска по буквам, нам нужно добавить следующий код прямо после закрывающей фигурной скобки в исходном скрипте, как показано ниже:
}//Окончание скрипта поисковой формы if(isset($_GET)){ $letter=$_GET; //Подключение к базе данных $db=mysql_connect ("servername", "username", "password") or die ('Я не могу подключиться к базе данных, так как: ' . mysql_error()); //-Выберете базу данных $mydb=mysql_select_db("yourDatabase"); //-Запрос к таблице базы $sql="SELECT ID, FirstName, LastName FROM Contacts WHERE FirstName LIKE '%" . $letter . "%' OR LastName LIKE '%" . $letter ."%'"; //-Запустить запрос к функции MySQL Query $result=mysql_query($sql); //-Результаты подсчета $numrows=mysql_num_rows($result); echo "<p>" .$numrows . " results found for " . $letter . "</p>"; //-Запуск цикла и сортировка результатов while($row=mysql_fetch_array($result)){ $FirstName =$row; $LastName=$row; $ID=$row; //-Вывести результат в массиве echo "<ul>n"; echo "<li>" . "<a href="search.php?id=$ID">" .$FirstName . " " . $LastName . "</a></li>n"; echo "</ul>"; } }
Здесь мы изменили четыре фрагмента кода скрипта поиска по сайту:
- Мы используем функцию isset(), и вносим в нее массив $_GET, а затем проверяем значение by;
- Создаем переменную $letter и инициализируем ее значение массивом $_GET;
- Добавляем переменную letter в SQL-запрос;
- Указываем переменную letter внутри выражения, в котором получаем подсчитанное количество строк.
Сохраните файл search_byletter.php и проверьте результат.