html — читает текстовый файл php и сравнивает его с пользовательским вводом

У меня есть текстовый файл с именем login.txt, и я хочу сравнить идентификатор и пароль с вводом пользователя с тем, который сохранен в текстовом файле. Я застрял с файлом php. Любая помощь будет оценена.

login.txt

Brian,brianpass\n
Adam,adampass\n
Bob,bobpass\n

login.htm

<html lang="en">
<head>
<title>test</title>
</head>
<body>
<h1>Login Page</h1>
<form id="regform" method="get" action="login.php">
<p>Manager ID:<input type="text" name="mid" required="required" /></p>
<p>Password:<input type="password" name="mpassword" required="required" /></p>
<input type="submit" value="Login"/>
</form>
</body>
</html>

login.php

<?php
$mid       = trim(@$_POST["mid"]);
$mpassword = trim(@$_POST["mpassword"]);

if ($mid != NULL && $mpassword != NULL)
{
$str = file("login.txt");
$newArray = array();
foreach ($str as $value)
{
$array = (explode(",", $value));
$newArray[$array[0]] =  trim($array[1]);
}
}
?>

Вопрос: Я хочу, чтобы система определила, успешен ли процесс входа в систему или нет, и повторила его.

0

Решение

Хорошо, вот как бы я это сделал. Во-первых, вы должны изменить метод формы get в post,

login.txt

Brian,brianpass
Adam,adampass
Bob,bobpass

test.phpЯ сделал это как одностраничное приложение, вы можете разделить это, если хотите, но концепция все та же

<?php

// Handle Post
if (count($_POST))
{
// Parse login.txt
$loginData = file('login.txt');
$accessData = array();
foreach ($loginData as $line) {
list($username, $password) = explode(',', $line);
$accessData[trim($username)] = trim($password);
}

// Parse form input
$mid = isset($_POST['mid']) ? $_POST['mid'] : '';
$mpassword = isset($_POST['mpassword']) ? $_POST['mpassword'] : '';

// Check input versus login.txt data
if (array_key_exists($mid, $accessData) && $mpassword == $accessData[$mid]) {
echo "Username and Password is correct";
} else {
echo "Invalid username and/or password";
}
}

?>

<html lang="en">
<head>
<title>test</title>
</head>
<body>
<h1>Login Page</h1>
<form id="regform" method="post" action="">
<p>Manager ID:<input type="text" name="mid" required="required" /></p>
<p>Password:<input type="password" name="mpassword" required="required" /></p>
<input type="submit" value="Login"/>
</form>
</body>
</html>

Я проверил это, и это работает. Например:

введите описание изображения здесь

1

Другие решения

Я не знаю, почему вы сохраняете пароли таким образом (голые), но, поскольку вы уже получили разрыв в каждой строке, вы можете просто сравнить их:

if($array[0] == $mid && $array[1] == $mpassword) {
// match
} else {
// did not match
}

Sidenote: Я предлагаю хотя бы использовать функцию хеширования. Я бы рекомендовал использовать таблицы MySQL с PHP 5.5 password_hash функции или использовать сопоставление паролей для меньших версий PHP.

2

У вашего решения есть проблема безопасности, и его легко можно использовать, поэтому для большей безопасности при вводе данных пользователем просмотрите эту ссылку:
введите описание ссылки здесь

для сравнения пишу

foreach ($str as $value)
{
$array = (explode(",", $value));

if(trime($array[0]) == $mid && trime($array[1]) == $mpassword) {
// match
} else {
// did not match
}
}

Но не рекомендуется этот способ для системы входа в систему, если есть ограничение на использование базы данных, хотя бы используйте решения для хеширования и шифрования, такие как RSA, hash, md5 (рекомендуется: это один из способов)

0

<?php
$mid = @trim($_POST["mid"]);
$mid = stripslashes($mid);
$mpassword = @trim($_POST["mpassword"]);
$mpassword = stripslashes($mpassword);
$mid_pass = $mid.",".$mpassword."\n";//remove this \n if you remove it from file

@override
if ($mid != NULL && $mpassword != NULL)
{
$lines = file($filename, FILE_IGNORE_NEW_LINES);
for($i=0;$i<count($lines);$i++){
if($mid_pass == $lines[$i]){
echo "success";//Use your code here
break;
}else{
echo "failed";//use your code here
}
}
}
?>
0
По вопросам рекламы [email protected]