我遇到了麻烦,希望你能帮助我。我在学校有一项任务,您应该创建一个登录表单,您可以登录和注册。用户名和密码保存到文本文件中(我知道你应该使用数据库,但是赋值需要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);
}
}
我是新手,所以对我很轻松。如果您发现任何其他错误而不是我正在谈论的错误,请告诉我!
谢谢!
答案 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.
}
}
你应该看到一些更明智的东西。