用PHP登录

时间:2018-04-02 11:29:11

标签: php arrays foreach

我尝试使用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>

3 个答案:

答案 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";
}
}


?>