检查是否使用了用户名或电子邮件 - PHP

时间:2014-04-30 20:59:34

标签: 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>";
    }

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

1 个答案:

答案 0 :(得分:4)

你应该做的是set a constraint in your database for unique usernames and e-mail addresses。然后,尝试执行插入并在失败时捕获异常。否则,您可能会遇到几乎同时用户尝试同时注册的情况,而在SELECT和INSERT语句之间,其他人可能会使用用户名或电子邮件地址。

ALTER TABLE `members` ADD UNIQUE INDEX `email` (`email`);

SQL注入也存在严重问题。切勿将数据直接连接到查询中,否则可能会使数据与命令混淆。必须转义数据。 PDO可用的handle this is with prepared/parameterized queries的正确方法。