<?php require_once("Database.php"); ?>
<?php
if (isset($_POST['submit'])) {
$name = $_POST['username'];
$sql = "SELECT * FROM list ";
$query = mysqli_query($conn, $sql);
$blacklist = mysqli_fetch_array($query);
// BLACKLISTS
if (in_array($name, $blacklist)) {
die("Sorry! $name is not found");
}
else {
$api1 = file_get_contents("API");
echo "$name's ip is: $api1";
}
}
?>
所以我已经在这里工作了几个小时,我已经决定需要帮助。所以我要做的就是使用我在数据库中保存的字符串或名称创建黑名单的if语句。问题是只有黑色列出第一个id或名称,它不会接受或确认我的数据库中的其他名称。我想知道是否有人可以给我一个关于如何编写代码的建议,所以我使用所述数据库中的所有名称而不是第一个。
也尝试了这个,我仍然没有得到死亡声明。
<?php require_once("Database.php"); ?>
<?php
if (isset($_POST['submit'])) {
$name = $_POST['username'];
$sql = 'SELECT count(*) FROM list WHERE names = ?';
$name = $_POST['username'];
if ($stmt = mysqli_prepare($conn, $sql)) {
mysqli_stmt_bind_param($stmt, "s", $name);
mysqli_stmt_bind_result($stmt, $count);
mysqli_stmt_fetch($stmt);
if ($count) die("Sorry! $name is not found");// ITS BLACKLISTED
mysqli_stmt_close($stmt);
} else {
$api1 = file_get_contents("api");
echo "$name's ip is: $api1";
}
}
?>
答案 0 :(得分:1)
我认为问题是你要返回*会返回表中的所有字段。您只想返回一组名称并检查它们。
理想情况下,您希望列表中的数组如下所示:
//['tom', 'jim', 'sam', 'bob']
我刚检查了mysql_fetch_array here的文档,它返回了一个多维数组。你可能会得到这样的东西:
[
[
'id' => 1,
'name' => 'tom'
],
[
'id' => 2,
'name' => 'jim'
]
]
在上面的数组中,您没有名称列表,因此名称不在数组中。
正如@Ziumin所提到的,我们需要从数组中获取“name”键,所以我更新了下面的in_array部分:
<?php require_once("Database.php"); ?>
<?php
if (isset($_POST['submit'])) {
$name = $_POST['username'];
$sql = "SELECT name FROM list";
$query = mysqli_query($conn, $sql);
$blacklist = mysqli_fetch_array($query);
// BLACKLISTS
//get all the names from all the rows into one array
$nameList = array_column($blacklist, 'name');
//check that the posted name is in this list
if (in_array($name, $nameList)) {
die("Sorry! $name is not found");
}
else {
$api1 = file_get_contents("API");
echo "$name's ip is: $api1";
}
}
?>
答案 1 :(得分:0)
让我回答这个问题。至于你有一个黑名单用户的数据库,并且你想检查一些用户名是否被列入黑名单我建议你进行这项检查而不取出所有的黑名单表(这可能非常大)。
$sql = 'SELECT count(*) FROM list WHERE names = ?';
$name = $_POST['username'];
if ($stmt = mysqli_prepare($conn, $sql)) {
mysqli_stmt_bind_param($stmt, "s", $name);
mysqli_stmt_bind_result($stmt, $count);
mysqli_stmt_fetch($stmt);
if ($count) die("Sorry! $name is not found");// ITS BLACKLISTED
mysqli_stmt_close($stmt);
$api1 = file_get_contents("api");
echo "$name's ip is: $api1";
}
答案 2 :(得分:0)
<?php error_reporting(0); ?>
<?php require_once("Database.php"); ?>
<?php
if (isset($_POST['submit'])) {
$name = $_POST['username'];
$sql = "SELECT * FROM username WHERE username = '$name' ";
$query = mysqli_query($conn, $sql);
$blacklist = mysqli_fetch_array($query);
// BLACKLISTS
if (in_array($name, $blacklist)) {
die("Sorry! $name is not found");
}
else {
$api1 = file_get_contents("API");
echo "$name's ip is: $api1";
}
}
?>
所以我做的是将WHERE username ='$name'
添加到$sql
,以便准确地查看我想从数据库中提取的内容。我禁用了错误报告,因为它为in数组提供了一个null参数,当我继续禁用时启用它,但在我向公众显示时禁用它。