为什么在这个isset和!如果块else语句默认执行时为空?

时间:2015-08-20 16:03:33

标签: php

self.resty.GET(self.server, route: str, onCompletion: {json in
        let result = json.asArray

        for var i = 0; i < result!.count; i++ {

            if !self.isIDAlreadyInDB(json[i]["id"].asInt!) {
                let newEv = NSEntityDescription.insertNewObjectForEntityForName("EVENTS", inManagedObjectContext: self.context!) as! EVENTS
                newEv.headline = json[i]["headline"].asString!
                newEv.id = json[i]["id"].asInt!
                newEv.content = json[i]["content"].asString!
                newEv.ofPublisher = publisher

                do {
                    try self.context!.save()
                } catch _ {
                }

                print("New Event from \(publisher.name): \(newEv.headline)")
            }
        }
    })

问题在于,当我运行此代码时,默认情况下,当我在xampp服务器上打开此页面<?php if( isset($_POST['pass']) && !empty($_POST['pass']) ) { $pass = $_POST['pass']; echo 'ok'; } else { echo 'Enter Password'; } ?> <form action="md.php" method="POST"> Password: <input type="password" name="pass"><br><br> <input type="submit" value="Submit"> </form> 时,我看到密码字段上方显示的消息Enter Password以某种方式执行了其他条件block应该在用户提交空表单时执行,而不是在我打开服务器上的页面时执行。

4 个答案:

答案 0 :(得分:3)

首次运行此表单时,通过在浏览器地址栏中输入点击其他页面上的链接或菜单项的URL,$_POST数组将为空。

因此,您的代码将导致else被运行并且echo 'Enter Password';将被执行

当您按下“提交”按钮时,假设您输入了密码,那么$ _POST将存在且$_POST['pass']将包含一个值,您应该会看到ok消息。如果您未在pass密码字段中输入任何内容,您当然会再次看到echo 'Enter Password';

如果您只想在忘记输入密码时看到该消息,但是按下了Submot按钮,这是我假设您正在说的话,请尝试此更改

<?php
if ( $_SERVER["REQUEST_METHOD"] == 'POST' ) {
    // only set when the form was actually posted
    // not set when you run form from a link or the address bar

    if( !empty($_POST['pass']) ) {
        $pass = $_POST['pass'];
        echo 'ok';
    } else {
        // pressed submit without entering a password
        echo 'Enter Password';
    }

}
?>
<form action="md.php" method="POST">
Password: <input type="password" name="pass"><br><br>
<input type="submit" value="Submit">
</form>

答案 1 :(得分:0)

else更改为:

} else if (isset($_POST["pass"]) && empty($_POST["pass"])) {

您的代码应该有3条路径:

  • 有一个密码,它不是空的(显示确定+表格)
  • 有一个密码,它是空的(显示条目pw +表格)
  • 没有密码(显示表格)

现在你只有2条路径。

答案 2 :(得分:0)

第一次打开页面时,它会为您提供else阻止,因为if statement为false。因此,请按照下面的说明修改else-if statement,此外,请离开action = ""当您按下submit按钮时,它不会将您引导至其他页面。试试这个:

<?php
if( isset($_POST['pass']) && !empty($_POST['pass']) )
{
       $pass = $_POST['pass'];
    echo 'ok';
} else if( isset($_POST['pass']) && empty($_POST['pass']) ) {
    echo 'Enter Password';
}
?>
<form action="" method="POST">
Password: <input type="password" name="pass"><br><br>
<input type="submit" value="Submit">
</form>

上面的代码应该显示表单,第一次打开表单时,以及随后输入/离开password字段时。

答案 3 :(得分:0)

尝试将您的PHP代码更改为:

<?php
if( isset($_POST['submit'])
{
    if( isset($_POST['pass']) && !empty($_POST['pass']) )
    {
        $pass = $_POST['pass'];
        echo 'ok';
    } else {
        echo 'Enter Password';
    }
}
?>

这样,代码只会在您单击“提交”按钮后运行,而不会在您加载页面时运行。

相关问题