2012-03-07 58 views
0

我正在使用PHP来构建非常基本的login script。但是,ifelse statement中的else默认显示在用户甚至单击log in之前。 用户之前甚至试图登入他们与这个招呼:如何停止显示为基本PHP登录脚本的默认设置

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."; 
} 



?> 
+0

如何在重定向后有'echo'? – PeeHaa 2012-03-07 16:23:40

+0

它从表单到登录脚本,如果用户不成功,它们将被带回登录页面(index.php)并显示回显。无论如何,这是希望。 – RSM 2012-03-07 16:25:14

+1

会发生什么是登录尝试失败登录重定向到index.php而不是登录尝试失败登录重定向到索引。''''echo“对不起,请再试一次。”' – PeeHaa 2012-03-07 16:28:02

回答

6

尝试从index.php中除去包括( “login.php中”)。

相反,您应该从login.php重定向回index.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"); 
} 
?> 
+0

辉煌。谢谢。 – RSM 2012-03-07 16:26:40

0

试试这个

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."; 
     } 
    } 
0

首先摆脱头( '位置:login.php中')。如果您已经开始向浏览器发送任何HTML,则不能发送标题。如果它确实有效,你会得到无尽的重新加载循环。

然后:
您可以检查$ _POST ['submit'],如果它不存在,那么不要向他们显示try again消息。

2

好的,在index.php中发生的一切是你在开始时包括login.php。那时它从login.php导入所有内容。既然你包含它,脚本就会运行。

在页面index.php的负载中,login.php上的脚本启动。它将变量$ username_inputted & $ password_inputted定义为null,因为POST还没有发生。然后,if块检查,找到空变量,然后else块被触发,因为变量不等于预期的登录信息,因为它们为空。

因此,回声触发并在任何东西被张贴之前显示在屏幕上。

Nav_nav的解决方案应该能够很好地工作,因为唯一一次'bad login'echo会显示出来,如果有人在输入字段中输入了某些东西,我只是想给你一个算法混乱原因的简要说明。