Пожалуйста, помогите, я попытался создать систему входа в систему. Кажется, что нет ошибки, но когда я попытался войти с использованием имени пользователя и пароля, он сказал, что это неверно. Вот код.Ошибка входа. PHP PDO
CREATE TABLE IF NOT EXISTS `login` (
`idlogin` int(2) NOT NULL,
`username` varchar(20) NOT NULL,
`password` varchar(30) NOT NULL,
`nama` varchar(20) DEFAULT NULL,
`email` varchar(30) DEFAULT NULL,
`telepon` varchar(13) DEFAULT NULL,
`level` varchar(13) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
config.php
?php
session_start();
$DB_host = "localhost";
$DB_user = "root";
$DB_pass = "pwd";
$DB_name = "dataseminar";
try
{
$DB_con = new PDO("mysql:host={$DB_host};dbname={$DB_name}",$DB_user,$DB_pass);
$DB_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
include_once 'class_user.php';
$user = new USER($DB_con);
?>
newlogin.php
<?php
require_once 'config.php';
if($user->is_loggedin()!="")
{
$user->redirect('home.php');
}
if(isset($_POST['loginsbtn']))
{
$username = $_POST['usrname'];
$password = $_POST['pass'];
if($user->login($username,$password))
{
$user->redirect('home.php');
}
else
{
$error = "Invalid username or password ";
}
}
?>
<!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>
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="menubarcss.css">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
h1{
font-family:Arial black;
text-align: center;
color:grey;
}
h3{
font-family:Arial black;
text-align: center;
color:grey;
}
</style>
<title>Login</title>
</head>
<body>
<h1>APLIKASI PENGELOLA DATA SEMINAR DAN PELATIHAN</h1>
<div class="container">
<br/><br/><br/>
<h2 align="center">Silahkan Login terlebih dahulu</h2>
<table class="table table-striped table-bordered table-condensed" align="center">
<form method="post">
<hr />
<?php
if(isset($error))
{
?>
<div class="alert alert-danger">
<i class="glyphicon glyphicon-warning-sign"></i> <?php echo $error; ?> !
</div>
<?php
}
?>
<tr>
<td>Username</td>
<td><input type="text" name="usrname" placeholder="Username" required></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="pass" placeholder="Password" required></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" class="btn btn-block btn-primary" name="loginsbtn" value="LOGIN">
<input type="reset" class="btn btn-block btn-primary" name="clearbtn" value="CLEAR">
</td>
</tr>
</form>
<label>Belum punya akun ? <a href="createlogin.php">Sign Up</a></label>
</table>
</div>
</body>
</html>
class_user.php
<?php
class USER
{
private $db;
function __construct($DB_con)
{
$this->db = $DB_con;
}
public function register($username,$password,$nama,$email,$telepon,$level)
{
try
{
$new_password = password_hash($password, PASSWORD_DEFAULT);
$stmt = $this->db->prepare("INSERT INTO LOGIN(username,password,nama,email,telepon,level)
VALUES(:username, :password, :nama, :email, :telepon, :level)");
$stmt->bindparam(":username", $username);
$stmt->bindparam(":password", $new_password);
$stmt->bindparam(":email", $email);
$stmt->bindparam(":nama", $nama);
$stmt->bindparam(":telepon", $telepon);
$stmt->bindparam(":level", $level);
$stmt->execute();
return $stmt;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
public function login($username,$password)
{
try
{
$stmt = $this->db->prepare("SELECT * FROM login WHERE username=:username LIMIT 1");
$stmt->execute(array(':username'=>$username));
$userRow=$stmt->fetch(PDO::FETCH_ASSOC);
if($stmt->rowCount() > 0)
{
if(password_verify($password, $userRow['password']))
{
$_SESSION['user_session'] = $userRow['idLogin'];
return true;
}
else
{
return false;
}
}
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
public function is_loggedin()
{
if(isset($_SESSION['user_session']))
{
return true;
}
}
public function redirect($url)
{
header("Location: $url");
}
public function logout()
{
session_destroy();
unset($_SESSION['user_session']);
return true;
}
}
?>
Это было 3 дня, так как я пытаюсь решить эту проблему. Я буду признателен за решение. Спасибо.
и как вы пробовали отладить это? У вас есть многочисленные кодеки в вашем 'login()', где он может вернуть значение null, которое вы не учитываете. –
Какая отладка вы сделали? Вызывается функция 'login'? Правильно ли генерируется SQL? Сколько строк возвращает ваш запрос?Какая часть кода не работает? – andrewsi
Спасибо. Я нашел ответ на эту проблему. Но теперь возникает новая проблема, она не будет перенаправляться на home.php. Любое предложение? –