mysql — PHP Split Search Bar Ключевые слова по пробелам

ОК, позвольте мне быть настолько конкретным, насколько это возможно … Я бы хотел изменить поведение панели поиска. Прямо сейчас строка должна точно соответствовать запросу MySQL !!! или это не покажет мои продукты.

Вот что я получил:
Поиск «чехол iphone»

searchitems.php?tosearch=case+iphone&Search=Search

введите описание изображения здесь

Теперь поиск «чехол для iphone»

searchitems.php?tosearch=iphone+case&Search=Search

введите описание изображения здесь

Теперь, основываясь на том, как запрос будет работать … если я наберу URL-адрес для этого вручную … он работает так, как я хочу:

searchitems.php?tosearch=%iphone%&%case%&Search=Search

введите описание изображения здесь

Итак, как мне изменить URL-адрес с

searchitems.php?tosearch=case+iphone&Search=Search

в

searchitems.php?tosearch=%iphone%&%case%&Search=Search

Вот код, который у меня есть до сих пор:

Форма поиска в index.php

<form method="GET" action="searchitems.php">
<input size="50" type="text" name="tosearch" value="Search" name="keyword" id="keyword" title="keyword" onfocus="clearText(this)" onblur="clearText(this)" class="txt_field">
<input type="submit" name="Search" value="Search" alt="Search" id="searchbutton" title="Search" class="sub_btn">
</form>

searchitems.php (извините, если на вкладке нет правильного текста, просто скопируйте и вставьте)

<?php
include('core/header2.php');
include ('core/connectdb.php');
if(isset($_GET['tosearch'])) {
$tosearch=$_GET['tosearch'];
$tosearch=urldecode($tosearch);
$tosearch = preg_replace('!\s+!', ' ', trim($tosearch));
$search_terms = explode(' ',$tosearch);
$search_terms[] = $tosearch;
$search_terms=array_unique($search_terms);
$query = "select * from products where ";
$query_fields = Array();
$sql = "SHOW COLUMNS FROM products";
$columnlist = $connect->query($sql);
while($arr = $columnlist->fetch_assoc()){
extract($arr);
$query_fields[] = $Field . " LIKE ('%". $tosearch . "%')";
}
$query .= implode(" OR ", $query_fields);
$results = mysqli_query($connect, $query) or die(mysql_error());
$rows = $results->num_rows;
if ($rows > 0) {
$cols = 5;
$counter = 1;
$nbsp = $cols - ($rows % $cols);
echo '<div id="content" class="float_r">';
echo "<table border=\"0\">";
while ($row = mysqli_fetch_array($results, MYSQLI_ASSOC)) {
if(($counter % $cols) == 1) {    // Check if it's new row
echo '<tr align="center">';
}
extract($row);
echo '<td  valign="top" style="padding-right:15px;">';
echo "<a href=itemdetails.php?itemcode=$item_code>";
echo '<img src=' . $imagename . ' style="max-width:120px;max-height:140px;
width:auto;height:auto;"></img><br/>';
echo $item_name .'<br/>';
echo "</a>";
echo '<div class="product_price">$'. $price .'</div>';
echo "<form method=\"POST\" action=\"cart.php?action=add&icode=$item_code&iname=$item_name&iprice=$price&ilocation=$location\">";
echo "<input type=\"submit\" name=\"addtocart\" value=\"Add To Cart\"></form>";
echo "</td>";
if(($counter % $cols) == 0 ){
echo "</tr>";
}
$counter++;
}
if($nbsp > 0) { // Add unused column in last row
for ($i = 0; $i < $nbsp; $i++)  {
echo '<td>&nbsp;</td>';
}
echo '</tr>';
}

}
}
echo '</table></div><div class="cleaner"></div>';
include('core/footer.php');
?>

0

Решение

ну, брат, это плохой подход, как ты это делаешь. Но для обучения, это хорошо. За + подписать вопрос, вы можете использовать PHP urldecode, пример:

<?php
$tosearch = 'a+b';
echo urldecode($tosearch);

у него есть своя «за» и «против», но на высоком уровне он будет работать для вас, вы можете больше в него копаться, если хотите.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector