Intereting Posts
Узел чтения SimpleXML с переносным именем Итерация многомерного массива рекурсивно и возврат той же структуры массива и вставка нового ключа / значений в PHP Функция ereg () устарела mysql заявление о дате последнего месяца Magento – Пользовательский платежный модуль Никогда не запускайте «композиторское обновление» в производстве, почему? PHP: возвращает все даты между двумя датами в массиве Как удалить элемент из дерева XML, где атрибут – это определенная строка в Simple XML PHP Изменение ассоциативного массива в индексированный массив / получение Zend_Table_Row_Abstract как неассоциативного Правильный способ использования LIKE '% {$ var}%' с подготовленными операторами? Как заставить файл загружаться в PHP сделать выполнение скрипта неограниченным Как получить случайное значение от 1 ~ N, но исключая несколько конкретных значений в PHP? Как создать многомерный массив из строки Примеры SQL-инъекций с помощью addlashes ()?

Выделение поиска mysql & php

Удивительно, если кто-то может помочь мне нажать в правильном направлении, я создаю функцию поиска (php и mysql), которая будет отображать результаты поиска и выделяет ключевые слова, которые пользователь искал. на данный момент я беру критерии поиска, которые пользователь ввел, и запрашивает это по отношению к базе данных, которая отлично работает для получения желаемых результатов. проблема у меня есть

$highlight = preg_replace("/".$_GET['criteria']."/", "<span class='highlight'>".$_GET['criteria']."</span>", $_row['name']); 

Это будет означать только фразу, а не отдельные ключевые слова. так, например, если документ был назван «Hello world», и пользователь набрал его точно, он бы не выявил проблем, однако, если пользователь набрал «world hello», он ничего не выделит. Я подумал, что было бы неплохо принять критерии поиска и использовать взрыв и проверить каждое слово отдельно, но это, похоже, тоже не срабатывает. вот мой запрос и как я показываю результаты

  $sql = "SELECT * FROM uploaded_documents WHERE dept_cat = 'procedures' AND cat =:cat AND keywords REGEXP :term "; $result->execute(array(':cat' => $_GET['category'],':term' => $_GET['criteria'])); //display results while($row = $stmt->fetch()){ $explode_criteria = explode(" ",$_GET['criteria']); foreach($explode_criteria as $key){ $highlight = preg_replace("/".$key."/", "<span class='highlight'>".$key."</span>", $row['name']); echo '<td><a target="_blank" href="'.$row['url'].'">'.$highlight.'</a></td>'; echo '<td>'.$row['version'].'</td>'; echo '<td>'.$row['cat'].'</td>'; echo '<td>'.$row['author'].'</td>'; echo '<td>'.$row['added'].'</td>'; echo '<td>'.$row['auth_dept'].'</td>'; echo '<td>'; } } 

Ради длины я пропустил код здесь и попытался сохранить его минимальным, я пытался основывать свою работу на следующем сообщении

выделение результатов поиска в php / mysql

Я думаю, что моя первая проблема – это цикл foreach в дублирующих результатах цикла while, но я не могу думать об этом.

заранее спасибо

В этом блоке кода:

 //display results while ($row = $stmt->fetch()) { $explode_criteria = explode(" ", $_GET['criteria']); foreach ($explode_criteria as $key) { $highlight = preg_replace("/" . $key . "/", "<span class='highlight'>" . $key . "</span>", $row['name']); echo '<td><a target="_blank" href="' . $row['url'] . '">' . $highlight . '</a></td>'; echo '<td>' . $row['version'] . '</td>'; echo '<td>' . $row['cat'] . '</td>'; echo '<td>' . $row['author'] . '</td>'; echo '<td>' . $row['added'] . '</td>'; echo '<td>' . $row['auth_dept'] . '</td>'; echo '<td>'; } } 

Цикл постоянно ссылается на $row['name'] , поэтому замена выполняется, но в следующий раз, когда цикл происходит, он заменяет следующее слово на исходной неизмененной $row['name']

Я думаю, это должно помочь вам:

 //display results while ($row = $stmt->fetch()) { $explode_criteria = explode(" ", $_GET['criteria']); $highlight = $row['name']; // capture $row['name'] here foreach ($explode_criteria as $key) { // escape the user input $key2 = preg_quote($key, '/'); // keep affecting $highlight $highlight = preg_replace("/" . $key2 . "/", "<span class='highlight'>" . $key . "</span>", $highlight); echo '<td><a target="_blank" href="' . $row['url'] . '">' . $highlight . '</a></td>'; echo '<td>' . $row['version'] . '</td>'; echo '<td>' . $row['cat'] . '</td>'; echo '<td>' . $row['author'] . '</td>'; echo '<td>' . $row['added'] . '</td>'; echo '<td>' . $row['auth_dept'] . '</td>'; echo '<td>'; } }