Php 检查电子邮件是否已存在,并在同一功能中过滤\u验证\u电子邮件
我试图允许用户在我的PHP系统中编辑他们的电子邮件地址,但也阻止他们设置已经存在的电子邮件地址,我还试图通过FILTER_VALIDATE_email运行他们。然而,它在某个地方停了下来。这些检查在同一个函数中运行良好,但是如果我试图设置的检查通过,则更新新的检查将不起作用。我正在使用一个HTML表单来更新它们。我认为我做得对,我在这里读到这样做应该是可能的 这是我的密码,有人知道我做错了什么吗?我错过了什么Php 检查电子邮件是否已存在,并在同一功能中过滤\u验证\u电子邮件,php,mysql,Php,Mysql,我试图允许用户在我的PHP系统中编辑他们的电子邮件地址,但也阻止他们设置已经存在的电子邮件地址,我还试图通过FILTER_VALIDATE_email运行他们。然而,它在某个地方停了下来。这些检查在同一个函数中运行良好,但是如果我试图设置的检查通过,则更新新的检查将不起作用。我正在使用一个HTML表单来更新它们。我认为我做得对,我在这里读到这样做应该是可能的 这是我的密码,有人知道我做错了什么吗?我错过了什么 function EmailCheck($sql) { if (isset($_PO
function EmailCheck($sql) {
if (isset($_POST['email'])) {
$newemail = $_POST["email"];
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
echo "Invalid e-mail, please try a different.";
exit;
}
$check_email = $sql->query("SELECT email FROM auth WHERE email='$newemail'");
if ($check_email-> num_rows) {
echo "E-mail is already in use.";
exit;
}
}
else {
mysqli_query($sql, "UPDATE auth SET email='$newemail' WHERE username = '$this->username'");
header("Location: userinfo.php");
exit;
}
}
您的更新查询似乎位于错误的位置。根据您的代码,如果未设置发布的电子邮件值,则您正在更新数据库。我猜那不是你想做的。我看到的另一个问题是,您只将$sql变量传递给函数。将永远不会设置过帐值
//initalize flags
$flag1 = "no";
$flag2 = "no";
if( isset($_POST['email'])){
if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
echo "Invalid e-mail, please try a different.";
exit;
}else{
//use flag here for for last if
$flag1 = "yes";
}
$check_email = $sql->query("SELECT email FROM auth WHERE email='$newemail'");
if ($check_email-> num_rows) {
echo "E-mail is already in use.";
exit;
}else{
//set 2nd flag here
$flag2 = "yes";
}
if( $flag1 == "yes" && $flag2 == "yes"){
//update query for new email here
}
}else{
//do something when no email is posted
}
您的更新查询似乎位于错误的位置。根据您的代码,如果未设置发布的电子邮件值,则您正在更新数据库。我猜那不是你想做的。我看到的另一个问题是,您只将$sql变量传递给函数。将永远不会设置过帐值
//initalize flags
$flag1 = "no";
$flag2 = "no";
if( isset($_POST['email'])){
if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
echo "Invalid e-mail, please try a different.";
exit;
}else{
//use flag here for for last if
$flag1 = "yes";
}
$check_email = $sql->query("SELECT email FROM auth WHERE email='$newemail'");
if ($check_email-> num_rows) {
echo "E-mail is already in use.";
exit;
}else{
//set 2nd flag here
$flag2 = "yes";
}
if( $flag1 == "yes" && $flag2 == "yes"){
//update query for new email here
}
}else{
//do something when no email is posted
}
您需要查看您的
if
/else
语句的结构。目前,如果设置了$\u POST[email]
,您的更新
查询将永远不会执行。另外一种方法是将数据库中的电子邮件
列设置为唯一
,或许您需要查看if
//code>else语句的结构。目前,如果设置了$\u POST[email]
,则您的更新
查询将永远不会执行。还有一种方法是,只需将数据库中的email
列设置为唯一
,这可能会给我一个语法错误,即在带有ECHO的第一行出现意外的T\u ECHO。抱歉,必须删除1(而不是<代码>是< <代码> >代码> < <代码> >,您可能要考虑在代码中使用布尔值。现在它工作了,第二标志vAdabess是错误的。必须将它从$FLAG改为$FLAG2。但这是一个很好的解决方案!这会给我一个语法错误,在第一行中用回声表示意想不到的Ty回波。抱歉,必须删除。E 1(而不是<代码>是< /COD>和<代码> NO./COD> >,您可能要考虑在代码中使用布尔值。它现在工作,第二标志vAdabess是错误的。必须将它从$FLAG改为$FLAG2。但除此之外,这是一个很好的解决方案!