2016-02-23 4 views
1

Я следил за онлайн-учебным пособием для простого скрипта регистрации и регистрации php, но когда я пытался войти в систему, он просто провалился, вызвал мое сообщение об ошибке «Логин не удался. Попробуйте еще раз или зарегистрируйтесь». Страница регистрации работает в том смысле, что она создает новую запись в базе данных, но она не будет перенаправляться на указанную страницу перенаправления. Вот код:Ошибка входа в php pdo

class.user.php (это входит в один раз в конфигурационном файле)

<?php 

class USER { 
private $db_user; 

function __construct($db) { 
    $this->db_user = $db; 
} 

public function register($u_fname,$u_lname,$u_email,$u_tel,$uname,$upass) { 

    try { 

     $new_password = password_hash($upass, PASSWORD_DEFAULT); 

     $stmt = $this->db_user->prepare("INSERT INTO users(user,pass,first_name,last_name,telephone,email) VALUES(:user, :pass, :fname, :lname, :tel, :email)"); 

     $stmt->bindparam(":user", $uname); 
     $stmt->bindparam(":pass", $new_password); 
     $stmt->bindparam(":email", $u_email); 
     $stmt->bindparam(":fname", $u_fname); 
     $stmt->bindparam(":lname", $u_lname); 
     $stmt->bindparam(":tel", $u_tel);   
     $stmt->execute(); 

     return $stmt; 
    } catch(PDOException $e) { 
     echo $e->getMessage(); 
    } 
} 

public function login($uname, $upass) { 

    try { 

     $stmt = $this->db_user->prepare("SELECT * FROM users WHERE user=:user LIMIT 1"); 
     $stmt->execute(array(':user'=>$uname)); 
     $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 
     if($stmt->rowCount() > 0) { 
      if(password_verify($upass, $userRow['pass'])) { 
       $_SESSION['user_session'] = $userRow['id']; 
       return true; 
      } else { 
       return false; 
      } 
     } 
    } catch(PDOException $e) { 
     echo $e->getMessage(); 
    } 
} 

public function is_loggedin() { 
    if(isset($_SESSION['user_session'])) { 
     return true; 
    } 
} 

public function logout() { 
    session_destroy(); 
    unset($_SESSION['user_session']); 
    return true; 
} 
} 
?> 

login.php

<?php 
$page_title = "Love Deals Login"; 
require('inc/connect/config.php'); 
include('inc/header.php'); 

if($user->is_loggedin()!="") { 
$user->redirect('home.php'); 
} 

if(isset($_POST['login'])) { 
$uname = $_POST['txt_uname']; 
$upass = $_POST['txt_upass']; 

if($user->login($uname,$upass)) { 
    $user->redirect('home.php'); 
} else { 
    $error = "Login failed. Please try again, or register"; 
} 
} 

?> 

<div class="container" style="padding: 100px 0 0 0;"> 
<div class="form-container"> 
    <form method="post" id="login"> 
     <h3>Please login</h3> 
     <?php if(isset($error)) { 
      ?> 
      <div class="alert alert-danger"> 
       <i class="glyphicon glyphicon-warning-sign"></i> &nbsp; <?php echo $error; ?> 
      </div> 
      <?php 
     } 
     ?> 
     <div class="form-group col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3 login"> 
      <input type="text" class="form-control" name="txt_uname" placeholder="Username" required /> 
     </div> 
     <div class="form-group col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3 login"> 
      <input type="password" class="form-control" name="txt_upass" placeholder="Password" required /> 
     </div> 
     <div class="clearfix"></div> 
     <div class="form-group col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3 login"> 
      <button type="submit" name="login" class="btn btn-primary pull-right"> 
       <i class="glyphicon glyphicon-log-in"></i>&nbsp;Login</button> 
     </div> 
     <div class="col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3" style="text-align: center;"> 
      <label>Don't have an account yet? <a href="signup.php">Register now</a></label> 
     </div> 
    </form> 
</div> 
</div> 

<footer class="navbar-fixed-bottom search-footer"> 
    <div class="container"> 
     <div class="row"> 

<?php include('inc/footer.php'); ?> 

signup.php

<?php 
$page_title = "Love Deals Register"; 
require('inc/connect/config.php'); 
include('inc/header.php'); 

if($user->is_loggedin()!="") { 
$user->redirect('home.php'); 
} 

if(isset($_POST['signup'])) { 
$u_fname = trim($_POST['sign_fname']); 
$u_lname = trim($_POST['sign_lname']); 
$u_tel = trim($_POST['sign_tel']); 
$u_email = trim($_POST['sign_email']); 
$uname = trim($_POST['sign_uname']); 
$upass = trim($_POST['sign_upass']); 

if($u_fname=="") { 
    $error[] = "please provide first name"; 
} else if ($u_lname=="") { 
    $error[] = "please provide last name"; 
} else if($u_tel=="") { 
    $error[] = "please provide contact number"; 
} else if($u_email=="") { 
    $error[] = "please provide an email address"; 
} else if(!filter_var($u_email, FILTER_VALIDATE_EMAIL)) { 
    $error[] = "please provide a valid email address"; 
} else if($uname=="") { 
    $error[] = "please provide username"; 
} else if($upass=="") { 
    $error[] = "please provide password"; 
} else if(strlen($upass) < 8) { 
    $error[] = "Password must be at least 8 characters"; 
} else { 

    try { 
     $stmt = $db->prepare("SELECT user FROM users WHERE user=:uname"); 
     $stmt->execute(array(':uname'=>$uname)); 
     $row=$stmt->fetch(PDO::FETCH_ASSOC); 

     if($row['user']==$uname) { 
      $error[] = "sorry, username already taken! please choose another"; 
     } else { 
      if($user->register($u_fname,$u_lname,$u_tel,$u_email,$uname,$upass)) { 
       $user->redirect('signup.php?joined'); 
      } 
     } 
    } catch(PDOException $e) { 
     echo $e->getMessage(); 
    } 
} 
} 

?> 

<div class="container" style="padding: 100px 0 0 0;"> 
<div class="form container"> 
    <form method="post" id="signup"> 
     <h3>Register</h3> 
     <?php if(isset($error)) { 
      foreach($error as $error) { 
       ?> 
       <div class="alert alert-danger"> 
        <i class="glyphicon glyphicon-warning-sign"></i> &nbsp; <?php echo $error; ?> 
       </div> 
       <?php 
      } 
     } else if(isset($_GET['joined'])) { 
      ?> 
      <div class="alert alert-info"> 
       <i class="glyphicon glyphicon-log-in"></i> &nbsp; Thanks! You are now registered. <a href="login.php">Login</a> 
      </div> 
      <?php 
     } 
     ?> 
     <div class="form-group col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3 login"> 
      <input type="text" class="form-control" name="sign_fname" placeholder="First Name" required /> 
     </div> 
     <div class="form-group col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3 login"> 
      <input type="text" class="form-control" name="sign_lname" placeholder="Last Name" required /> 
     </div> 
     <div class="form-group col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3 login"> 
      <input type="text" class="form-control" name="sign_tel" placeholder="Contact Number" required /> 
     </div> 
     <div class="form-group col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3 login"> 
      <input type="text" class="form-control" name="sign_email" placeholder="Email" value="<?php if(isset($error)){echo $umail;}?>" required /> 
     </div> 
     <div class="form-group col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3 login"> 
      <input type="text" class="form-control" name="sign_uname" placeholder="Username" value="<?php if(isset($error)){echo $uname;}?>" required /> 
     </div> 
     <div class="form-group col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3 login"> 
      <input type="password" class="form-control" name="sign_upass" placeholder="Password" required /> 
     </div> 
     <div class="clearfix"></div> 
     <div class="form-group col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3"> 
      <button type="submit" class="btn btn-primary center-block" name="signup"> 
      <i class="glyphicon glyphicon-open-file"></i>&nbsp;Register</button> 
     </div> 
     <div class="col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3" style="text-align: center;"> 
      <label>Already have an account? <a href="login.php">Login</a></label> 
     </div> 
    </form> 
</div> 
</div> 


<footer class="navbar-fixed-bottom search-footer"> 
    <div class="container"> 
     <div class="row"> 

<?php include('inc/footer.php'); ?> 

и, наконец, home.php

<?php 
$page_title = "Love Deals User Home"; 
require('inc/connect/config.php'); 
include('inc/header.php'); 

if(!$user->is_loggedin()) { 
$user->redirect('login.php'); 
} 
$user_id = $_SESSION['user_session']; 
$stmt = $db->prepare("SELECT * FROM users WHERE id=:user_id"); 
$stmt->execute(array(":user_id"=>$user_id)); 
$userRow=$stmt->fetch(PDO::FETCH_ASSOC); 
?> 

<div class="container" style="padding: 100px 0 0 0;"> 
<h3>welcome back <?php print($userRow['user']); ?></h3> 
</div> 
<div> 
<label><a href="logout.php?logout=true"><i class="glyphicon glyphicon-log-out"> logout</a></label> 
</div> 

Я просто не могу видеть, где у меня есть пошло не так! будьте осторожны ... Я очень новичок в php.

Заранее спасибо

Кейли

+0

не исправление, но я бы предложил сохранить ключ входа в сеанс, а не идентификатор по соображениям безопасности и создать случайную соль гене и хэш-пароль с солью. – KDOT

+0

Я понимаю, что сеанс был запущен. Какова длина столбца паролей? –

+0

извинения ... я просто установил столбец пароля как varchar с макс. 25 символов ... – Kaylee

ответ

1

"я просто настроить колонки пароль в качестве VARCHAR с макс 25 символов ... - Кейли"

Там проблема. password_hash() - 60 символов. длина строки.

Ваш нынешний пароль выглядит, и в качестве примера:

$2y$10$.vGA1O9wmRjrwAVXD9

В отличие от того, что она должна выглядеть, например:

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

«Использовать bcrypt (по умолчанию от PHP 5.5.0). Обратите внимание, что эта константа предназначена для изменения со временем, поскольку новые и более сильные алгоритмы являются объявлением для PHP. По этой причине длина результата от использования этого идентификатора может меняться со временем. Поэтому рекомендуется сохранять результат в столбце базы данных, которая может расширяться за пределы 60 символов (255 символов будет хорошим выбором).»

  • Вы должны очистить свои ряды паролей, изменяют столбец длиной 60+ или, как предлагает руководство, 255 и начать с новых хешей.

Ссылка:

Plus, видя, вы используете сессии, убедитесь, что он был запущен внутри всех страниц с помощью сеансов.

Проверка на наличие ошибок

Также убедитесь, что вы не имеете переменную вопрос входит в сферу ваших функций.

Если да, подключите к ним db-соединение.


Edit:

Кажется, я что-то пропустил и ОП был добр включить его в комментарий:

«Я успешно вошли в систему (Yaaay) ... пришлось изменить $ user-> redirect() на header(), но теперь он работает! "

+1

downvoter, пожалуйста, объясните здесь? Это довольно очевидно. и позаботиться о том, чтобы поделиться с Богом данной мудростью с остальным миром? –

+0

Спасибо, я изменю это сейчас, надеюсь, это исправляет! – Kaylee

+0

@ Kaylee Добро пожаловать. –