2012-03-07 6 views
0

私はPHPを使って非常に基本的なものを構築していますlogin script。ただし、ifelse statementelseは、ユーザーが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

+0

フォームからログインスクリプトに移動し、ユーザーが不成功であればログインページ(index.php)に戻り、エコーが表示されます。とにかくそれは希望でした。 – RSM

+1

'login attempt' - >' failed login' - > 'index.php'にリダイレクトされ、' login attempt' - > 'failed login' - >'インデックスにリダイレクトされます。php' - > 'echo"申し訳ありません、もう一度やり直してください。 " – PeeHaa

答えて

6

のindex.phpから( "login.php")などが削除してください。

代わりに、ユーザが間違った情報を入力したことを示すフラグ(ログインに失敗した場合)を指定してlogin.phpからindex.phpにリダイレクトする必要があります。 ( ':login.php場所')

index.phpの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

0

<?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> 

この

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

まず、ヘッダを取り除くしてみてください。すでにHTMLをブラウザに送信し始めている場合、ヘッダーを送信することはできません。それがうまくいけば、リロードの無限ループが起こります。

次に:
$ _POST ['submit']を確認して、存在しない場合は再試行メッセージを表示しないでください。

2

でも、index.phpにはlogin.phpが含まれています。その時、login.phpからすべてをインポートします。あなたがそれを含めているので、スクリプトは実行されます。

ページindex.phpの読み込み時に、login.phpのスクリプトが開始されます。 POSTがまだ行われていないので、変数$ username_inputted & $ password_inputtedをnullとして定義します。次に、ifブロックがヌル変数を検索し、elseブロックが発生します。これは、変数がnullであるため、変数が予想されるログイン情報と等しくないためです。

したがって、何かがPOSTされる前にエコーが発生し、画面にエコーが表示されます。

Nav_navのソリューションはうまくいくはずです。「悪いログイン」エコーが表示されるのは、誰かが入力フィールドに何かを入力した場合だけです。私はちょうどアルゴリズムの理由を説明したいと思っています。

関連する問題