#php #authentication
#php #аутентификация
Вопрос:
Я пытаюсь реализовать скрипт входа в PHP, который работает с 3 файлами PHP. Скрипты отлично работают при использовании правильных имен пользователей и паролей, и скрипт даже блокирует доступ, когда предоставляется неправильная информация. Моя проблема в том, что скрипт разрешает доступ, когда вы нажимаете кнопку отправки в форме и не вводите имя пользователя или пароль.
Первый сценарий выглядит следующим образом:
<form action="login2.php" method="post">
Usuario:<br />
<input type="text" name="username" class="formtext" />
Contraseña:<br />
<input type="password" name="password" class="formtext" />
<input type="submit" value="Ingresar" class="formbutton" />
</form>
Как вы можете видеть, форма обращается к «login2.php » который звучит примерно так:
<?php
$usernames = array("user1", "user2", "user3", "superman");
$passwords = array("test", "pass2", "password3", "supermans password");
$page = "noticias.php";
for($i=0;$i<count($usernames);$i ){
$logindata[$usernames[$i]]=$passwords[$i];
}
if($logindata[$_POST["username"]]==$_POST["password"]){
session_start();
$_SESSION["username"]=$_POST["username"];
header('Location: '.$page);
exit;
}else{
header('Location: login.php?wrong=1');
exit;
}
?>
Наконец, на странице, к которой я пытаюсь ограничить доступ, вверху добавлен следующий код, чтобы убедиться, что пользователь вошел в систему:
<?php require("login3.php"); ?>
И «login3.php » имеет следующий код:
<?php
session_start();
if(!isset($_SESSION['username'])){
header('Location: login.php');
exit;
}
?>
Если кто-нибудь может мне помочь с этим, так как я получил эти скрипты из онлайн-учебника и мало что знаю о PHP, и мне действительно нужно знать, почему доступ разрешен с пустыми именами пользователей и паролями.
Комментарии:
1. Cmon son
if($logindata[$_POST["username"]]==$_POST["password"]){
2. Вам следует более тщательно выбирать онлайн-уроки, которые вы принимаете.
Ответ №1:
if($logindata[$_POST["username"]]==$_POST["password"])
Если $logindata[$_POST["username"]]
or в этом случае $logindata['']
не определено, то PHP выдает ошибку уведомления и возвращает NULL или что-то пустое, которое вы затем сравниваете с $_POST['password']
которым также '' (or empty)
и (empty == empty)
возвращает true , с ошибкой уведомления, конечно.
Вам просто нужно добавить проверку, чтобы убедиться, что имя пользователя также существует, например:
if(isset($logindata[$_POST["username"]]) amp;amp; $logindata[$_POST["username"]]==$_POST["password"])
Комментарии:
1. Спасибо за прямой ответ!
Ответ №2:
Ваша проблема в том, что if $_POST['username']
пусто, и вы используете его в качестве ссылки на ключ массива, PHP
будет обрабатывать это значение null как VALID undefined
ссылку на массив, поэтому ваша проверка пароля сводится к:
if ($loginData[null] == null)
который становится
if (null == null)
и пользователь уходит.
Ответ №3:
Возможно, вы захотите попробовать что-то вроде
if($username amp;amp; $password);
[
//info is provided
]
else
[
echo "You did not provide the proper information needed for login.";