#php #xml #forms #login
#php #xml #формы #аутентификация
Вопрос:
Я пытаюсь создать форму входа в систему с помощью XML и PHP, но всегда получаю сообщение об ошибке. Мой HTML-файл:
<form action="login.php" method="post">
<input type="text" name="username" />
<br>
<br>
<input type="password" name="pass" />
<br>
<br>
<input type="submit" value="Login!" />
</form>
И мой PHP-файл:
<?php
$xml = simplexml_load_file('users.xml');
$usr = $_POST['username'];
$pass = $_POST['pass'];
if(empty($usr)) {
die('Please enter an username!');
} elseif(empty($pass)) {
die('Please enter a password!');
}
$l_usr = null;
$pass_e = md5($pass);
foreach($xml->user->username as $username) {
if($username == $usr) {
$l_usr = $username;
}
}
if(empty($l_usr)) {
die('User Not Found!');
}
if(!$xml->user->$l_usr->password == $pass_e) {
die('Wrong Password!!');
}
echo 'Hello, '.$l_usr;
Это мои коды. Это не работает. И users.xml файл выглядит следующим образом:
<users>
<user>
<username>doruk.ayar</username>
<password>96b9c62c86f35c209c5b8c302ba34175</password>
</user>
<user>
<username>mina.alpturer</username>
<password>32250170a0dca92d53ec9624f336ca24</password>
</user>
<user>
<username>efe.gormus</username>
<password>32250170a0dca92d53ec9624f336ca24</password>
</user>
</users>
Это не работает. Когда я ввожу правильное имя пользователя и правильный пароль, появляется сообщение «Пользователь не найден!». Кто-нибудь может мне помочь?
ПРИМЕЧАНИЕ: Проходы:
doruk.ayar: 123pass
efe.gormus: pass123
mina.alpturer: pass123
Комментарии:
1. по какой-либо (особой) причине вы не используете базу данных? это также намного меньше работы, чем текстовые файлы, и более безопасно.
2. Вы также не должны использовать MD5, вы вообще не должны использовать этот код, если он запущен или уже запущен. Вы будете взломаны.
3. Не игнорируйте мои комментарии, еще раз… вас взломают , а потом вы вернетесь к нам со слезами на глазах и скажете: «Мой сайт взломали, что мне делать??!!»
4. кажется, вы отвечаете только на ответы ниже. Посмотрите на другой, это тот, который работает. Тогда ответьте ему и удачи в возвращении вашего сайта, когда он будет взломан. Я ухожу отсюда.
Ответ №1:
Я отладил ваш код, и пользователь найден правильно, но я заметил другую ошибку в приведенной ниже части вашего кода
if(!$xml->user->$l_usr->password == $pass_e)
Это всегда возвращает значение NULL и оператор «!» здесь бесполезен
$xml->user->$l_usr->password
Я исправил это, написав более эффективный и корректный код
<?php
$xml = simplexml_load_file('users.xml');
$usr = $_POST['username'];
$pass = $_POST['pass'];
if(empty($usr)) {
die('Please enter an username!');
} elseif(empty($pass)) {
die('Please enter a password!');
}
$pass_e = md5($_POST['pass']);
$valid=false;
foreach($xml->user as $userNode)
{
if($userNode->username==$usr amp;amp; $userNode->password==$pass_e)
{
$valid=true;
break;
}
}
if($valid==false)
{
die('Wrong password or username');
}
echo 'Hello, '.$usr;
Ответ №2:
у вас ошибка в теге XML-файла.вы пропустили закрывающий тег </users>
xml
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user>
<username>doruk.ayar</username>
<password>96b9c62c86f35c209c5b8c302ba34175</password>
</user>
<user>
<username>mina.alpturer</username>
<password>32250170a0dca92d53ec9624f336ca24</password>
</user>
<user>
<username>efe.gormus</username>
<password>32250170a0dca92d53ec9624f336ca24</password>
</user>
</users>
Обновлено
<?php
$xml = simplexml_load_file('users.xml');
echo "<pre>";
print_r($xml);
$usr = $_POST['username'];
$pass = $_POST['pass'];
$pass_e = md5($pass);
foreach($xml->user as $username) {
if($username->username == $usr amp;amp; $username->password==$pass_e) {
echo "user found";
break;
} else{
echo 'user not found';
}
}
?>
Комментарии:
1. Говорится, что пользователь не найден, но на самом деле я пишу правильное имя пользователя и правильный проход