Чтение базы данных php txt

Я работаю над сеансом входа в систему на основе простого файла. Я изменяю это, чтобы требовать только MD5 пароль. Это текстовый файл, содержащий пользователей и пароли MD5,

admin:5f4dcc3b5aa765d61d8327deb882cf99
user1:7c6a180b36896a0a8c02787eeafb0e4c
user2:6cb75f652a9b52798eb6cf2201057c73

И это часть моего PHP-кода.

/* Bool validateLogin() returns TRUE if login/password are valid. Returns FALSE and sets $this->errorMessage if invalid or other error. */

function validateLogin() {

$this->errorMessage = '';
$this->processLoginInput();
if($this->parseUserFile()) {

if( md5($_POST['password']) == $this->userData['password']) {

$_SESSION['loginId'] = $_POST['password'];
return(TRUE); }

else { $this->errorMessage = "Invalid user name and/or password"; }
}
else { $this->errorMessage = "Unable to read user login data file"; }

return(FALSE);
} // end validateLogin()

/* Mixed parseUserFile(). Returns number of users in userFile, else FALSE */

function parseUserFile() {

$this->userData = array();
if(is_readable($this->userFile)) {

$lines = file($this->userFile);
foreach($lines as $line) {

$line = trim($line);
if($line == "") { continue; }
$parts = preg_split('/:/', trim($line));
if(count($parts) >= 2) {

list($user, $password) = $parts;
$this->userData['password'] = $password; } } }

return((count($this->userData)) ? count($this->userData) : FALSE );
}// end parseUserFile()

МОЯ ПРОБЛЕМА: это дает мне доступ ТОЛЬКО с последним паролем в списке TXT.
Первый и второй пароли не будут работать.

Можете ли вы заметить ошибку в коде, ребята?

0

Решение

Я не очень много знаю PHP, но проблема возникает из-за вашего кода в parseUserFile и заключается в том, что вы просматриваете содержимое файла и на каждой итерации, которую вы назначаете.

$this->userData['password'] = $password; }

Таким образом, в каждой итерации один и тот же элемент массива userData (то есть элемент с ключом «пароль») перезаписывается значением пароля в этой строке. Таким образом, после завершения цикла по всем элементам в файле, он содержит только значение последнего пароля.

Вместо этого вы должны сделать следующее:

//Pass in user name to fetch password for the user
function parseUserFile($userName) {

$this->userData = array();
if(is_readable($this->userFile)) {

$lines = file($this->userFile);
foreach($lines as $line) {

$line = trim($line);
if($line == "") { continue; }
$parts = preg_split('/:/', trim($line));
if(count($parts) >= 2) {

list($user, $password) = $parts;
//Get password for the user.
if($user == $userName)
$this->userData['password'] = $password; } } }

return((count($this->userData)) ? count($this->userData) : FALSE );
}// end parseUserFile()
1

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

Других решений пока нет …

По вопросам рекламы [email protected]