我有问题。我有合法用户和自然用户注册,但我需要在每个php文件中写一个验证用户名检查,我不知道如何组合两个表检查。
一个表名为users_legal,第二个表名为users_natural。在两种形式中,输入字段的名称是“用户名”。
到目前为止,我有一个检查密码的代码:
if ($password == $password_re)
{
// insert into table
$sql = $db->prepare("INSERT INTO users_legal(name, reg_number, address, phone, email, username, password) VALUES(?, ?, ?, ?, ?, ?, ?);");
$sql->bind_param("sssssss", $name, $reg_number, $address, $phone, $email, $username, $password);
$sql->execute();
$sql->close();
}
在注册表单中进行验证后,我还需要在登录页面中进行验证。我想出了如何检查是否只有一个用户使用该用户名和密码,但我不知道如何在表之间搜索它们。
login.php代码:
if($_SERVER["REQUEST_METHOD"] == "POST") {
// username and password sent from form
$myusername = mysqli_real_escape_string($db,$_POST['username']);
$mypassword = mysqli_real_escape_string($db,$_POST['password']);
$sql = "SELECT id FROM login WHERE username = '$myusername' and password = '$mypassword'";
$result = mysqli_query($db,$sql);
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
$active = $row['active'];
$_SESSION['username'] = $myusername;
$count = mysqli_num_rows($result);
if($count == 1) {
session_register("myusername");
$_SESSION['username'] = $myusername;
$_SESSION['loggedin'] = true;
header("location: www.goole.lv");
}else {
$error = "Your Login Name or Password is invalid";
}
}
还有一件事:我将我的mysql设置为utf格式,var_dump表示输入是正常的,但在mysql中,它以难以置信的形式保存,例如Ķegums或SkrÄ«velis。
Thnx对于任何例子,提示或whateva你有。
答案 0 :(得分:0)
当我找到你的时候,你有两个用户表。要验证用户是否已成功登录,请在相关数据库表中查找其登录凭据。
你要求'合并'这两个表。但我不认为这就是你想要的。您有两个单独的用户表。他们不属于彼此。如果您加入这些表,则在组合这些表时可能会使用唯一的用户ID。
你可以做的是分别检查两个表,首先是users_legal,第二个是users_natural。
您还应该考虑在数据库中使用密码哈希而不是普通密码。并使用pdo;)
祝你好运答案 1 :(得分:-1)
要解决拥有两种不同类型用户的问题,我只需将它们放在同一个表中,然后添加一个代表用户类型的值,例如0 = legal和1 = natural。这也会自动阻止两个用户共享相同的用户名。 (这只能确保数据库是否仍为空,如果不是,您最终可能会有两个具有相同名称的用户)。对于字符编码,尝试将mysql设置为utf-8(如果尚未完成)(而不仅仅是utf)。此外,您永远不应该以明文保存密码。在存储它们之前,使用php中的sha1函数将它们转换为它们的哈希值。这样,即使有人未经授权访问数据库,他们仍然不会知道密码。您还应该在散列之前将一些用户特定信息附加到密码,这样即使两个用户共享相同的密码,其哈希值也会不同。要验证它是否正确,您只需将相同的过程应用于输入,然后再将其与存储的哈希值进行比较。