2017-09-13 2 views
0

OK, lassen Sie mich so spezifisch wie möglich sein .... Ich möchte die Art ändern, wie sich meine Suchleiste verhält. Im Moment muss die Zeichenfolge genau mit der MySQL-Anfrage übereinstimmen !!! oder es zeigt meine Produkte nicht an. HierPHP Split Suchleiste Stichwörter nach Leerzeichen

ist, was ich habe: Eine Suche nach "Fall iphone"

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

enter image description here

nun eine Suche nach "iphone Fall"

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

enter image description here

Jetzt basierend darauf, wie die Abfrage funktionieren würde ... wenn ich Geben Sie die URL manuell dies ... es funktioniert, wie ich will es:

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

enter image description here

Wie gehe ich über die URL aus

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

zu

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

Hier ist der Code, den ich bisher habe:

Suchformular In 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 (Sorry, wenn es richtig einfach kopiert und eingefügt nicht Tabbed ist)

<?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'); 
?> 

Antwort

0

gut, Bruder, es ist ein schlechter Ansatz, wie Sie es tun. Aber um zu lernen, ist es in Ordnung.

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

es hat seine eigene Pro/con Sache, aber auf hohem Niveau wird es für Sie arbeiten, können Sie mehr in sie graben, wenn Sie möchten: Für + Zeichen Ausgabe, können Sie PHP urldecode, Beispiel.

+0

Das Zeichen + ist einfach, weil die Variable $ tosearch bereits Leerzeichen in ihnen hat urldecode(); nimmt nur irgendwelche + Zeichen heraus ... das löst mein Problem nicht, wie man die Leerzeichen ersetzt und dieses in meine URL% item% &% name% einträgt. –

+0

Warum brauchen Sie das Zeichen '%' im Suchbegriff? Ich habe einen Text erstellt und Beispielcode für Sie ausgeführt. Guck mal. https://gist.github.com/mszb/d2b6fd566ed5e390e98bf419bcd944ec - http://main.xfiddle.com/code_33641226.php?s=iphone+case –

+0

Ich habe meinen Suchcode aktualisiert, um mit dem zu funktionieren, was Sie angegeben haben ... leider gibt es mir immer noch die gleichen Ergebnisse, wenn ich nach "case iphone" suche, bekomme ich das eine Ergebnis, aber "iphone case" keine Ergebnisse. Ich brauche meine Suche, um beide Schlüsselwörter zu trennen, so dass es nach irgendeinem Ergebnis mit "Fall" und irgendeinem Ergebnis mit "iphone" sucht. Das% iphone% &% case% in die URL zu setzen funktioniert so, wie ich es möchte. –