检查用户名或电子邮件是否被占用 - PHP

use*_*199 1 php mysql forms

我正在尝试检查电子邮件或密码是否已被占用。当我输入已采取的用户名时,它会说用户名已采取,如果我输入已采取的电子邮件,它会说电子邮件已采取,但如果我输入已采取的电子邮件和用户名,它会说“好”而不是“用户名和电子邮件已采取”。有谁知道为什么它不起作用?

    $userSql = "SELECT * FROM members WHERE username='$username'";
    $emailSql = "SELECT * FROM members WHERE email='$email'";
    $result = mysql_query($userSql);
    $result2 = mysql_query($emailSql);

    $count = mysql_num_rows($result);
    $count2 = mysql_num_rows($result2);

    if (!empty($first_name) && !empty($last_name) && !empty($email) && !empty($username) && !empty($password)) {
    if ($count != 1) {
        echo "<p style=\"color: red\">Email taken, try another. You may already have an account</p>";
    }
    else if ($count2 != 1) {
        echo "<p style=\"color: red\">Username taken, try another. You may already have an account</p>";
    }
    else if ($count != 1 && $count2 != 1) {
        echo "<p style=\"color: red\">Username and email taken, try another. You may already have an account</p>";
    }
    else {
        echo "<p>Good</p>";
    }
Run Code Online (Sandbox Code Playgroud)

这真的很令人沮丧,因为我不知道为什么它不起作用。

Bra*_*rad 5

您应该做的是在数据库中设置唯一用户名和电子邮件地址的约束。然后,尝试执行插入并在失败时捕获异常。否则,您可能会遇到几乎同时发生的用户尝试同时注册的情况,并且在您的 SELECT 和 INSERT 语句之间,用户名或电子邮件地址可能被其他人使用。

ALTER TABLE `members` ADD UNIQUE INDEX `email` (`email`);
Run Code Online (Sandbox Code Playgroud)

SQL 注入也有一个非常严重的问题。切勿将数据直接连接到查询中,否则可能会导致数据与命令混淆。数据必须被转义。处理此问题的正确方法是使用PDO 提供的准备好的/参数化的查询。

  • @zerkms 你是对的,这是一个公平的说法。我正在猜测 user3504199 正在尝试做什么。 (2认同)