【发布时间】:2015-02-05 23:08:54
【问题描述】:
我这辈子都查不出这有什么问题。这可能是一些隐藏的规则或愚蠢的错误。此代码旨在防止用户两次创建相同的用户或相同的电子邮件,但仅适用于用户名。我错过了什么还是只是一个愚蠢的错误?我正在使用两个 if 语句来尝试实现这一点(如 cmets 所述),但它不起作用。
提前致谢
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['emailAddress'];
// Create connection
$conn = new mysqli($servername, $SQLusername, $SQLpassword, $DBname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysql_connect_error());
}
$sql = "SELECT * FROM `Login` WHERE `Username` LIKE '$username' AND `Password` LIKE '$password';";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
$emailDB = $row['Email'];
$usernameDB = $row['Username'];
// username validation
if ($username == $usernameDB)
{
echo "Username '$username' is already taken!<br>";
exit;
}
//E-mail validation
if ($email == $emailDB)
{
echo "Email '$email' is already registered!<br>";
exit;
}
【问题讨论】:
-
但它不起作用你能再描述一下吗?!
-
您的查询看起来不像是在检查您想要的内容。您真的只需要计算与密码或用户名匹配的行数。如果有的话,你有一个副本。您可以将 = 用于查询而不是 like。
-
存储明文密码通常也被认为是不好的做法,但这是另一回事。
-
您的查询将只返回用户名和密码都匹配的行。如果他们这样做了,代码将退出并显示“用户名已被占用”消息。如果用户名或密码不匹配,您的查询将不返回任何行,您的后续代码将无法通过测试,并且您的错误日志将充满警告和通知,因为 PHP 最好处理这些混乱。
-
而不是您尝试做的事情,您应该首先为您不想允许重复的列使用唯一索引。
标签: php validation if-statement login mysqli