2016-05-13 14 views
0

Dies ist das erste Mal erstellen eine Suchleiste. Die Suchleiste befindet sich auf der Index-/Startseite und verarbeitet die britischen Postleitzahlen für einen Online-Lebensmittellieferdienst. Die Idee der Suchleiste besteht darin, zu sehen, welche Restaurants an die Benutzeradresse liefern. Die Suchleiste leitet die Benutzer erfolgreich zur Menüauswahlseite um. Dies ist jedoch der Punkt, an dem mein Problem beginnt.PHP/MYSQLI: INNER JOIN Suchleiste Abfrage Probleme

Silly mich, hatte bereits eine dynamische Menüauswahlseite erstellt, so dass der Moment, in dem ein neues Restaurant im Admin-Panel erstellt wird, automatisch auf dieser Seite angezeigt wird. Es funktioniert bis auf weiteres erfolgreich, es zeigt alle Restaurants in der DB, egal in welcher Gegend oder Postleitzahl.

Da dies die Seite ist, auf die der Benutzer beim Suchen seiner Postleitzahl verwiesen wird, versuche ich jetzt, meine dynamische Menüauswahlseite mit der Suchleistenabfrage zu kombinieren, also zum Beispiel wenn der Benutzer in E14 ABU alle Restaurants eintippt In E14 wird auf dieser Seite angezeigt. Klingt geradeaus, aber weil die Restaurantdetails, die in der Restaurantmenü-Seite aufgerufen werden, in einer Tabelle sind und die Postleitzahlen in einer anderen, habe ich ein INNER JOIN benutzt, um beide zu verbinden. Aber die Abfrage funktioniert nicht.

Ich weiß, dass die Abfrage funktioniert, wie es zum Drucken der dynamischen Menüauswahlseite verwendet wurde. Meine Abfrage druckt mein oder stirbt von "konnte nicht suchen!". Ich habe

var_dump($sql) 

und

if (!$sql) { 
    die('Invalid query: ' . mysql_error()); 
    } 

druckt aber nicht verwendet, was verwirrend ist. Nur eine leere weiße Seite.

-Code

output=''; 



    //return to home page if not entered via search 
    if(isset($_POST['search'])){ 
    $searchq= $_POST['search']; 

      $sql=mysqli_query($dbc,"SELECT Rest_Details.Resturant_ID, Rest_Details.Resturant_name, Rest_Details.Res_Address_Line_1, Rest_Details.City_name, 
       Rest_Details.Avg_Del,Delivery_Pcode.Pcode 
    FROM Rest_Details 
    INNER JOIN Delivery_Pcode 
    ON Delivery_Pcode.Restaurant_ID=Rest_Details.Restaurant_ID 
    WHERE Delivery_Pcode.Pcode LIKE '%$searchq'") or die ("could not search!"); 

      } 

Weiter unten auf der Seite.

 print("$output"); 

Ich versuche nur den Restaurantnamen im Moment zu drucken, bis ich die Abfrage funktioniert. Meine Webseite wurde erfolgreich mit der DB verbunden, ich habe Fehlerhandler und der Name der Suchleiste ist Suche. Irgendwelche Vorschläge?

$sql=mysqli_query($dbc,"SELECT Rest_Details.Resturant_ID, Rest_Details.Resturant_name, Rest_Details.Res_Address_Line_1, Rest_Details.City_name, Rest_Details.Avg_Del,Delivery_Pcode.Pcode 
    FROM Rest_Details INNER JOIN Delivery_Pcode 
    ON Delivery_Pcode.Restaurant_ID=Rest_Details.Restaurant_ID 
    WHERE Delivery_Pcode.Pcode LIKE '%".$searchq."'") or die ("could not search!"); 

Sie Ihr Ergebnis Ich hoffe bekommen: cerrect wird dann versuchen, dies würde

+1

'mysql_error' nicht mit' mysqli' funktioniert. Sie sollten auch vorbereitete Anweisungen verwenden. – chris85

+0

@ chris85 danke – jerneva

+1

Verwenden Sie 'mysqli_error ($ dbc)', um den Grund für den Fehler zu sehen. – Barmar

Antwort

-1

Wenn Ihre Feldnamen geschätzt.

+0

Leider tut es nicht, aber ich danke Ihnen – jerneva

-1

Escape-Zeichenfolge dann Abfrage durchführen.

$searchq = mysqli_real_escape_string($dbc, $_POST['search']);  
$result = mysqli($dbc, "SELECT dpc.Pcode, rd.Resturant_ID, rd.Resturant_name, rd.Res_Address_Line_1, rd.City_name, rd.Avg_Del FROM Delivery_Pcode dpc INNER JOIN Rest_Details rd ON dpc.Restaurant_ID = rd.Restaurant_ID WHERE dpc.Pcode LIKE '%$searchq'"); 

$results = []; 
while($row = mysqli_fetch_assoc($result)) { 
    $results[] = $row; 
} 

// print results array 
print_r($results); 

Sie müssen sicherstellen, dass die Delivery_Pcode.Pcode ist ein Typ VARCHAR

Lesen Sie mehr über Sanitizing User Input