2017-06-08 1 views
0

Ich versuche, eine mysqli Suche wie Abfrage zu suchen basierend auf Vor- und Nachnamen. Wenn ich den Vor- und Nachnamen in die Suche eingebe, bekomme ich keine Ergebnisse. Wenn ich jedoch nur den Vornamen oder nur den Nachnamen tippe, bekomme ich Ergebnisse.mysqli Suche funktioniert nur mit 1 Parameter

Hier ist mein Code:

<?php 
if (isset($_POST['search'])) { 
$name = $_POST['search']; 
$sql = "SELECT * FROM users WHERE fname LIKE '%$name%' OR lname LIKE '%$name%'"; 
$res = mysqli_query($conn, $sql); 

} 
while ($row = mysqli_fetch_assoc($res)) { 
    $fname = $row['fname']; 
    $lname = $row['lname']; 
    $city = $row['city']; 
    $state = $row['state']; 
    $id = $row['id']; 
    $url = '<a href ="profile/?id='.$id.'">'; 
    if ($id !== ($_SESSION['id'])){ 
    $pic = "SELECT profilephotopatch FROM users WHERE id = '$id'"; 
    $res = mysqli_query($conn, $pic); 
    $row = mysqli_fetch_assoc($res); 
    $picloc = $row['profilephotopatch']; 
    $displaypic = '<div id="userphoto"><img src="../'.$picloc. '"style="width: 100%;max-height: 100%"></div>'; 
    $output = $displaypic. $url. '<div id="name">'. $fname. ' '. $lname. ' '. $city. $state. '</a></div><br>'; 
echo ($output); 
} 
} 
?> 

Vielen Dank im Voraus für die Hilfe!

+0

'fname '% Bob Smith%' LIKE' wird nicht übereinstimmen 'fname = 'bob'' aber' fname LIKE ''% bob%' wird – rtfm

+0

Ich habe versucht, zwei Variablen für den Namen zu verwenden, und es funktioniert nicht. – Zach

+0

Wenn ich richtig verstehe, muss ich zwei verschiedene Suchfelder für Vorname und Nachname mit zwei PHP-Variablen verwenden? – Zach

Antwort

0

Wenn Sie sowohl Vorname und Nachname eingeben, wird Ihr Code versuchen, den vollständigen Namen aus fname und lname Spalte zu finden, die natürlich nicht das Ergebnis gibt.

Zum Beispiel speichern Sie den Namen "John Doe" als "John" in fname und "Doe" in lname Spalte. Wenn Sie mit "John" oder "Doe" suchen, finden Sie es in fname oder in lname. Aber mit Fullname erfüllen beide Spalten keine Kriterien und ergeben kein Ergebnis.

0

Mysqls LIKE-Konstrukt sucht nach ähnlichen Einträgen wie "LIKE 'bob'", die "Bobbette" erfolgreich zurückgibt. 'bob smith' ist nicht wie 'bob' (es ist das Leerzeichen, es versagt immer den Test) und wird keine Zeile zurückgeben. so etwas wie dies versucht:

if(isset($_POST['search'])){ 
    $names = explode(" ", $_POST['search']); 
    $search_fname = array_shift($names); 
    $search_lname = array_pop($names); 
    if($search_lname != ''){ 
     $sql = "SELECT * FROM users WHERE fname LIKE '%$search_fname%' OR lname LIKE '%$search_lname%'"; 
    } else { 
     $sql = "SELECT * FROM users WHERE fname LIKE '%$search_fname%' OR lname LIKE '%$search_fname%'"; 
    } 
    ... 
} 

Wenn Ihre Suche „Bob Smith“ ist, das alle Zeilen mit einem Vornamen ähnlich zurückkehren würde zu „bob“ oder ein Nachnamen ähnlich wie „smith“. Könnte viele Reihen sein. Zum Beispiel würden "bob jones", "bob smith", "dan smith" zurückgegeben. Wenn deine Suche nur "bob" war und du Einträge für "bob smith" und "john bobbett" hast, würdest du beides bekommen. Hast du das erwartet?

Wenn Sie zum Beispiel nur eine Zeile erwartet haben, als Sie nach "bob smith" gesucht haben, sollte Ihre Abfrage nach AND und nicht nach OR suchen.

0

Hier wird, wenn ich mich richtig versuchen zu verstehen dieses Feld valeu vom Eingang explodieren

$search= explode(" ",$_POST['search']); 
$name = $search[0]; 
$surname = $search[1]; 
$sql = "SELECT * FROM users WHERE fname LIKE '%$name%' OR lname LIKE '%$surname %'"; 
0

Versuchen Sie es mit Concat können Sie leeren Anführungszeichen zwischen den Datenbankzeilen setzen Sie zusammen gesucht werden soll. Zum Beispiel

$sql0 = "SELECT * FROM users WHERE CONCAT(`fname`, ' ', `lname`, ' ', `fname`) LIKE '%$name%' OR lname LIKE '%$name%'" 

In diesem Beispiel können Sie die leeren Anführungszeichen zwischen fname und lname sowie lname und fname sehen. Das erlaubt die Suche entweder mit Suche erfolgreich zu sein wie:

Bob Smith

oder

Smith Bob

Und Sie werden die Ergebnisse Sie suchen zu bekommen.

Verwandte Themen