我正在尝试检查是否收到了电子邮件或密码。当我输入用户名时,它会显示用户名,如果我输入已收到的电子邮件,则会显示已收到的电子邮件,但如果我输入了电子邮件和用户名,则会显示“好”而不是“用户名和电子邮件”。有谁知道它为什么不起作用?
$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>";
}
这真是令人沮丧,因为我不知道它为什么不起作用。
答案 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的正确方法。