2017-06-08 6 views
0

私は姓と名に基づいて検索するmysqli検索のような検索をしようとしています。姓と名を検索に入力すると、結果は得られません。しかし、私はちょうど姓または姓を入力すると、私は結果を取得します。助けを事前にmysqli検索は1つのパラメータでのみ動作します

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

ありがとう:

は、ここに私のコードです!

+0

'fname LIKE '%bob smith%''は 'fname = 'bob''と一致しませんが、' fname LIKE'%bob% ''と一致します – rtfm

+0

名前に2つの変数を使用しようとしました。それは動作しません。 – Zach

+0

私が正しく理解していれば、2つのphp変数で名と名字に2つの異なる検索フィールドを使用する必要がありますか? – Zach

答えて

0

あなたがfirstnameとlastnameの両方を入力すると、あなたのコードはfnamelnameという列からフルネームを検索しようとします。

たとえば、fnameに「John Doe」という名前を、lname列に「Doe」という名前を格納します。

「John」または「Doe」でお探しの場合は、fnameまたはlnameにあります。しかし、フルネームでは、両方のカラムが基準を満たしておらず、結果が得られません。

0

MysqlのLIKE構文は、「LIKE 'bob'」などの類似のエントリを検索し、「bobbette」を正常に返します。 'bob smith'は 'bob'のようなものではありません(スペースですが、常にテストに失敗します)、行が返されません。このような何か試してください:あなたの検索は「ボブ・スミス」だった場合

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%'"; 
    } 
    ... 
} 

を、これは「ボブ」や「鍛冶屋」に似た姓に似た最初の名前を持つすべての行を返します。多くの行があります。たとえば、「bob jones」、「bob smith」、「dan smith」がすべて返されます。あなたの検索が「bob」だけで、「bob smith」と「john bobbett」のエントリがある場合は、それらの両方を取得します。それはあなたが期待したものですか?

"bob smith"を検索したときに(たとえば)1行だけが必要だった場合は、ORではなくANDを検索する必要があります。ここで

0

、私が正しく理解して連結を使用してみてください、これは入力フィールド

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

からvaleu爆発しようとした場合、あなたは一緒に検索するデータベースの行との間に空の引用符を置くことができます。たとえば、

この例では、lnameとfnameのほかに、fnameとlnameの間に空の引用符があります。

ボブ・スミス

または

スミスボブ

そして、あなたは、あなたが探している結果が得られます:それは、検索がどちらかの検索などで成功できるようになります。

関連する問題