我正在尝试使用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中是否有正确的数据。 是的,我有正确的连接用户名,主机,密码和数据库名称,因为我使用相同的文件进行注册,它运行良好。
谢谢, 亨利克
答案 0 :(得分:2)
密码需要至少40个CHAR / VARCHAR字段才能使用mysql SHA功能保存。
您也可以直接在mysql编辑器中检查SELECT SHA('password')
,看看db中保存的值是否符合您的预期。