код работает, чтобы сопоставить имя пользователя с паролем, и если оба корректно перенаправляют на другую страницу, но это и операторы else выполняются
Код:
if (isset($_POST['Login'])) {
$IncorrectDetails = 0;
$Username=$_REQUEST['Username'];
$Password=$_REQUEST['Password'];
echo "<p> $Username $Password</p>";
$myfile = fopen("bin\Account Details.txt", "r") or die("Unable to open file!");
//reads raw file
$string = fread($myfile,filesize("bin\Account Details.txt"));
//turns the string to array
$a = explode(',', $string);
foreach ($a as $result) {
$b = explode('. ', $result);
$AccountDetails[trim($b[0])] = trim($b[1]);
}
//closes file
fclose($myfile);
print_r($AccountDetails);
foreach ($AccountDetails as $StoredUsername => $StoredPassword) {
if ($StoredUsername == $Username){
if ($StoredPassword == $Password) {
header('Location: Main.php');
}
else {
$IncorrectDetails = 1;
}
}
else {
$IncorrectDetails = 1;
}
}
if ($IncorrectDetails == 1){
echo "<script type='text/javascript'>alert('Incorrect login details');</script>";
}
}
ожидается появление всплывающего окна при неправильном и перенаправление при правильном
Я бы не стал использовать текстовый файл для хранения учетных данных пользователя — использование чего-то вроде базы данных дает вам гораздо больше гибкости. Кроме того, хеширование паролей также является хорошей идеей.
В дополнение к комментарию @VincentDecaux вам необходимо удалить выходные данные, чтобы выполнить перенаправление заголовка (например, эхо и print_r).
Это потому, что перенаправление не мгновенное, php-код все еще обрабатывается.
Итак, сразу после header('Location: Main.php');
сделайте exit;
чтобы остановить весь ваш скрипт в этой точке, и пусть работает перенаправление.
header('Location: Main.php');
exit;
Кроме того, вы не должны ничего печатать перед инструкцией header() (уберите print_r()).
if (isset($_POST['Login'])) {
$IncorrectDetails = 0;
$Username=$_REQUEST['Username'];
$Password=$_REQUEST['Password'];
echo "<p> $Username $Password</p>";
$myfile = fopen("bin\Account Details.txt", "r") or die("Unable to open file!");
//reads raw file
$string = fread($myfile,filesize("bin\Account Details.txt"));
//turns the string to array
$a = explode(',', $string);
foreach ($a as $result) {
$b = explode('. ', $result);
$AccountDetails[trim($b[0])] = trim($b[1]);
}
//closes file
fclose($myfile);
foreach ($AccountDetails as $StoredUsername => $StoredPassword) {
if ($StoredUsername == $Username && $StoredPassword == $Password){
$CorrectDetails = 1;
} else {
$IncorrectDetails = 1;
}
}
if (isset($CorrectDetails) && $CorrectDetails == 1){
header('Location: Main.php');
}else ($IncorrectDetails == 1){
echo "<script type='text/javascript'>alert('Incorrect login details');</script>";
}
}
Вы перенаправляетесь на другую страницу, это неправильный способ, вместо этого вы можете использовать переменную так же, как вы использовали в else, и вне цикла, который вы можете перенаправить на другую страницу.
Вы должны завершить свой код после перенаправления, поэтому поставьте
exit();
послеheader( ... )
. Подробнее здесь: stackoverflow.com/questions/3553698/…