2015-09-09 3 views
1

Вот мой index.php:Php форма Логин не работает с подключением п.д.о.

<?php 
    session_start(); 

    //DB configuration Constants 
    define('_HOST_NAME_', 'localhost'); 
    define('_USER_NAME_', 'root'); 
    define('_DB_PASSWORD', ''); 
    define('_DATABASE_NAME_', 'myblog'); 

    //PDO Database Connection 
    try { 
     $databaseConnection = new PDO('mysql:host='._HOST_NAME_.';dbname='._DATABASE_NAME_, _USER_NAME_, _DB_PASSWORD); 
     $databaseConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } catch(PDOException $e) { 
     echo 'ERROR: ' . $e->getMessage(); 
    } 

    if(isset($_POST['submit'])){ 
     $errMsg = ''; 
     //username and password sent from Form 
     $username = trim($_POST['username']); 
     $password = trim($_POST['password']); 

     if($username == '') 
      $errMsg .= 'You must enter your Username<br>'; 

     if($password == '') 
      $errMsg .= 'You must enter your Password<br>'; 


     if($errMsg == ''){ 
      $records = $databaseConnection->prepare('SELECT id,username,password FROM tbl_users WHERE username = :username'); 
      $records->bindParam(':username', $username); 
      $records->execute(); 
      $results = $records->fetch(PDO::FETCH_ASSOC); 
      if(count($results) > 0 && password_verify($password, $results['password'])){ 
       $_SESSION['username'] = $results['username']; 
       header('location:dashboard.php'); 
       exit; 
      }else{ 
       $errMsg .= 'Username and Password are not found<br>'; 
      } 
     } 
    } 

?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Login Page PHP Script</title> 
    <style type="text/css"> 
    body 
    { 
     font-family:Arial, Helvetica, sans-serif; 
     font-size:14px; 
    } 
    label 
    { 
     font-weight:bold; 
     width:100px; 
     font-size:14px; 
    } 
    .box 
    { 
     border:1px solid #006D9C; 
     margin-left:10px; 
     width:60%; 
    } 
    .submit{ 
     border:1px solid #006D9C; 
     background-color:#006D9C; 
     color:#FFFFFF; 
     float:right; 
     padding:2px; 
    } 
    </style> 
</head> 
<body bgcolor="#FFFFFF"> 

    <div align="center"> 
     <div class="tLink"><strong>Tutorial Link:</strong> <a href="http://www.stepblogging.com/get-alexa-rank-using-php/">Click Here</a></div><br /> 
     <div class="tLink"><strong>Demo Login Detail:</strong> demo/demo </div><br /> 
     <div style="width:300px; border: solid 1px #006D9C; " align="left"> 
      <?php 
       if(isset($errMsg)){ 
        echo '<div style="color:#FF0000;text-align:center;font-size:12px;">'.$errMsg.'</div>'; 
       } 
      ?> 
      <div style="background-color:#006D9C; color:#FFFFFF; padding:3px;"><b>Login</b></div> 
      <div style="margin:30px"> 
       <form action="" method="post"> 
        <label>Username :</label><input type="text" name="username" class="box"/><br /><br /> 
        <label>Password :</label><input type="password" name="password" class="box" /><br/><br /> 
        <input type="submit" name='submit' value="Submit" class='submit'/><br /> 
       </form> 
      </div> 
     </div> 
    </div> 
</body> 
</html> 

и это logout.php:

<?php 
    session_start(); 
    session_destroy(); 
    header("location:index.php"); 
    exit; 
?> 

и, наконец, dashboard.php:

?php 
    session_start(); 
    echo 'Welcome '.$_SESSION['username']; 
?> 
<br /><a href='logout.php'>Logout</a> 

, когда я ввел данные ввода и отправлю .. он показывает, что имя пользователя и пароль не найдены.

Я создал базу данных и вставить SQL запрос отлично ..

Могу ли я узнать, что такое моя ошибка?

Спасибо,

+1

Вы проверили ли 'подсчета ($ результатов)> 0 'или' password_verify ($ пароль, $ Результатов [ 'пароля']) 'условие не является выполнены? Который из них? – VolkerK

+0

Могу я узнать, как я могу проверить? спасибо .. – pcs

+0

Возможно, попробуйте удалить одно из условий ... если оно работает, то удаленное условие проблематично. – camelCase

ответ

0

Пожалуйста, попробуйте это <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post"> Я думаю, что вы пропустите этот

0

В этой строке if(count($results) > 0 && password_verify($password, $results['password'])){ вы используете password_verify

Я вижу две вещи.

Во-первых - Где ваш хэш?
Второй - сама строка неверна.

Это должно быть ... if(count($results) > 0 && password_verify($password, $hash)){

... НО перед использованием этого вы должны получить хеш для этой записи. Скорее всего, хранится в хэш-таблице, когда пользователь был создан. И определите переменную, подобную этой ... $hash = $row['hash']

Если вы не храните свои пароли, измените свой оператор sql на 'SELECT id,username,password FROM admin WHERE username=:username AND password=:password'. Затем создайте другую привязку параметра для пароля.

Примечание: надлежащее связывание должно быть сделано, как следующее:

$records->bindValue(':id', $id, PDO::PARAM_INT); // for integers 
$records->bindValue(':username', $username, PDO::PARAM_STR); // for strings and dates 

также это хорошая практика, чтобы использовать $totalRows = $records->rowCount(); непосредственно под $results = $records->fetch(PDO::FETCH_ASSOC);, чтобы получить количество строк. Вместо if(count($results) && ... это будет if($totalRows > 0 && ... Таким образом, вы определили переменную, которая может быть всегда использована в другом месте на странице, если это необходимо.

Счастливое кодирование!

Ссылки

password_verify

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