我的问题是,如果您将密码空间留空并键入任何用户名,例如"potato",如果密码空间为空,则登录仍然有效。代码应该被硬编码为两个用户名和密码,我想这一行有问题,但不知道是什么。
if (isset($logins[$Username]) == $Password){
这是完整的代码:
<?php
session_start(); /* Sessionen påbörjas här */
/* Submit för formuläret */
if(isset($_POST['Submit'])){
/* Tillgängliga lösenord och användarnamn */
$logins = array('Mattias' => '1','Mikael' => '2',);
/* Kolla och ge lösenord och användarnamn en ny variabel */
$Username = isset($_POST['Username']) ? $_POST['Username']:' ';
$Password = isset($_POST['Password']) ? $_POST['Password']:' ';
/* Kolla lösenord och användarnamn */
if (isset($logins[$Username]) == $Password){
/* Vid lyckat försök skicka vidare till den lösenordsskyddade sidan */
$_SESSION['UserData']['Username'] = $Username;
header("Location:../admin/index.php");
exit();
} else {
/* Meddelande för fel lösenord/användarnamn */
$felmeddelande = "<span style='color:red;'>Fel användarnamn eller lösenord</span>";
}
}
?>
现在尝试了这个,但仍然不起作用。。有什么想法吗?任何人
if($logins[$_POST['Username']] == $_POST['Password']){
有人能回答这个问题吗?急需帮助。。
它是完美的
if(isset($logins[$Username]))
{
if ($logins[$Username] == $Password){
/* Vid lyckat försök skicka vidare till den lösenordsskyddade sidan */
$_SESSION['UserData']['Username'] = $Username;
header("Location:../admin/index.php");
exit();
} else {
/* Meddelande för fel lösenord/användarnamn */
$felmeddelande = "<span style='color:red;'>Fel användarnamn eller lösenord</span>";
}
}
另一个答案中提供的代码确实有效(但并非完美,未定义的索引可能会出现,并且您的用户名不考虑大小写敏感性("Mattias"会有效,但"Mattias"不会)),但我决定发布一个答案,进一步解释为什么他的有效,而您的无效。
你的问题是这条线
if (isset($logins[$Username]) == $Password){
因为isset()
会返回一个布尔值(true/false),并且不能根据字符串检查布尔值。这里真正发生的情况是,您输入一个有效的用户名,语句将读取true == true
,返回true
。您已经指定了$logins
,因此不需要检查它是否已设置。
如果用户名与数组中提供的用户名不完全相同,您也会遇到问题(根据另一个答案和您的解决方案,它区分大小写)。
稍微修改一下,您的代码会是这样的(假设$logins
-数组中的所有名称都有小写字母,但以大写字母开头)
if (isset($_POST['Submit'])) {
/* Tillgängliga lösenord och användarnamn */
$logins = array('Mattias'=>'1', 'Mikael'=>'2');
/* Kolla och ge lösenord och användarnamn en ny variabel */
$Username = isset($_POST['Username']) ? ucfirst(strtolower($_POST['Username'])) : '';
$Password = isset($_POST['Password']) ? $_POST['Password'] : '';
/* Kolla lösenord och användarnamn */
if (isset($logins[$Username]) && $logins[$Username] == $Password) {
/* Vid lyckat försök skicka vidare till den lösenordsskyddade sidan */
$_SESSION['UserData']['Username'] = $Username;
header("Location: ../admin/index.php");
exit;
} else {
/* Meddelande för fel lösenord/användarnamn */
$felmeddelande = "<span style='color:red;'>Fel användarnamn eller lösenord</span>";
}
}
我已经测试了这段代码,它确实有效,不会产生任何错误或警告(因为我无论如何都可以测试),但如果你在实现它时遇到问题,请大声说出来,我会尽我所能提供帮助。
在false
的三元运算符中也有一个空格,这并不重要,但(在我看来)它应该只是一个空白字符串。