【发布时间】:2017-03-24 22:55:51
【问题描述】:
我正在尝试创建一个查询系统来向系统管理员显示我系统中的所有用户帐户,以便稍后我可以添加一个功能来编辑它们等。我创建了一个 PHP 文件来查找结果并创建一个表,然后将其回显到 javascript 并显示。但是,系统只显示 0 而不是表格。我只能假设这意味着什么都没有找到,但我的系统本来就是为此而准备的,我 90% 确定它应该找到一些东西。
Javascript
function UserSearch(){
var Search = $("#txtUserSearch" ).val();
var Type = $("#sltQuery" ).val()
$.post('../functions/php/fncusersearch.php', {Search: Search, Type: Type}, function(data) {
if (data == 1){
$('#divSearchResults').html('<p class="text-center text-danger bg-danger" id="pUPInc">No Accounts Matched your Search!</p>');
}
else if (data == 3){
$('#divSearchResults').html('<p class="text-center text-danger bg-danger" id="pUPInc">Database not found! Please try again later.</p>');
}
else{
$('#divSearchResults').html(data);
}
});
}
PHP
//Retrieves variables from Javascript.
$Search = $_POST["Search"];
$Type = $_POST["Type"];
if ($Type == "Registration Date"){
$Type = "joined";
}
else if ($Type == "Account Rank"){
$Type = "rank";
}
include "db/openlogindb.php";
if($DBError == true){
$data = 3;
}
else{
$UserSearch = "SELECT username, surname, forename, joined, rank FROM users WHERE ".$Type." LIKE '%".$Search."%'";
$results = mysqli_query($conn, $UserSearch);
if(mysqli_num_rows($results) == 0){
$data = 1;
}
else{
$data = '';
$data += '<table class="table table-striped">';
while($row = mysqli_fetch_assoc($results)){
$data += "<tr><td>".$row['surname']."</td><td>".$row['forename']."</td><td>".$row['username']."</td><td>".$row['joined']."</td><td>".$row['rank']."</td></tr>";
}
$data += "</table>";
}
}
include "db/closelogindb.php";
echo $data;
?>
【问题讨论】:
-
请不要存储明文密码
-
我不明白为什么它传递了 0,但是你的 div 上有 txtUserSearch 的 id 而不是你的输入,所以你的搜索字段永远不会被传递。
-
另外,您可以进行 SQL 注入。由于您使用的是 mysqli,因此请利用准备好的语句和
bind_param作为搜索字段。 -
密码以纯文本形式存储,纯粹用于测试目的。目前,我经常通过 phpMyAdmin 创建大量帐户用于测试目的。如果必须对它们进行加密,这样做将非常困难,此外,如果我试图使其安全以进行测试,我不会选择密码作为我的密码。感谢您提供有关 SQL 注入的建议,它在我的列表中,以便在某个时候进行研究。
标签: javascript php sql search