我正在尝试创建一个简单的搜索栏,允许用户使用用户ID进行搜索以返回特定用户。
我需要包含SQL注入保护。
目前该页面加载了一个空白屏幕,但当我刷新页面时,我收到“未找到结果”的响应。
感谢任何帮助。我一直在阅读很多关于搜索栏的帖子,但没有什么能帮助我。
这是代码:
<html>
<head>
<title></title>
</head>
<body>
<form action="search.php" method="POST">
<input type="text" name="search" />
<input type="submit" value="Search" />
</form>
</body>
<?php
//search.php
include("DbConnect.php");
$search = $_POST['search'];
$safesearch = mysqli_real_escape_string($search);
$Query = "SELECT user_id
FROM users
WHERE user_id = '$safesearch'";
$Result = mysqli_query($DB,$Query);
$NumResults = mysqli_num_rows($Result);
if ($NumResults==1)
{
echo "<h1>results: ".$Result."</h1>";
}else{
echo "<h1>No Results found</h1>";
}
?>
答案 0 :(得分:0)
您的代码周围应该有一个if(isset($ _ POST ['submit'] {},因此只有在搜索时才会触发,而不是在页面加载时触发。
如果您正在进行任何类型的插入,请使用其中包含变量的sql语句选择或更新,您应该使用预准备语句。
使用准备好的声明,它比你正在做的更安全:
<?php
//search.php
include("DbConnect.php");
$search = $_POST['search'];
$safesearch = mysql_real_escape_string($search);
$Query = "SELECT user_id
FROM users
WHERE user_id = ?";
$stmt = $connectionVariableName->prepare($query);
$stmt->bind_param("s",$safesearch);
$stmt->execute();
$stmt->bind_result($result);
$stmt->fetch();
$num_rows = $stmt->num_rows;
$stmt->close();
if ($num_rows > 0)
{
echo "<h1>results: ".$result."</h1>";
}else{
echo "<h1>No Results found</h1>";
}
?>
http://php.net/manual/en/mysqli.prepare.php
您还应该通过使用正则表达式对搜索变量进行测试来确保它只包含您在userid中允许的字符,而不是/ * ^等
答案 1 :(得分:0)
我想要部分短语搜索。
然后您的查询必须如下所示:
$Query = "SELECT user_id
FROM users
WHERE user_id LIKE '%$safesearch%'";
不熟悉php,但%符号似乎不是语言中的特殊字符(如果我错了,请纠正我),如果偶然的话 - 逃避它。
使其不区分大小写 -
$safesearch = strtolower($safesearch);
$Query = "SELECT user_id
FROM users
WHERE lowercase(user_id) LIKE '%$safesearch%'";