Я пытаюсь создать систему входа в систему, используя php, mysql, но даже если я введу правильную комбинацию имени пользователя и пароля, сайт скажет, что они недействительны.
В чем проблема?
Мой код:
<?php
session_start();
$error_msg = "";
if (!isset($_SESSION['user_id'])) {
if (isset($_POST['submit'])) {
require_once('config.php');
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$user_username = mysqli_real_escape_string($dbc, trim($_POST['username']));
$user_password = mysqli_real_escape_string($dbc, trim($_POST['password']));
if (!empty($user_username) && !empty($user_password)) {
$query = "SELECT user_id, username FROM users WHERE username = '$user_username' AND password = SHA('$user_password')";
$data = mysqli_query($dbc, $query);
if (mysqli_num_rows($data) == 1) {
$row = mysqli_fetch_array($data);
$_SESSION['user_id'] = $row['user_id'];
$_SESSION['username'] = $row['username'];
setcookie('user_id', $row['user_id'], time() + (60 * 60 * 24 * 30)); // expires in 30 days
setcookie('username', $row['username'], time() + (60 * 60 * 24 * 30)); // expires in 30 days
$home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/loggedin.php';
header('Location: ' . $home_url);
}
else {
$error_msg = 'Invalid username and/or password.';
}
}
else {
$error_msg = 'No empty fields allowed!';
}
}
}
echo '<a href="register.php">Click to register</a>';
?>
<HTML>
<BODY>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<?php
if (empty($_SESSION['user_id'])) {
echo '<p>' . $error_msg . '</p>';
?>
<fieldset>
<legend>Login</legend>
<label for="username"><font color="black">Username:</font></label>
<input type="text" name="username" value="<?php if (!empty($user_username)) echo $user_username; ?>" /><br />
<label for="password"><font color="black">Password:</font></label>
<input type="password" name="password" /><br />
</fieldset>
<input type="submit" value="Login" name="submit" />
</form><?php
}
else {
// Successful
echo('');
}
?>
</BODY>
</HTML>
Вы можете спросить, есть ли у меня правильные данные в config.php.
Да, у меня есть правильное имя пользователя для подключения, имя хоста, пароль и имя базы данных, потому что я использую тот же файл для регистрации, и он работает отлично.
Спасибо,
Хенрик
Вам понадобится как минимум 40 полей CHAR / VARCHAR для пароля, чтобы сохранить его с помощью функции mysql SHA.
Также вы можете проверить SELECT SHA('password')
прямо в редакторе MySQL, чтобы увидеть, является ли сохраненное значение в БД, что вы ожидаете.
Других решений пока нет …