如何过滤掉数组以不显示数据库中的字符串?
How to filter out in arrays to not display strings from databse?
<?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";
}
}
?>
我认为问题在于您正在 returning * 这将 return 来自 table 的所有字段。您只想 return 一组名称并检查它们。
理想情况下,您需要列表 table 中的数组,如下所示:
//['tom', 'jim', 'sam', 'bob']
我刚刚查看了 mysql_fetch_array here 的文档,它 return 是一个多维数组。您可能会得到这样的回复:
[
[
'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";
}
}
?>
让我来回答这个问题。至于你有一个包含黑名单用户的数据库,并且你想检查某个用户名是否被列入黑名单,我建议你进行此检查而不获取所有黑名单 table(可能很大)。
$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";
}
<?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 数组提供了一个空参数,当我继续禁用时我会启用它,但是当我将它显示到 public.
时禁用它
<?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";
}
}
?>
我认为问题在于您正在 returning * 这将 return 来自 table 的所有字段。您只想 return 一组名称并检查它们。
理想情况下,您需要列表 table 中的数组,如下所示:
//['tom', 'jim', 'sam', 'bob']
我刚刚查看了 mysql_fetch_array here 的文档,它 return 是一个多维数组。您可能会得到这样的回复:
[
[
'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";
}
}
?>
让我来回答这个问题。至于你有一个包含黑名单用户的数据库,并且你想检查某个用户名是否被列入黑名单,我建议你进行此检查而不获取所有黑名单 table(可能很大)。
$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";
}
<?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 数组提供了一个空参数,当我继续禁用时我会启用它,但是当我将它显示到 public.