Php 检查电子邮件是否已存在,并在同一功能中过滤\u验证\u电子邮件

Php 检查电子邮件是否已存在,并在同一功能中过滤\u验证\u电子邮件,php,mysql,Php,Mysql,我试图允许用户在我的PHP系统中编辑他们的电子邮件地址,但也阻止他们设置已经存在的电子邮件地址,我还试图通过FILTER_VALIDATE_email运行他们。然而,它在某个地方停了下来。这些检查在同一个函数中运行良好,但是如果我试图设置的检查通过,则更新新的检查将不起作用。我正在使用一个HTML表单来更新它们。我认为我做得对,我在这里读到这样做应该是可能的 这是我的密码,有人知道我做错了什么吗?我错过了什么 function EmailCheck($sql) { if (isset($_PO

我试图允许用户在我的PHP系统中编辑他们的电子邮件地址,但也阻止他们设置已经存在的电子邮件地址,我还试图通过FILTER_VALIDATE_email运行他们。然而,它在某个地方停了下来。这些检查在同一个函数中运行良好,但是如果我试图设置的检查通过,则更新新的检查将不起作用。我正在使用一个HTML表单来更新它们。我认为我做得对,我在这里读到这样做应该是可能的

这是我的密码,有人知道我做错了什么吗?我错过了什么

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。但除此之外,这是一个很好的解决方案!