【发布时间】:2014-10-25 12:49:59
【问题描述】:
我正在尝试使用 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 中是否有正确的数据。 是的,我有正确的连接用户名、主机名、密码和数据库名,因为我使用相同的文件进行注册,而且效果很好。
谢谢, 亨里克
【问题讨论】:
-
尝试
echo $query;并直接在phpMyAdmin或mysql中运行该打印查询,看看它是否按应有的方式返回用户。 -
注册时如何将密码保存到数据库中?数据库字段的大小是否足够?在您的查询中,您使用 MySQL 的 SHA 函数。
-
registration: $query = "INSERT INTO users (username, password, email, activation, ip) VALUES ('$username', SHA('$password'), '$email', '$激活', '$ip')"; mysqli_query($dbc, $query);
-
mysql中的
password字段类型和长度是什么? -
我尝试在 phpMyAdmin 中运行查询它返回 0。