2016-04-05 3 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). Если вы используете версию PHP менее 5.5, вы можете использовать 'password_hash()' [пакет совместимости] (https://github.com/ircmaxell/password_compat). –

+4

'Почему есть начальный '0'?' Потому что '$ errors = $ username = $ password = 0;' –

+0

Как указывает @Lashane, вы не проверяете отправку формы на загрузку начальной страницы, поэтому вы получаете результат, которого вы не ожидаете. –

ответ

0

Попробуйте изменить $errors = $username = $password = 0; на $errors = $username = $password = ""; Это должно устранить проблему.

+0

Что бы на самом деле устранить проблему - проверка отправки формы. И еще кое-что. –

+0

@ jay-blanchard, этот код имеет много проблем, но это не тема этого вопроса. –

+0

Если этот ответ исправит вас, пожалуйста, отметьте ответ как хороший. Извините за мой английский – Naumov

0

Вы указали переменную $ errors с начальным значением '0'. Это не обязательно, и это то, что вызывает проблему.

Смежные вопросы