检查两个表之间是否没有使用用户名

时间:2018-03-15 20:29:34

标签: php mysql

我有问题。我有合法用户和自然用户注册,但我需要在每个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你有。

2 个答案:

答案 0 :(得分:0)

当我找到你的时候,你有两个用户表。要验证用户是否已成功登录,请在相关数据库表中查找其登录凭据。

你要求'合并'这两个表。但我不认为这就是你想要的。您有两个单独的用户表。他们不属于彼此。如果您加入这些表,则在组合这些表时可能会使用唯一的用户ID。

你可以做的是分别检查两个表,首先是users_legal,第二个是users_natural。

您还应该考虑在数据库中使用密码哈希而不是普通密码。并使用pdo;)

祝你好运

答案 1 :(得分:-1)

要解决拥有两种不同类型用户的问题,我只需将它们放在同一个表中,然后添加一个代表用户类型的值,例如0 = legal和1 = natural。这也会自动阻止两个用户共享相同的用户名。 (这只能确保数据库是否仍为空,如果不是,您最终可能会有两个具有相同名称的用户)。对于字符编码,尝试将mysql设置为utf-8(如果尚未完成)(而不仅仅是utf)。此外,您永远不应该以明文保存密码。在存储它们之前,使用php中的sha1函数将它们转换为它们的哈希值。这样,即使有人未经授权访问数据库,他们仍然不会知道密码。您还应该在散列之前将一些用户特定信息附加到密码,这样即使两个用户共享相同的密码,其哈希值也会不同。要验证它是否正确,您只需将相同的过程应用于输入,然后再将其与存储的哈希值进行比较。