我尝试使用PHP创建一个基本的登录屏幕但是当我想用foreach循环检查密码时,它不会工作。我创建了一个数组来保存一些用户名和密码,并希望使用foreach循环进行检查,如果您已登录,则应该收到一条消息,告诉您是否已登录。 我认为不起作用的部分是foreach循环,但在我看来,它应该有效。
我希望有人可以帮我解决这个问题。已经感谢你的时间了。 PHP:
//message variable aanmaken
$message = "";
$succes = false;
// "Database" met usernames en wachtwoorden
$Data["Matthijs123"] = "ikwilbinnen";
$Data["MatthijsHulshof"] = "Eindopdracht123";
$Data["Login"] = "Password";
$Data["123"] = "456";
/*$Data[""] = "";
$Data[""] = "";
$Data[""] = "";
$Data[""] = "";
$Data[""] = "";
$Data[""] = "";
*/
// Check of $_POST minimaal 1 item heeft
if(count($_POST) >= 1)
{
$username = $_POST["username"];
$password = $_POST["password"];
// Checken of de opgegeven username en wachtwoord in de $data array zit
foreach($Data as $index => $value)
{
if($username == $index && $password == $value)
{
//Wachtwoord en username combinatie gevonden!
$succes = true;
}
else
{
$succes = false;
}
}
if($succes == true)
{
$message = "U bent ingelogd";
}
else
{
$message = "U wachtwoord en / of gebruikersnaam is fout";
}
}
?>
HTML:
<form action="Login.php" method="post">
<table id="login">
<tr>
<th colspan="2">Bergheen</th>
</tr>
<tr>
<td colspan="2">Login om adresgegevens + openingstijden te zien.</td>
</tr>
<tr>
<td></td>
<td><?php echo $message; ?></td>
</tr>
<tr>
<td>Username:</td>
<td><input name="Username" type="text" placeholder="Username"></td>
</tr>
<tr>
<td>Password:</td>
<td><input name="Password" type="password" placeholder="Password"></td>
</tr>
<tr>
<td></td>
<td><button>Login</button></td>
</tr>
</table>
</form>
答案 0 :(得分:2)
发生的事情是,它一直在通过阵列比较用户名和密码。这意味着它只对最后一个条目是正确的。你应该做的是找到用户后,退出循环(使用break;
)...
// Checken of de opgegeven username en wachtwoord in de $data array zit
$succes = false;
foreach($Data as $index => $value)
{
if($username == $index && $password == $value)
{
//Wachtwoord en username combinatie gevonden!
$succes = true;
break;
}
}
此代码仅在开始时设置$success=false
,因此不会出现同样的问题,但“break”仍然会停止比较已找到匹配项的值。
答案 1 :(得分:0)
$ _POST []内传递的变量也存在问题。在html中,您使用首字母大写字母命名为用户名&amp; 密码即可。但在$ _POST中输错了。请检查。
$username = $_POST["username"];
$password = $_POST["password"];
这应该是
$username = $_POST["Username"];
$password = $_POST["Password"];
此外,您还需要在foreach中包含break。
答案 2 :(得分:0)
您的代码正常运行,但有两个错误,因为您必须使用$ _POST作为$ _POST ['Username']而不是$ _POST ['username'],而且密码也一样。因为您已在表单中定义输入的名称。 要检查您获得的$ _POST值,可以在页面上使用print_r($ _ POST)。 如果登录已完成,您需要提醒,因此请使用某些html或javascript代码打印或提醒您的消息变量。
这是一个警告成功的代码
<?php
//message variable aanmaken
$message = "";
$succes = false;
// "Database" met usernames en wachtwoorden
$Data["Matthijs123"] = "ikwilbinnen";
$Data["MatthijsHulshof"] = "Eindopdracht123";
$Data["Login"] = "Password";
$Data["123"] = "456";
/*$Data[""] = "";
$Data[""] = "";
$Data[""] = "";
$Data[""] = "";
$Data[""] = "";
$Data[""] = "";
*/
// Check of $_POST minimaal 1 item heeft
if(count($_POST) >= 1)
{
$username = @$_POST["Username"];
$password = @$_POST["Password"];
// Checken of de opgegeven username en wachtwoord in de $data array zit
foreach($Data as $index => $value)
{
echo "<br>".$index;
echo "<br>".$value;
if($username == $index && $password == $value)
{
//Wachtwoord en username combinatie gevonden!
$succes = true;
echo "<script>window.alert('success');</script>";
}
else
{
$succes = false;
}
}
if($succes == true)
{
$message = "U bent ingelogd";
}
else
{
$message = "U wachtwoord en / of gebruikersnaam is fout";
}
}
?>