如何使else条件在PHP中工作


How to make an else condition work in PHP?

我编写了带有许多嵌套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_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_alert代码是在哪里定义的,我猜测这是你的错误。

试着先用一个类似的回声来替换它:echo "I am a super duper evil monkey";,看看它是否有效。

编辑

既然您现在添加了查询,我还想指出,您应该净化您的输入。这是为了让它更安全。然而,这里的"安全"一词有点刺激,因为您使用的是过时的mysql集。(mysqli / pdo是现在要走的路)

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

为什么?易于理解的看看这个!

$_POST['username'] = 'awesome';
$_POST['password'] = "' OR ''='";

它会变成这样。

SELECT * FROM users WHERE user='awesome' AND password='' OR ''=''

这意味着,每个人都可以登录,因为空白总是空白的。只是一个提醒。

更多信息请点击此处:http://php.net/manual/en/function.mysql-real-escape-string.php

编辑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()的页面上调用。在这里你可以检查它是否兴奋,如果兴奋,那么你就登录了。我希望这能帮助你。