Я делаю сценарий входа в PHP, и почти все, кажется, работает нормально, если я создаю учетную запись, это работает, но если я пытаюсь войти с учетными данными этой учетной записи.
Я получаю предупреждение, что учетные данные неверны.
Я также сохранил пароль здесь в текстовом файле, и я согласен с вами, что это глупо, но это для школьного задания, так что это не будет иметь значения.
Лично я думаю, что что-то не так с моим сценарием входа, но я не уверен. (И потому что это для школы, мне нужно придерживаться как можно ближе к макету кода.)
Вот код:
signup.php
<?php
if (isset($_POST["submit"])) {
$username = htmlspecialchars($_POST["usrname"]);
$email = htmlspecialchars($_POST["mail"]);
$password = htmlspecialchars($_POST["pass"]);
$passwordConfirm = htmlspecialchars($_POST["passconfirm"]);
trim($username);
trim($email);
function checkUserData() {
// things to do .A
// things to do .B
// things to do .C
// check if passwords are the same #### this doesn't seem to work correct. Why not?
if ($password != $passwordConfirm) {
echo "<script>alert('passwords are not matching');
location.href='signup.html';
</script>";
return false;
}
elseif ($password == $passwordConfirm) {
return true;
}
}
if (checkUserData()) {
// saving user
$file = fopen("users.txt", "ab");
if (!$file) {
echo "Couldn't open file!";
}
$profile = $username . "*" . $password . "*" . $email . "\n";
fwrite($file, $profile, strlen($profile));
if (fclose($file)) {
echo "<script>alert('Account is created');
location.href='login.html';
</script>";
}
elseif (!fclose($file)) {
echo "Couldn't close file!";
} else {
echo "An error ocurred while creating an account, try again later.";
}
}
}
?>
login.php
<?php
$username = htmlspecialchars($_POST["usrname"]);
$password = htmlspecialchars($_POST["pass"]);
$file = fopen("users.txt", "r");
if (!$file) {
echo "Couldn't open file!";
}
while (!feof($file)) {
$account = fgets($file);
$account = explode("*", $account);
if ($account[1] == $username && $account[2] == $password) {
session_start();
$_SESSION["USER"] = $username;
$_SESSION["STATUS"] = 1;
$_SESSION["ID"] = $_COOKIE["PHPSESSID"];
echo "<script>
alert('You are now logged in as ".$_SESSION['USER'].".');
location.href='welcome.php'
</script>";
}
}
echo "<script>
alert('Username or password incorrect');
location.href='login.html'
</script>";
?>
похоже, индекс массива $ account начинается с 0.
измените свой код в файле логина в строке 13 на
if ($account[0] == $username && $account[1] == $password)
должен решить это.
Других решений пока нет …