【问题标题】:Finding Existing Email and username in database在数据库中查找现有的电子邮件和用户名
【发布时间】:2016-11-25 13:30:52
【问题描述】:

当其他用户正在注册时,我如何检查 电子邮件或用户名 是否已存在于我的 mysql 数据库 中,以便我可以停止 注册 过程并可能为新用户建议另一个数据库中不存在的 2/3 新用户名。

所以我尝试解决,我只能得到一个检查电子邮件是否已存在于数据库中的那个,同时我需要一个同时检查数据库中的 用户名和电子邮件 并打印两个 >$error 分开。我的意思是如果电子邮件存在而用户名不存在,它只会打印错误电子邮件并且用户名相同。

希望有人能理解我。

    <?php
if(isset($_POST['register'])) {
  $username = $_POST['username'];
  $full_name = ucwords($_POST['full_name']);
  $email = $_POST['email'];
  $password = trim($_POST['password']);
  $time = time();
  $age = $_POST['age'];
  $gender = $_POST['gender'];

  // Geolocation
  $longitude = $_SESSION['longitude'];
  $latitude = $_SESSION['latitude'];

  $geo_info = $geo->getInfo($latitude,$longitude);
  $city = $geo_info['geonames'][0]['name'];
  $country = $geo_info['geonames'][0]['countryName'];

  $check_d = $db->query("SELECT username, email from users WHERE username = '$username' OR email = '$email'");
  $check_d = $check_d->num_rows;
  if($check_d == 0) {
    $db->query("INSERT INTO users (profile_picture,username,full_name,email,password,registered,credits,age,gender,ip,country,city,longitude,latitude) VALUES ('default_avatar.png','$username','$full_name','$email','".$auth->hashPassword($password)."','$time','100','$age','$gender','$ip','".$country."','".$city."','".$longitude."','".$latitude."')");
    setcookie('justRegistered', 'true', time()+6);
    setcookie('mm-email',$email,time()+60*60*24*30,'/');
    header('Location: '.$domain.'/people');
}
else { $error = 'Username or password already exist, Try Another';

  }
  }
if($auth->isLogged()) {
  $first_name = $system->getFirstName($_SESSION['full_name']);
  $logged_in_user = header('Location: '.$domain.'/people');
}

$users = $db->query("SELECT * FROM users ORDER BY RAND() LIMIT 7");

?>

【问题讨论】:

    标签: php mysql database email


    【解决方案1】:

    您可以通过在单独的查询中检查用户名和电子邮件来做到这一点。

    在我发布的实现中,我首先检查邮件,然后检查数据库中的用户名。如果两者都已经在数据库中,则稍后的错误消息(用于用户名)将覆盖电子邮件的消息。您应该更改它,以便为用户提供有关无法将数据集插入到表中的更准确的反馈。

    在进行任何检查之前,我正在初始化变量$error AS null,因为如果其中一个约束检查失败,它会被覆盖,我可以简单地检查它是否在检查后仍然为空来决定insert 是否应该被执行。

    注意:您不应使用此脚本,因为它很容易受到 sql 注入的攻击。请参阅此主题以了解您应该更改的内容:How can I prevent SQL injection in PHP?

    $error = null;
    $check_mail = $db->query("SELECT id FROM users WHERE email='" . $email . "'");
    if ($check_mail->num_rows > 0) {
        $error = 'Email already exists';
    }
    $check_username = $db->query("SELECT id FROM users WHERE username='" . $username . "'");
    if ($check_username->num_rows > 0) {
        $error = 'username already exists';
    }
    if($error === null){
        $db->query("INSERT INTO users (profile_picture,full_name,email,password,registered,credits,age,gender,ip,country,city,longitude,latitude) VALUES ('default_avatar.png','$full_name','$email','" . $auth->hashPassword($password) . "','$time','100','$age','$gender','$ip','" . $country . "','" . $city . "','" . $longitude . "','" . $latitude . "')");
        setcookie('justRegistered', 'true', time() + 6);
        setcookie('mm-email', $email, time() + 60 * 60 * 24 * 30, '/');
        header('Location: ' . $domain . '/people');
    }
    

    【讨论】:

    • 本网站不是免费的编码服务。这个 sn-p 向您展示了如何做您想做的事情。不过,如果您给我一条错误消息或描述它是如何不起作用的,我可以帮助您调试它。
    • 没有错误,重复的用户详细信息被写入数据库
    • 您能否编辑您的问题并添加您当前使用的代码?
    • 我已将代码更新为我当前使用的新代码,它同时搜索用户名和密码,但我想单独打印错误
    • 好吧,我需要看看你是如何实现我的 sn-p 来找到错误的
    【解决方案2】:

    通常,您希望在数据库级别处理此类约束。使用 MySQL,您可以将 unique 索引添加到用户名和电子邮件列。输入重复项时,查询将失败。

    然后您可以检查是否发生重复并相应地处理它。

    try {
    
       // Attempt to insert user here
    
    } catch (Exception $e) {
    
       // It failed! Check if username/email exists so we can confirm the exception is this
       // The following is pseudocode -- you will need to write your own
       if (username_exists() || email_exists() {
    
          // Generate alternative names
          $names = generateNames($username);
    
          // Send this to your view or however you are displaying info
          echo("Name is taken!<br>You can try one of these:<br>");
          echo("<ul>");
    
          foreach ($names as $name) {
             echo("<li>$name</li>");
          }
    
          echo("</ul>");
    
       }
    }
    

    【讨论】:

    • 请你告诉我如何让这对我来说更容易,我还是 php 的新手
    猜你喜欢
    • 2013-11-01
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 2019-12-24
    • 2019-03-25
    • 1970-01-01
    相关资源
    最近更新 更多