我正在学习新的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');
?>
答案 0 :(得分:1)
Isset
如果设置变量,则返回true
或false
,它不会返回实际的变量数据。
在下面的代码中,我使用三元运算符返回 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
变量设置为值true
或false
。因此,它们永远不会等于字符串"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;。