使用爆炸两次,然后将用户名与文本文件php

时间:2018-04-06 15:28:29

标签: php

我遇到了麻烦,希望你能帮助我。我在学校有一项任务,您应该创建一个登录表单,您可以登录和注册。用户名和密码保存到文本文件中(我知道你应该使用数据库,但是赋值需要textfile)。在文本文件中,用户名和散列密码保存如下:

lilly;$2y$10$wZIMr0G4efgOR0vYxlX0deBSqS8KPDqjM4DseMctvIwO43pbuY.MW
kajsa;$2y$10$m2WfOQvPkc3rqEVoAQUCZeb.uTHYMRMtnnimamxGE3..cAFrhCdNa
admin;$2y$10$qrnU4R9/r3lGUw3o/3IhT.0yoZLNUQYXsNVD.3iINvICVa58mXRYm
helga;$2y$10$uUxW/QPkPREWfcX6C2Tdhu35KHZi5vhP5ShD.wVmZSEDuz7ZxS6j6

根据该分配的指示,这是他们应该如何被保存。我遇到的问题是我需要将文件分解两次,一次是在换行符处,一次是在每个;符号处。我环顾四周,找到了一种方法,通过将第二次爆炸放在foreach..as循环中使用爆炸两次,但我不确定它是否正常工作以及何时在printr数组上使用foreach ($userlogin as $username){空出来了。我是否正确使用爆炸,如果我是,那么为什么数组是空的?如果我没有正确使用爆炸,那我该如何使用呢?

以下是代码:

<?php

    if (isset($_POST['submit2'])) {
    $anvandare = $_POST['anvandare']; //username
    $losen = $_POST['losen']; //pasword

    $hashlosen = password_hash($losen,PASSWORD_DEFAULT);

    if (empty($anvandare))
    {
        echo "Vänligen mata in användarnamn!<br>";//Enter username
    }
    if (empty($losen))
    {
        echo "Vänligen mata in lösenord!<br>"; //enter password.
    }

    if (!empty($anvandare) && !empty($losen)) //if both fields are filled in, do the following:
    {
        $openlogg1 = fopen('userlog.txt', 'a+'); //Open userlog.txt for reading and writing.
        $path1 = 'userlog.txt';

        if (file_exists($path1)) 
        {
            $userdatafile = file_get_contents($path1); //Turn file into string.
            $userdata = explode(PHP_EOL, $userdatafile);//explode file into array.

            foreach ($userdata as $userlogin){
                $userlogin = explode(';', $userlogin); //explode second time.
            }

            foreach ($userlogin as $username){//Looping through second array.
            }
            print_r($username); //print array.
                if ($username==$anvandare){ //if $username equals $anvandare echo username is occupied.
                    echo "Användarnamnet är upptaget, välj ett annat.";
                }
                else { //if they are not egual to each other write username and hashed password to userlog.txt.
                    fwrite($openlogg1, $anvandare .";".$hashlosen . PHP_EOL);
                }
            }
            fclose($openlogg1);
        }
    }

我是新手,所以对我很轻松。如果您发现任何其他错误而不是我正在谈论的错误,请告诉我!

谢谢!

1 个答案:

答案 0 :(得分:0)

您正在使用爆炸,但是您没有正确处理结果。

foreach ($userdata as $userlogin){
    $userlogin = explode(';', $userlogin); //explode second time.
}

这会覆盖每个循环的$userlogin值。

将代码更改为

foreach ($userdata as $userlogin) {
    $userlogin = explode(';', $userlogin); //explode second time.
    foreach ($userlogin as $username) {//Looping through second array.
        print_r($username); //print array.
    }
}

你应该看到一些更明智的东西。