使用isset

时间:2015-09-06 18:58:58

标签: php

我正在学习新的php。在使用isset之后的下面脚本中,它显示welcome1而不是显示welcome abc。无法理解这个问题。我该如何解决这个问题?欢迎abc" .Oany help?

               <?php 
                   session_start();

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

                if($username == "abc" && $password =="123") {
                    echo 'Welcome' .$username ;
                    echo '<br>';
                    echo '<a href="logout.php">Logout</a>';
                }
                else 
                    die ('wrong password');

              ?>

3 个答案:

答案 0 :(得分:1)

Isset如果设置变量,则返回truefalse,它不会返回实际的变量数据。

在下面的代码中,我使用三元运算符返回 POSTed 值,如果值不是 POST ,则使用空字符串。

session_start();

$username = (isset($_POST['username'])) ? $_POST['username'] : '';
$password = (isset($_POST['password'])) ? $_POST['password'] : '';

if($username == "abc" && $password =="123") {
    echo 'Welcome' .$username ;
    echo '<br>';
    echo '<a href="logout.php">Logout</a>';
}
else 
    die ('wrong password');

答案 1 :(得分:1)

isset() returns a boolean value。因此,您要将$username$password变量设置为值truefalse。因此,它们永远不会等于字符串"abc""123"

单独检查isset()以检查值。它可能就像这样简单:

if (!isset($_POST['username']) || !isset($_POST['password'])) {
    die ('Please supply a username and password.');
}

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

// etc...

作为旁注,错误消息“密码错误”具有误导性。首先,它可能是用户名也是错误的。其次,永远不要向未经授权的用户提供比他们已有的更多信息。如果你告诉攻击者他们有正确的用户名并且密码错误,那么你已经给了他们登录信息。如果登录中的任何内容不匹配,只需说明登录失败。

答案 2 :(得分:0)

如果您要打印用户名以及欢迎,您应该使用以下代码更改第四行代码:

$username = isset($_POST['username']) ? $_POST['username'] : '';

OR

$username = $_POST['username'];

您现有的代码正在评估一个表达式,该表达式返回true并存储在用户名中,因此如果您使用username作为字符串,它将返回&#34; 1&#34;。