2016-12-19 67 views
-3

我在我的网站上创建了一个搜索栏,以便用户可以搜索其他用户并且它可以工作,但是如果我输入一个用户名,所有用户名都会显示出来。我怎样才能显示我正在寻找的用户,如果用户没有注册给别人的声明?PHP用户搜索

的search.php:

<?php 
include("connect.php"); 

GLOBAL $usernam; 

$output = ''; 

if(isset($_POST['Search'])) { 

if (empty($_POST["searchbar"])) { 
echo"You didn't enter anything . "; 
} else { 

$searchq = $_POST['Search']; 
$searchq = preg_replace("#[^0-9a-z]#i", "",$searchq); 

$query = mysqli_query($conn ,"SELECT * FROM users WHERE usernam LIKE '%$searchq%'") or die("Could not search"); 
$count = mysqli_num_rows($query); 

if($count == 0){ 

    echo "There was no search results . "; 

} else { 

    while($row = mysqli_fetch_array($query)) { 
     $usernam = $row['usernam']; 
     $id = $row['id']; 
     $output .= '<div>' .$usernam. '</div>'; 
    } 

    }  
} 
} 
?> 
<html> 
<head> 
<title>Interpage</title> 
</head> 
<body> 

<?php print("$output"); ?> 
</body> 
</html> 
+0

难道你不需要'$ searchq = $ _POST ['searchbar'];'not'$ searchq = $ _POST ['Search'];'? – Sean

+0

“搜索”是我按钮的名称。 'searchbar'是搜索栏的名称 – mrpunani

+0

的确如此。使用'$ searchq = $ _POST ['Search'];'您正在搜索''SELECT * FROM users where usernam LIKE'%$ _ POST ['Search']%'“'(您的按钮),但我认为你实际上要搜索'“SELECT * FROM用户在哪里usernam LIKE'%$ _ POST ['searchbar']%'”'(您的搜索栏)。这就是为什么我建议改为'$ searchq = $ _POST ['Search'];'(你的搜索栏值) – Sean

回答

2

你的问题是,你正在寻找您的按钮的价值,而不是你的搜索栏 -

$searchq = $_POST['Search']; 

你想

$searchq = $_POST['searchbar']; 

关于你的问题 - is it secure ??。不它不是。这是对How can I prevent SQL injection in PHP?

读了在最低限度的最佳时机,你可以使用mysqli_real_escape_string()

$searchq = mysqli_real_escape_string($conn, $_POST['searchbar']); 

但我会建议进一步走一步,并学习如何使用准备好的语句/占位符,即。

$stmt = $conn->prepare("SELECT * FROM users WHERE usernam LIKE ?"); 
$stmt->bind_param('s', "%".$_POST['searchbar']."%"); 
$stmt->execute(); 
+0

我做了这个'$ searchq = mysqli_real_escape_string( $ conn,$ _POST ['searchbar']); ();或者死(“无法搜索”);或者,你可能会遇到这样的问题。 \t \t $ count = mysqli_num_rows($ query);' – mrpunani