1

我想放置一个搜索框,以便当您输入人名时,它会从数据库中选择该人的详细信息。

这是我的搜索框:

<html>
<body>

<form action="users.php" method="GET">
<input id="search" type="text" placeholder="Type here">
<input id="submit" type="submit" value="Search">
</form>
</body>
</html>

然后这是我返回用户的 PHP:

<?php 

$connection = mysql_connect("localhost","root","");

mysql_select_db("blog1")or die(mysql_error());


$result = mysql_query("SELECT username FROM member");
 while ($row = mysql_fetch_assoc($result)) {
echo "<div id='link' onClick='addText(\"".$row['username']."\");'>" . $row['username'] . "</div>";  
 }


  ?>

如何让它只返回我在搜索栏中键入的用户而不是所有用户?任何帮助都会很棒,因为我只是在学习 PHP。

4

5 回答 5

5

您需要在WHERESQL 查询中添加一个子句,以过滤具有匹配用户名(使用=)或类似用户名(使用LIKE)的用户。例如:

SELECT * FROM users WHERE username LIKE '%querystring%'

将返回用户名包含“查询字符串”的所有用户。

此外,由于您可能会在评论中受到轰炸,这些mysql_*功能已弃用。您至少应该切换到mysqli_*,甚至更好地切换到 PDO。

于 2013-05-06T16:43:15.487 回答
3

拳头不要在你的代码中使用 mysql_* ,使用 PDO 或 mysqli_*

<?php 

$connection = mysql_connect("localhost","root","");

mysql_select_db("blog1")or die(mysql_error());

$safe_value = mysql_real_escape_string($_POST['search']);

$result = mysql_query("SELECT username FROM member WHERE `username` LIKE %$safe_value%");
 while ($row = mysql_fetch_assoc($result)) {
echo "<div id='link' onClick='addText(\"".$row['username']."\");'>" . $row['username'] . "</div>";  
 }


  ?>

第二次编辑你的html

<form action="users.php" method="GET">
<input id="search" name="search" type="text" placeholder="Type here">
<input id="submit" type="submit" value="Search">
</form>
于 2013-05-06T16:45:06.340 回答
0

请不要在新代码中使用 mysql_* 函数。 它们不再被维护,并且已经开始弃用过程。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi - 本文将帮助您决定使用哪个。

就个人而言,我会使用类似 Bootstrap 的 typeahead 功能。您可以将您的用户列表预加载到 javascript 数组中,当用户键入时,它将开始过滤。关于 Bootstrap 的 typeahead 的更多信息可以在这里找到:http: //twitter.github.io/bootstrap/javascript.html#typeahead

要按照您当前的方式进行操作,我将使用以下代码(我使用了 MySQLi 扩展)

<?php

$connection = new mysqli('localhost', 'root', 'password', 'DB_NAME');

$search = $_GET['search'];
$search = $mysqli -> real_escape_string($search);

$query = "SELECT username FROM member WHERE username LIKE '%".$search."%'";
$result= $mysqli -> query($query);

while($row = $result -> fetch_object()){
    echo "<div id='link' onClick='addText(\"".$row -> username."\");'>" . $row -> username . "</div>";  
}

通过添加WHERE username LIKE '%".$search."%'它,它会按以您键入的术语开头或结尾的用户名过滤记录。

如果您有一个用户名“Alex”并且您的搜索词是“Ale”,则该结果将在返回的结果中,如果您搜索“lex”,则 Alex 将在返回的结果中。

于 2013-05-06T16:47:58.093 回答
-1
  • 提交 GET 请求
  • 获取变量并将其转义以防止sqlinjk
  • 搜索用户名设置为传递的数据库记录
  • 打印结果

html

<form action="users.php" method="GET">
  <input name="username" id="search" type="text" placeholder="Type here">
  <input id="submit" type="submit" value="Search">
</form>

php

<?php
$connection = mysql_connect("localhost","root","");
mysql_select_db("blog1")or die(mysql_error());
$username = mysql_real_escape_string($_GET['username']);
$result = mysql_query("SELECT * FROM member WHERE username = '" + $username + "'");
print_r($result);
于 2013-05-06T16:46:11.483 回答
-3
<form action="users.php" method="GET">
<input id="search" name="keywords" type="text" placeholder="Type here">
<input id="submit" type="submit" value="Search">
</form>
</body>
</html>

<?php 

$connection = mysql_connect("localhost","root","");

mysql_select_db("blog1")or die(mysql_error());

$keywords = isset($_GET['keywords']) ? '%'.$_GET['keywords'].'%' : '';

$result = mysql_query("SELECT username FROM member where username like '$keywords'");
while ($row = mysql_fetch_assoc($result)) {
    echo "<div id='link' onClick='addText(\"".$row['username']."\");'>" . $row['username'] . "</div>";  
}

?>
于 2013-05-06T16:54:02.817 回答