【发布时间】:2015-07-03 22:07:29
【问题描述】:
我正在尝试检查我的数据库表。
它检查提供的用户名是否存在电子邮件地址或密码。如果提供的用户名的数据库中存在其中任何一个,则会向用户显示错误消息并且不会更改记录。
问题:但是,由于某种原因,我的检查仅在密码和电子邮件都存在的情况下才有效(如果电子邮件地址为空但密码为空,则不会显示错误消息)不是)。以下是我的代码:
require ('core/dbcon.php');
$user = mysqli_real_escape_string($con, $_GET['user']);
$acc_status = mysqli_real_escape_string($con, $_GET['status']);
if(empty($_POST['form']) === false){
$usr_email = mysqli_real_escape_string($con, $_POST['email']);
$pwd = mysqli_real_escape_string($con, $_POST['password']);
$rpwd = mysqli_real_escape_string($con, $_POST['rpwd']);
$qry = mysqli_query($con, "SELECT * FROM users WHERE email='$usr_email'") or die(mysqli_error($con));
$usr_details = mysqli_fetch_assoc($qry);
if(empty($usr_details['email'])=== true && empty($usr_details['password'])=== true){
if(mysqli_num_rows($qry) == 0){
if($pwd && $rpwd && $usr_email){
if($pwd === $rpwd){
$pwd = md5($pwd);
$query = mysqli_query($con, "SELECT * FROM users WHERE username='$user' AND email='$usr_email'") or die(mysqli_error($con));
if (mysqli_num_rows($query)== 1){
//update database table
}else{
$errors[] = 'Error! Your details were not added to the system due to a technical error. Please contact the Admin.';
}
}else{
$errors[] = 'Please make sure that the password entered in both fields are the same.';
}
}else{
$errors[] = 'Please complete all fields marked with a red asterisk';
}
}else{
$errors[] = 'Error! <b>'.$usr_email.'</b> already existis in our system.';
}
}else{
$errors[] = 'Error! It looks like the username you have entered has been assigned an email address and password already.';
}
}
我有一条用户名“testuser”、电子邮件“test@email.com”和密码“password”的记录。我的检查工作正常,它显示错误 “错误!看起来您输入的用户名已经分配了电子邮件地址和密码。” 但是,当我删除电子邮件地址表单时它以某种方式假设满足以下条件的数据库:if(empty($usr_details['email'])=== true && empty($usr_details['password'])=== true){ 当empty($usr_details['password'])===false。
我尝试将逻辑运算符从 && 更改为 || 但我遇到了同样的问题(因为 OR 应该首先接受一个空变量和一个非空变量)。非常感谢您的帮助。
【问题讨论】:
-
您正在使用用户电子邮件(
$usr_email)查询用户详细信息($usr_details),那么当电子邮件被删除时,您如何获得$usr_details?顺便说一句,您的代码中存在一些严重的安全问题。 -
我正在搜索用户表以查找 ($usr_email) 是否已经存在。如果没有,系统将允许用户添加它。所以删除电子邮件地址应该仍然有效。我只发布了我的一段代码。我有检查以减轻安全风险。但是,我觉得它们与问题无关。
标签: php if-statement logical-operators is-empty