Я следил за онлайн-учебным пособием для простого скрипта регистрации и регистрации 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> <?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> 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> <?php echo $error; ?>
</div>
<?php
}
} else if(isset($_GET['joined'])) {
?>
<div class="alert alert-info">
<i class="glyphicon glyphicon-log-in"></i> 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> 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.
Заранее спасибо
Кейли
не исправление, но я бы предложил сохранить ключ входа в сеанс, а не идентификатор по соображениям безопасности и создать случайную соль гене и хэш-пароль с солью. – KDOT
Я понимаю, что сеанс был запущен. Какова длина столбца паролей? –
извинения ... я просто установил столбец пароля как varchar с макс. 25 символов ... – Kaylee