Я пытаюсь выделить свой результат поиска в поиске PHP, но он выдвигает на первый план
Я использую код ниже
//connection to db
define('DB_HOST', 'localhost');
define('DB_NAME', 'dbname');
define('DB_USERNAME','root');
define('DB_PASSWORD','');
$con = mysqli_connect(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
if( mysqli_connect_error()) echo "Failed to connect to MySQL: " . mysqli_connect_error();//get search term
$searchTerm = $_GET['term'];
$result = mysqli_query($con, "SELECT `location` FROM `locations` WHERE TRIM(location) LIKE '%".($_GET['term'])."%'");
$data = array();
while ($row = mysqli_fetch_assoc($result))
{
$name = str_replace($searchTerm, "<span style='background-color:pink;'>$searchTerm</span>", $row['location']);
array_push($data, $name);
}//return json data
echo json_encode($data);
Допустим, я ищу термин makutano
Я получаю результат, подобный показанному ниже:
Я бы ожидал, что это только выделить makutano
, но это не работает, как задумано.
Если я удалю str_replace($searchTerm, "<span style='background-color:pink;'>$searchTerm</span>"
код мой результат будет как показано на рисунке ниже
Моя база данных выглядит так
Где я иду неправильно из моего кода? Любая помощь будет оценена
Если вы хотите отобразить информацию, вы должны объединить строку (что я делаю с implode()
) вместо создания объекта JSON:
//get search term
$searchTerm = htmlspecialchars($_GET['term']);
$result = mysqli_query($con, "SELECT `location` FROM `locations` WHERE TRIM(`location`) LIKE '%".($_GET['term'])."%'");
$data = array();
while ($row = mysqli_fetch_assoc($result))
{
$name = $row['location'];
array_push($data, $name);
}
$string = '"' . implode('","', $data) . '"';
$newString = str_replace($searchTerm, "<span style='background-color:pink;'>$searchTerm</span>", $string);
echo $newString;
После того как вы создали строку, вы можете выполнить замену, чтобы добавить разметку к строке.
Ваш сценарий подвержен риску атак SQL-инъекций. Узнать о подготовленный заявления для MySQLi. Я сделал минимум в этом коде с помощью htmlspecialchars()
,
Других решений пока нет …