PHP/SQL禁止状态未响应

PHP/SQL禁止状态未响应,php,html,sql,pdo,Php,Html,Sql,Pdo,我制作了一个被禁止的.php页面,所以如果用户被禁止,只要他们被禁止,他们就会重定向到被禁止的.php页面 问题我将状态设置为1很好,但是禁止原因将不会对该用户产生回音 bans的SQL表中有这些表username和reason 代码: 然后$ban=$result->fetchColumn()或$ban=$result->fetchColumn()[0] $stmt可能是一个比较容易混淆的变量名,因此$sql通常用于查询字符串 fetchColumn()至少可用于PDO,但不清楚使用了哪个驱

我制作了一个被禁止的.php页面,所以如果用户被禁止,只要他们被禁止,他们就会重定向到被禁止的.php页面

问题我将
状态设置为
1
很好,但是禁止
原因将不会对该用户产生回音

bans
的SQL表中有这些表
username
reason

代码:


然后
$ban=$result->fetchColumn()
$ban=$result->fetchColumn()[0]

$stmt
可能是一个比较容易混淆的变量名,因此
$sql
通常用于查询字符串

fetchColumn()
至少可用于
PDO
,但不清楚使用了哪个驱动程序。

Sql查询: 从状态为“1”且用户名为:username的用户中选择*示例数据库表 (运行代码段以查看“格式化”表。)

用户ID
用户名
地位
理由
51414
费利克斯晶体
0
系统开发。

好的,我设法找到了显示的原因,但当从面板中输入状态时,它使用了
插入
不更新,因此不会显示最新的禁令原因,如下所示:
gggggggg
是旧的禁止原因,
作为测试被禁止
是新的原因,但它反复插入我尝试使用的代码
UPDATE
,但没有效果

代码:
if($status!=$\u POST['status'])){
$SQL=$odb->prepare(“更新
users
SET
status
=:status WHERE
ID
=:ID”);
$SQL->execute(数组(':status'=>$\u POST['status'],':id'=>$id));
$status=htmlspecialchars($_POST['status']);
$reason=htmlspecialchars($_POST['reason']);
$SQLinsert=$odb->prepare('INSERT-INTO
bans
value(:用户名,:原因)');
$SQLinsert->execute(数组(':username'=>$username',:reason'=>$reason));
$update=true;
$updateMsg=“用户状态从{$status}更新为{$\u POST['status']},原因为:{$\u POST['Reason']}”;

}

我在这里看到SQL注入和糟糕的代码结构。请提供1)连接创建代码;2) 用于错误报告的代码;3)
CREATE TABLE
语法。我还建议只使用一个表,
users
,其结构如下:
user\u id | username | band | ban\u reason
。实际上,他正在使用PDO扩展。@dakis,是的,我意识到了谢谢你。这更多的是为了显示检索的逻辑和选项。它可以很容易地转换成PDO。编码风格很奇怪。建议使用小写GET/POST参数、保留关键字和函数名。另外,对于URL,最好使用小写(在Linux服务器中,大写URL不同于小写URL)。最后,
UserID
可能是一个整数,不需要用单引号括起来。@Raptor,我知道这不是传统的方法,但效果很好。我使用CentOS,它是一个Linux发行版,没有任何问题。然而,我确实验证了大写和小写字母的URL,这是一个不必要的步骤,但仍然是我的首选。只要性能并没有损失(不考虑微优化),我的语法就和任何语法一样好。你说得对,因为它可以被忽略。当我们知道该值将是整数时,无需进行不必要的比较,因此感谢您的观察。再次声明:为了能够正确帮助您,请提供1)连接创建代码;2) 用于错误报告的代码;3)
创建表
语法。另外,给我们php页面的全部代码,以便我们了解您使用的值的语义含义。从屏幕截图上看,您的表结构似乎是错误的。
<?php 
        //Check if the user is banned
        $SQL = $odb -> prepare("SELECT `status` FROM `users` WHERE `username` = :username");
        $SQL -> execute(array(':username' => $username));
        $status = $SQL -> fetchColumn(0);
        if ($status == 1){
            $ban = $odb -> query("SELECT `reason` FROM `bans` WHERE `username` = '$username'") -> fetchColumn(0);
            if(empty($ban)){ $ban = "No reason given."; }
            $error = 'You are banned. Reason: '.htmlspecialchars($ban);
        }                           ?>
$sql = "SELECT reason FROM bans WHERE username LIKE '$username' LIMIT 1";
$result = $odb->query($sql);