如何使else条件在PHP中工作?

如何使else条件在PHP中工作?,php,Php,我已经用许多嵌套的if条件编写了PHP代码。我只想显示异常情况的警报以及if条件 以下是我的源代码: $username = $_POST['username']; $password = $_POST['password']; if (!empty($username) && !empty($password)) { $query ="SELECT * FROM user where username='.$username.' AND pass='.$passwor

我已经用许多嵌套的
if
条件编写了PHP代码。我只想显示异常情况的警报以及
if
条件

以下是我的源代码:

$username = $_POST['username'];
$password = $_POST['password'];

if (!empty($username) && !empty($password)) {
    $query ="SELECT * FROM user where username='.$username.' AND pass='.$password.'";

    $row = mysql_fetch_array($query);
    $counted = mysql_num_rows($query);

    if (($counted === 1) && 
        ($row['username'] === $username) && 
        ($row['password'] === $password))
    {
        session_destroy();
        session_start();
        echo "message";
    } else {
        do_alert("Exceptional alert");
    }
} else {
    do_alert("Exceptional alert");
}

另外两种情况都不起作用。我真的不知道我的错误在哪里。

我想这可能与您的代码中的
do\u alert
有关。跟着我看代码

$username = $_POST['username'];
$password = $_POST['password'];

if (!empty($username) && !empty($password)) {  // if not empty
    $query ="";                                // this is an empty query
    $row = mysql_fetch_array($query);          // returns nada
    $counted = mysql_num_rows($query);         // gives nada back

    if (($counted === 1) && ($row['username'] === $username) && ($row['password'] === $password)) {                // completely useless at this point cause no row is returned

        session_destroy();
        session_start();
        echo "message";                        

    } else {                                  // this will not be executed
        do_alert("Exceptional alert");       
    }

} else {                                     // this will be executed
    do_alert("Exceptional alert");           // where is this function defined?
}
好吧,我评论了你的代码哪里出错了。正如您看到的,它已经发生在第一个if上,因此它应该返回最后一个else。由于我不知道您的do_警报代码是在哪里定义的,我猜这是您的错误

试着先用这样的回音替换它:
echo“我是一只超级恶猴”并查看是否有效

编辑

既然您现在添加了查询,我还想指出,您应该清理您的输入。这是为了让它更安全。然而,这里的术语safe有点不恰当,因为您使用的是过时的
mysql
set。(
mysqli/pdo
是现在要走的路)

为什么??简单。看看这个

$_POST['username'] = 'awesome';
$_POST['password'] = "' OR ''='";
然后会出现这样的情况

SELECT * FROM users WHERE user='awesome' AND password='' OR ''=''
这意味着,每个人都可以登录,因为blank总是空的。就像头巾一样

更多信息请点击此处:

编辑2

// very first thing you do if you work with sessions, is actually starting it. you dont do this in your if else statement, cause you could not benefit of the session variable on a later stage on this page.

session_start();

// these variables come from a form with a form name, so we are going to do a check if indeed this came from that form.


$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);

if (!empty($username) && 
    !empty($password)) {  
    $query ="SELECT name, password FROM user WHERE name='".$username."' AND password = '".$password."'"; 
    $row = mysql_fetch_array($query);          
    $counted = mysql_num_rows($query);         

    if (($counted === 1) && 
        ($row['username'] === $username) && 
        ($row['password'] === $password)) {                

        echo "message";                        
    } else {                                  
        echo "no entrees found";       
    }
} else {                                     
    echo "failed to input some variable";     
}
我用我自己的话清理了一些,你可能不得不处理这个查询,而且由于你没有恰当地使用这个会话,我对它做了一些修正


现在,在返回消息的地方,您应该设置一个会话变量,您可以在稍后注销时销毁该变量。您可以在会话本身中调用的会话变量,在每个包含sessionstart()的页面上。在这里,您可以检查它是否被激活,如果是,则您已登录。我希望这能帮助你。

@lolka有两个嵌套的
if
s,由于缺少缩进(提示Devarajan),这几乎不明显。你在这方面有错误吗?你得到了什么结果?不工作不是一个很清楚的问题。下一步,也许你也应该调整和保护你的变量。此外,您没有查询,因此,在非正常情况下,您将无法从该部分获得任何信息。如果我这么大胆的话,你有什么东西?(假设这是一个函数)用这里所问的,但值得一提的是:您不应该使用
mysql\uu
来处理您的数据库。它已弃用,而且不安全。相反,如果。其他声明看起来不错。我同意值得检查do_alert是否掉球。函数do_alert($msg){echo'alert(“.$msg.””);}这是我的函数do_alert它是否按照我的要求吐出了回声?因为如果没有,您的代码可能没有到达此块。if-else语句看起来不错。另外,你能把上面的函数也放在你的代码中吗,人们可能也开始问:)我已经用echo而不是do_alert进行了测试,而不是solvedso你的代码是如何到达这一点的?你是在什么地方提交的吗?你有活生生的例子吗?以前有用吗?在调试的一天内完成:)
// very first thing you do if you work with sessions, is actually starting it. you dont do this in your if else statement, cause you could not benefit of the session variable on a later stage on this page.

session_start();

// these variables come from a form with a form name, so we are going to do a check if indeed this came from that form.


$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);

if (!empty($username) && 
    !empty($password)) {  
    $query ="SELECT name, password FROM user WHERE name='".$username."' AND password = '".$password."'"; 
    $row = mysql_fetch_array($query);          
    $counted = mysql_num_rows($query);         

    if (($counted === 1) && 
        ($row['username'] === $username) && 
        ($row['password'] === $password)) {                

        echo "message";                        
    } else {                                  
        echo "no entrees found";       
    }
} else {                                     
    echo "failed to input some variable";     
}