Как перестать показывать в качестве стандартного сценария входа в PHP - PullRequest
0 голосов
/ 07 марта 2012

Я использую PHP, чтобы построить очень простой login script.Однако else из ifelse statement отображается по умолчанию еще до того, как пользователь нажал log in.Еще до того, как пользователь попытался войти, его встречают с этим:

Warning: Cannot modify header information - headers already sent by (output started at /home/madhous3/public_html/dev/admin/index.php:12) in /home/madhous3/public_html/dev/admin/login.php on line 13
Sorry, please try again.

Как мне это остановить?Однако, если пользователь вводит детали правильно, они направляются на нужную страницу.

Код

index.php

   <?php 
        include("login.php"); 
        ?>
        <h1>Admin Area Login</h1>



        <form method="post" action="login.php">
        Username<input type="text" name="username" />
        Password<input type="text" name="password" />
        <input type="submit" name="log_in" value="Log In" />

        </form>

login.php

<?php 

$username_inputted = $_POST['username'];
$password_inputted = $_POST['password'];


if($username_inputted == 'admin' && $password_inputted == 'password'){

header("location:login_success.php");


}else{
header("location:index.php");
echo "Sorry, please try again."; 
}



?>

Ответы [ 4 ]

6 голосов
/ 07 марта 2012

Попробуйте удалить include ("login.php") из index.php.

Вместо этого вы должны перенаправить обратно на index.php из вашего login.php с флагом, указывающим, что пользователь ввел неправильныйинформация (если они не смогли войти).

index.php

<?php
    if(isset($_REQUEST['fail'])) {
        echo 'Login failed.';
    }
?>
<h1>Admin Area Login</h1>
<form method="post" action="login.php">
Username<input type="text" name="username" />
Password<input type="text" name="password" />
<input type="submit" name="log_in" value="Log In" />
</form>

login.php

<?php 

$username_inputted = $_POST['username'];
$password_inputted = $_POST['password'];

if($username_inputted == 'admin' && $password_inputted == 'password'){
    header("location:login_success.php");
} else {
    header("location:index.php?fail=1");
}
?>
2 голосов
/ 07 марта 2012

ОК, так что в index.php вы включаете login.php в начале. В то время он импортирует все из login.php. Поскольку вы включаете его, скрипт будет работать.

При загрузке страницы index.php запускается скрипт на login.php. Он определяет эти переменные $ username_inputted & $ password_inputted как null, поскольку POST еще не произошло. Затем блок if проверяет, находит нулевые переменные, а затем запускается блок else, поскольку переменные не равны ожидаемой информации для входа в систему, потому что они являются нулевыми.

Поэтому эхо срабатывает и отображается на экране, прежде чем что-либо отправлено.

Решение Nav_nav должно работать хорошо, поскольку эхо «неверного входа в систему» ​​будет отображаться только в том случае, если кто-то вводит что-то в поля ввода, я просто хотел дать краткое изложение причины, по которой алгоритм запутался.

0 голосов
/ 07 марта 2012

Сначала избавьтесь от заголовка ('location: login.php').Вы не можете отправить заголовок, если вы уже начали отправлять HTML в браузер.И если бы это сработало, вы бы получили бесконечный цикл перезагрузок.

Тогда:
Вы можете проверить наличие $ _POST ['submit'] и, если оно не существует, не показывать им сообщение о повторной попытке.

0 голосов
/ 07 марта 2012

попробуйте

if (!empty($_POST['username']) && !empty($_POST['password'])) {
    //define input vars
      $username_inputted = $_POST['username'];
      $password_inputted = $_POST['password'];


      if($username_inputted == 'admin' && $password_inputted == 'password'){
        header("location:login_success.php");
      }else{

        header("location:index.php");
        echo "Sorry, please try again."; 
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...