【发布时间】:2012-12-23 15:06:49
【问题描述】:
count($existuser) 函数始终返回 1。即使没有具有该名称或电子邮件的用户。
代码如下:
function registerUser($username, $password, $passwordagain, $email, $mcname) {
include $_SERVER['DOCUMENT_ROOT'] . "/config/config.php";
$conn = new PDO('mysql:host=' . $ip . ';dbname=' . $database, $username, $password);
$validusername = "/^[a-z0-9]+$/";
$validpassword = "/^[A-Za-z0-9]+$/";
$validemail = "/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/";
$validmcname = "/^[A-Za-z0-9]+$/";
$error = 0;
if (strlen($username) < 4 || strlen($username) > 24) {
$error = 1;
}
if (strlen($password) < 6 || strlen($password) > 24) {
$error = 1;
}
if (strlen($mcname) < 4 || strlen($mcname) > 24) {
$error = 1;
}
if (!preg_match($validusername, $username)) {
$error = 1;
}
if (!preg_match($validpassword, $password)) {
$error = 1;
}
if (!preg_match($validemail, $email)) {
$error = 1;
}
if (!preg_match($validmcname, $mcname)) {
$error = 1;
}
if ($password != $passwordagain) {
$error = 1;
}
//test
$userquery = $conn->query('SELECT * FROM users WHERE username="' . $username . '"');
$existuser = $userquery->fetch();
echo count($existuser);
//test
if (count($existuser)) {
$error = 1;
echo "<div class='erroralert'>Username already exists!</div>";
}
//test
$emailquery = $conn->query('SELECT * FROM users WHERE email="' . $email . '"');
$existemail = $emailquery->fetch();
//test
if (count($existemail)) {
$error = 1;
echo "<div class='erroralert'>E-mail already exists!</div>";
}
if ($error != 1) {
$encryptedpassword = hash('sha512', $password);
$registeruser = $conn->query("INSERT INTO users(username, password, email, mcname) VALUES ('$username', '$encryptedpassword', '$email', '$mcname')");
echo "<div class='successalert'>Succesfully registred</div>";
}
}
【问题讨论】:
-
我没有看到您发布的查询,而且您的调试过程也可以更改您的错误状态,这样您就可以确定您/用户在函数中输入的内容有什么问题.
-
请参阅:php.net/faq.passwords.php - 您也可以将用于验证的长度约束放入正则表达式中(您已经使用电子邮件正则表达式执行此操作)并且您应该在此处使用准备好的语句,因为您不需要处理验证结果。