0

您好,我在执行这项任务时遇到了很大的问题

我在 xampp 上建立了一个名为 search_test 的数据库,其中包含名字和姓氏作为字段。我已经设置了一个 php 表单,所以当用户输入一个名字说 Andre 时,它​​会返回数据库中的所有 andres。有一个问题它一直告诉我没有搜索结果,即使我知道数据库中有数据 这是应该是一个名为 index.php 的 php 页面的代码

    <?php
    mysql_connect("localhost","michael","xcA123sd") or die(mysql_error());
    mysql_select_db("search_test") or die ("could not find db"); 
     $output ='';
    if (isset ($_POST['search']));
        $searchq = $_POST['search'];
    $query = mysql_query("SELECT * FROM members WHERE firstname LIKE '%searchq%'" ) or die("could not search");
    $count = mysql_num_rows($query);
    if($count == 0){
        $output = 'There was no search results !';
        }else{
        while($row = mysql_fetch_array($query)){
        $fname = $row['firstname'];
        $output .='<div> '.$fname.'</div>';
        }

        }
}


?>

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>search</title>
</head>
<body>
<form action="index.php" method="post">
<input type="text" name="search" placeholder="search for members"/> 
<input type="submit" value=">>"/>
</form>
<?php print("$output);?>
</body
</html> 

例如,我输入 andre 并得到响应

没有搜索结果!

有人可以帮忙吗

4

5 回答 5

2

问题来自您的这行代码

$query = mysql_query("SELECT * FROM members WHERE firstname LIKE '%searchq%'" )

变量 searchq 后面没有 $

于 2013-03-31T16:18:29.453 回答
2

首先:你想要

$query = mysql_query("SELECT * FROM members WHERE firstname LIKE '%searchq%'" ) or die("could not search");

成为

$query = mysql_query("SELECT * FROM members WHERE firstname LIKE '%$searchq%'" ) or die("could not search");

(注意额外的$)。

也就是说,您有一个很大的 SQL 注入问题:假设,我“正常”运行一次查询:这让我对列有一个概念。现在我发布' UNION ALL SELECT correct_field_num FROM information_schema.TABLES WHERE NAME LIKE '%作为我的搜索 - 这给了我你的表格结构。通过发布,' UNION ALL SELECT correct_column_num FROM any_table_name WHERE 'x' LIKE '%我可以阅读任意表格。

确保您使用一种易于理解的技术从任何用户输入构建安全查询。mysql_real_escape_string()从不推荐使用的查询到参数化查询都有一个范围。

于 2013-03-31T16:22:22.170 回答
1
LIKE '%searchq%'"

如果您需要成为变量,它会搜索像“searchq”这样的字符串,添加相应的美元符号

于 2013-03-31T16:13:42.790 回答
0

对于您的选择语句,您有:

$query = mysql_query("SELECT * FROM members WHERE firstname LIKE '%searchq%'" ) or die("could not search");

它应该是:

$query = mysql_query("SELECT * FROM members WHERE firstname LIKE '%".$searchq."'%" ) or die("could not search");

因为您正在搜索名为 searchq 的变量中的内容,而不是实际的字符串 searchq :)

于 2013-03-31T16:18:26.143 回答
0

尝试这个:

<?php
mysql_connect("localhost","michael","xcA123sd") or die(mysql_error());
mysql_select_db("search_test") or die ("could not find db"); 
$output ='';
if (isset($_get['search'])){
    $searchq = $_get['search'];
}
$query = mysql_query("SELECT * FROM members WHERE firstname LIKE $searchq" ) or die("could not search");
$count = mysql_num_rows($query);
if($count == 0){
    $output = 'There was no search results !';
}else{
    while($row = mysql_fetch_array($query)){
        $fname = $row['firstname'];
        $output .='<div> '.$fname.'</div>';
    }
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>search</title>
</head>
<body>
<form action="index.php" method="get">
<input type="text" name="search" placeholder="search for members"/> 
<input type="submit" value=">>"/>
</form>
<?php print("$output);?>
</body>
</html>
于 2013-03-31T16:17:51.113 回答