db2 数据库无法检查用户名是否已存在
db2 database couldn't check if username already exists
我正在使用 IBM Db2 和 PHP 创建一个简单的注册页面,我的所有数据都保存在 Db2 数据库中。但是,我无法保留现有用户名的约束。即使用户名已存在于 Db2 中,它也会注册用户。此外,它正在使用输入的任何密码登录!
我不明白当条目显示在数据库中时,这意味着数据已找到与数据库的正确连接。那么为什么它没有捕捉到约束逻辑。
我刚刚将 Db2 中的 MySQL 函数更改为 PHP,并且有一些函数给我带来了错误的感觉,例如 db2_exec()
和 db2_fetch_assoc
.
$user_check_query= "SELECT * FROM users WHERE username ='$username'"
$result = db2_exec($db,$user_check_query);
$user = db2_fetch_assoc($result);
if(!empty($user)){ // Not empty mean database already exist this username
array_push($errors,"Username exists");
}
上面提出的查询在以下代码片段中得到解决;
if(isset($_POST['signup'])){
$username = ($_POST['username']);
$email = ($_POST['email']);
$password = ($_POST['password']);
$confirm_password = ($_POST['confirm_password']);
//form validation
if(empty($username)) {array_push($errors, "Username is required");}
if(empty($email)) {array_push($errors, "Email is required");}
if(empty($password)) {array_push($errors, "Password is required");}
if($password != $confirm_password) {array_push($errors, "Passwords do not match");}
if(strlen($password)<6){array_push($errors, "Password must be at least 6 characters long");}
if (!preg_match($password_requirements, $password) ) {array_push($errors,"Password must contain at least one upper case , one lower case and one digit" );}
//check db for existing user with same username
$check_username = "SELECT * FROM people WHERE username = '$username'";
$check_email = "SELECT * FROM people WHERE email = '$email'";
$res_username = db2_exec($db, $check_username);
$user_username = db2_fetch_assoc($res_username);
$res_email = db2_exec($db, $check_email);
$user_email = db2_fetch_assoc($res_email);
if(!empty($user_username)){
array_push($errors, "Username already exists!");
}
if(!empty($user_email)){
array_push($errors, "Email already exists!");
}
//register user if no error
elseif (count($errors) == 0) {
//$password = md5($password);
$query = "INSERT INTO people (username, email, password)
VALUES ('$username', '$email', '$password')";
db2_exec($db,$query) or die("couldn't execute query..".db2_stmt_errormsg());
$_SESSION['username']= $username;
$_SESSION['success']= "You are now logged in";
//echo "you are now logged in";
header('Refresh: 0; URL=index.php', true, 301);
}
}
只需添加另一个查询来检查用户名和密码
$check_username_password= "SELECT * FROM users WHERE username ='$username' AND
password = '$password'";
$result = db2_exec($db,$check_username_password);
$user = db2_fetch_assoc($result);
if(!empty($user)){ // username match with the password
// Set your session here
// Redirect to the page you want
}
else{
// Show your error here
}
我正在使用 IBM Db2 和 PHP 创建一个简单的注册页面,我的所有数据都保存在 Db2 数据库中。但是,我无法保留现有用户名的约束。即使用户名已存在于 Db2 中,它也会注册用户。此外,它正在使用输入的任何密码登录!
我不明白当条目显示在数据库中时,这意味着数据已找到与数据库的正确连接。那么为什么它没有捕捉到约束逻辑。
我刚刚将 Db2 中的 MySQL 函数更改为 PHP,并且有一些函数给我带来了错误的感觉,例如 db2_exec()
和 db2_fetch_assoc
.
$user_check_query= "SELECT * FROM users WHERE username ='$username'"
$result = db2_exec($db,$user_check_query);
$user = db2_fetch_assoc($result);
if(!empty($user)){ // Not empty mean database already exist this username
array_push($errors,"Username exists");
}
上面提出的查询在以下代码片段中得到解决;
if(isset($_POST['signup'])){
$username = ($_POST['username']);
$email = ($_POST['email']);
$password = ($_POST['password']);
$confirm_password = ($_POST['confirm_password']);
//form validation
if(empty($username)) {array_push($errors, "Username is required");}
if(empty($email)) {array_push($errors, "Email is required");}
if(empty($password)) {array_push($errors, "Password is required");}
if($password != $confirm_password) {array_push($errors, "Passwords do not match");}
if(strlen($password)<6){array_push($errors, "Password must be at least 6 characters long");}
if (!preg_match($password_requirements, $password) ) {array_push($errors,"Password must contain at least one upper case , one lower case and one digit" );}
//check db for existing user with same username
$check_username = "SELECT * FROM people WHERE username = '$username'";
$check_email = "SELECT * FROM people WHERE email = '$email'";
$res_username = db2_exec($db, $check_username);
$user_username = db2_fetch_assoc($res_username);
$res_email = db2_exec($db, $check_email);
$user_email = db2_fetch_assoc($res_email);
if(!empty($user_username)){
array_push($errors, "Username already exists!");
}
if(!empty($user_email)){
array_push($errors, "Email already exists!");
}
//register user if no error
elseif (count($errors) == 0) {
//$password = md5($password);
$query = "INSERT INTO people (username, email, password)
VALUES ('$username', '$email', '$password')";
db2_exec($db,$query) or die("couldn't execute query..".db2_stmt_errormsg());
$_SESSION['username']= $username;
$_SESSION['success']= "You are now logged in";
//echo "you are now logged in";
header('Refresh: 0; URL=index.php', true, 301);
}
}
只需添加另一个查询来检查用户名和密码
$check_username_password= "SELECT * FROM users WHERE username ='$username' AND
password = '$password'";
$result = db2_exec($db,$check_username_password);
$user = db2_fetch_assoc($result);
if(!empty($user)){ // username match with the password
// Set your session here
// Redirect to the page you want
}
else{
// Show your error here
}