Php 如果语句不';工作不好

Php 如果语句不';工作不好,php,Php,我的陈述有些问题。其目的是检查用户是否存在,用户是否是工作人员(不能被禁止),以及用户是否可能已经被禁止。我不知道我做错了什么。有了3条语句,我可以构建更多的语句。只有语句有问题,查询的结果是好的。我已经测试过了,当我试图禁制自己的时候,有可能,当我有3个陈述时,它不是 if(isset($_POST['submit'])){ $bantype = $input->FilterText($_POST['bantype']); $value = $input->FilterText($

我的陈述有些问题。其目的是检查用户是否存在,用户是否是工作人员(不能被禁止),以及用户是否可能已经被禁止。我不知道我做错了什么。有了3条语句,我可以构建更多的语句。只有语句有问题,查询的结果是好的。我已经测试过了,当我试图禁制自己的时候,有可能,当我有3个陈述时,它不是

if(isset($_POST['submit'])){
$bantype = $input->FilterText($_POST['bantype']);
$value = $input->FilterText($_POST['value']);
$reason = $input->FilterText($_POST['reason']);
$length = $_POST['length'] ? $input->EscapeString((time()+$_POST['length'])) : '';

$user_sql = mysql_query("SELECT * FROM users WHERE username = '".$value."' LIMIT 1") or die(mysql_error());
$user_sql2 = mysql_query("SELECT * FROM bans WHERE value = '".$value."' LIMIT 1") or       die(mysql_error());
$user_exists = mysql_num_rows($user_sql);
if (mysql_num_rows($user_sql) == 0) {
echo 'This user does not exist and can not be banned.';
} while($fox = mysql_fetch_array($user_sql)) 

if ($fox['rank'] > 3) 
echo 'This user is marked as staff can not be banned.';

if (mysql_num_rows($user_sql2) > 0) {
echo 'This user is already banned.';

} else 
mysql_query("INSERT INTO bans (bantype, value, reason, expire, added_by,
added_date,appeal_state) VALUES 
('$bantype','$value','$reason','$length',
'".$user->row['username']."','" . date('d/m/Y H:i') . "','0')");

谢谢你的帮助

我没有足够的声誉在评论中提到这一点,但我认为你的错误是因为缺少括号,这些{}括号。您是否将代码复制到堆栈溢出

// This should be your while loop
while($fox = mysql_fetch_array($user_sql)) { //Do stuff here }

// Same issue here
if ($fox['rank'] > 3) { //Do stuff here }
缺少括号将破坏代码,即使是您不打算在检查后执行任何操作。因此,代码中的其他指针和可能的问题:

您在else语句后缺少一个结束括号 你的else语句似乎用错了。将它附加到运行的最后一个IF语句中,IF将忽略除最后一个之外的所有其他检查

新代码应该是这样的:

 $msg = ''; // Set up variable to carry reply
 if (mysql_num_rows($user_sql) == 0) {
    $msg .= 'This user does not exist and can not be banned.'; // Add to msg
 } 
 while($fox = mysql_fetch_array($user_sql)){ // Do something here
 // I think you meant for this to surround your next statements?
 if ($fox['rank'] > 3) {
     $msg .= 'This user is marked as staff can not be banned.'; // Add to msg
 } // Close IF
 if (mysql_num_rows($user_sql2) > 0) {
     $msg .= 'This user is already banned.'; // Add to msg

 } // Close IF
 } // Close While

 // Change else to a new IF
 if ($msg=='') { // You could also do if($msg!=false) in this case
    // YOUR MYSQL QUERY HERE
 } else {
    // Use $msg for something. I usually apply it to a cookie
    // Send the user back and then display the result
 }

正如其他人所说的,还有一些验证错误需要注意。您应该防止SQL攻击等。

查询不好。您非常容易受到SQL注入攻击,如果您还没有受到攻击,您将被黑客攻击。将准备好的/参数化查询与PDO或类似工具一起使用,以完全避免此问题。另外,你能在括号和缩进中更加一致吗?我不完全清楚你想做什么,问题是什么。你应该缩小你的问题范围。如果您对
If
语句有问题,那么所有SQL在那里做什么?将其分解为
true
false
值,让我们看看它。
while($fox=mysql\u fetch\u array($user\u sql))
与该缩进相结合。。。嗯……这就是按钮提交(POST)时发生的情况。我正在为postdata使用输入FilterText,所以我认为它是否安全?我已经添加了全部代码。我认为这是安全的,因为我使用了过滤文本,您必须首先随帖子提交。我不知道过滤文本的确切含义,但您应该始终在服务器端而不仅仅是客户端运行检查或卫生。客户端更方便,因为每个人都讨厌填写表格,结果发现自己做错了。很高兴我能帮忙。