У меня есть текстовый файл с именем 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]);
}
}
?>
Вопрос: Я хочу, чтобы система определила, успешен ли процесс входа в систему или нет, и повторила его.
Хорошо, вот как бы я это сделал. Во-первых, вы должны изменить метод формы 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>
Я проверил это, и это работает. Например:
Я не знаю, почему вы сохраняете пароли таким образом (голые), но, поскольку вы уже получили разрыв в каждой строке, вы можете просто сравнить их:
if($array[0] == $mid && $array[1] == $mpassword) {
// match
} else {
// did not match
}
Sidenote: Я предлагаю хотя бы использовать функцию хеширования. Я бы рекомендовал использовать таблицы MySQL с PHP 5.5 password_hash функции или использовать сопоставление паролей для меньших версий PHP.
У вашего решения есть проблема безопасности, и его легко можно использовать, поэтому для большей безопасности при вводе данных пользователем просмотрите эту ссылку:
введите описание ссылки здесь
для сравнения пишу
foreach ($str as $value)
{
$array = (explode(",", $value));
if(trime($array[0]) == $mid && trime($array[1]) == $mpassword) {
// match
} else {
// did not match
}
}
Но не рекомендуется этот способ для системы входа в систему, если есть ограничение на использование базы данных, хотя бы используйте решения для хеширования и шифрования, такие как RSA, hash, md5 (рекомендуется: это один из способов)
<?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
}
}
}
?>