我的网络系统有这个问题。作为管理员,我的目的是注册一些用户,给他们username
、password
、firstname
和lastname
。我正确地这样做,因为所有记录都正确插入。但是当我尝试以这些用户之一的身份访问时,我无法输入,收到消息"用户名和密码不匹配"。这是我的登录检查码:
if (isset($_POST['username']) && isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$_SESSION['username'] = $_POST['username'];
if ((!$username) || (!$password)) {
do_html_header('');
echo '<h3 style="color:#800000;">Please fill in both fields</h3><br><br></br></br>';
display_login_form();
}
else {
$sql = mysql_query('SELECT * FROM members WHERE username="'.$_POST['username'].'" AND password=sha1("'.$_POST['password'].'")') or die(mysql_error());
$login_check_member = mysql_num_rows($sql);
if($login_check_member > 0) {
while($row = mysql_fetch_array($sql)) {
$role = $row["role"];
$_SESSION['role'] = $role;
}
}
else { // Run this code if login_check is equal to 0 meaning they do not exist
do_html_header('');
echo '<h3 style="color:#800000;">The Username And Password do not match.</h3><br><br></br></br>';
display_login_form();
}
显然,我的while循环有问题。但是对于那些通过wampserver的MySql控制台插入我的数据库的用户来说,它确实可以正常工作。只有通过网站插入的用户才存在此问题。我用来插入新用户(服务器)的代码部分是:
$username = $_POST['username'];
$password = $_POST['password'];
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$role = $_POST['role'];
$conn = mysql_connect("localhost", "root", "");
$db=mysql_select_db("buzzcafe" ,$conn);
//$username= $_SESSION['username'];
if (isset($_POST['username'])) {
if (isset($_POST['password'])) {
if (isset($_POST['firstname'])) {
if (isset($_POST['lastname'])) {
if(isset($_POST['role'])) {
$insertServer = mysql_query("INSERT INTO servers (username,password,firstname,lastname,role) VALUES('".$username."',sha1('".$password."'),'".$firstname."','".$lastname."','".$role."')")or die(mysql_error());
echo "<h5 style=color:#800000><i>The server ".$username." is now registered </i></h5>";
display_manager_menu();
}
}
}
}
}
有什么想法吗?
-
查看您
INSERT
数据的表("服务器")。它不同于您从中SELECT
数据的表("成员")。 -
不要使用
mysql_query
函数,因为它已弃用。尝试改用 PDO 或 mysqli_query。 -
切勿在查询中使用未经筛选的输入。
-
尝试为您的登录/注册表单使用更安全的功能(如 bcrypt 或 password_hash)。看这里。