2016-04-05 5 views
-2

このPHPスクリプトを実行すると、下部に「0」というエラーが表示されます。正しい名前とパスワードを入力すると、正しいページに移動します。同様に、間違ったユーザーとパスワードを入力すると、正しいメッセージが表示されます。それはなぜ最初の '0'ですか?PHPパスワードフォーム

<!DOCTYPE html> 
<html lang = "en"> 
    <head> 
     <meta charset ="utf-8"> 
      <title>Login page</title> 
    </head> 
    <body> 
    <h1>Log in to our Website here:</h1> 

    <?php 
    $self = htmlentities($_SERVER['PHP_SELF']); 
    $creds = array(
       array('username' => 'Bob', 
         'password' => 'bill'), 
       array('username' => 'mary', 
         'password' => 'jane') 
       ); 
    $match = false; 
    $errors = $username = $password = 0; 
    if (isset($_POST['username']) && isset($_POST['password'])) { 
     $details_entered = true; 
     $username = trim($_POST['username']); 
     $password = trim($_POST['password']); 
      for ($i=0; $i<count($creds); $i++) { 
       if(strcmp($username, $creds[$i]['username']) ==0) { 
        if(strcmp($password, $creds[$i]['password']) ==0) { 
       session_start(); 
       $_SESSION['authenticated'] = true; 
       $_SESSION['username'] = $creds[$i]['username']; 
       $match = true; 
      } 
     } else { 
      $errors = "***Either your username or password are not correct***"; 
     } 
    } 
} 

if($match) { 
    header ('location: login.php'); 
} 
?> 

     <form id = "login" action ="<?php echo $self; ?>" method ="post"> 
     <fieldset> 

     <p> 
     <label for ="username">*UserName:</label> 
     <input type ="text" name ="username" id ="username" maxlength ="50" placeholder ="Username"/> 
     </p> 

     <p> 
     <label for = "password">*Password:</label> 
     <input type ="password" name ="password" id="password" maxlength ="50" placeholder ="Password"/> 
     </p><span><?php echo $errors; ?></span> 

     <p> 
     <input type ="submit" name ="Login" value ="Login"/> 
     </p> 

     <p> 
     <a href = "register.html">Or register with us here:</a> 
     </p> 

     </fieldset> 
     </form> 
    </body> 
</html> 
+2

パスワードのセキュリティを処理するには、PHPの[組み込み関数](http://jayblanchard.net/proper_password_hashing_with_PHP.html)を使用してください。 5.5より小さいPHPバージョンを使用している場合、 'password_hash()' [互換パック](https://github.com/ircmaxell/password_compat)を使用することができます。 –

+4

'' $ errors = $ username = $ password = 0; 'のために最初の' 0 'が存在するのはなぜですか? –

+0

@Lashaneは指摘するように、初期ページの読み込み時にフォームの提出をチェックしていません。期待していない出力が得られます。 –

答えて

0

$errors = $username = $password = 0;に変更してください。$errors = $username = $password = "";これで問題は解決します。

+0

*本当に問題を解決するのは、フォーム提出をチェックすることです。その他いくつかのもの。 –

+0

@ jay-blanchardでは、このコードには多くの問題がありますが、これはこの質問のテーマではありません。 –

+0

この回答があなたの問題を解決した場合は、回答を良好とマークしてください。私の英語はすみません – Naumov

0

$ errors変数に初期値 '0'を指定しました。それは必要ではなく、それが問題の原因です。