1

我有一个包含用户详细信息的表单和一个更新语句,如果用户愿意,它将更新这些详细信息,我添加了验证,以便电子邮件不能与另一个帐户相关联,因此 if($checkuser != 0)

该声明的问题在于,如果用户不更改他们的电子邮件并更新他们的详细信息,他们将收到一个错误消息,指出电子邮件已经存在。

我想在电子邮件存在检查之后进行集成,else if(($_POST["myusername"]) == ($row['email']))然后继续更新。(myusername 变量名称包含电子邮件)这意味着如果发布的电子邮件与他们当前的电子邮件相同,则继续更新。

但是我迷路了,因为我对 PHP 比较陌生,所以我在括号和括号方面遇到了麻烦。

这是我的代码

if($_POST['usubmit']=='Update') 
{
    $Uerr = array();

    if (!$_POST['fullname'] || !$_POST['myusername']) 
        {   
            $Uerr[] = '» Name or Email must be filled in!';
        }

    if (!checkEmail($_POST['myusername']))
        {
            $Uerr[]='» Your email is not valid!';
        }


    // If there are no errors
    if(!count($Uerr))
        {
            /* Now we will check if username is already in use or not */
           $queryuser=mysql_query("SELECT * FROM customer WHERE email='" . mysql_real_escape_string($_POST["myusername"]) . "'");
           $checkuser=mysql_num_rows($queryuser);

           if($checkuser != 0)
            { 
                $Uerr[]='» Sorry this email is already registered!';
            }

        else 
                {
                    $updateDetails = mysql_query("UPDATE customer SET 
                    name = '" . mysql_real_escape_string($_POST["fullname"]) . "', 
                    dob = '" . mysql_real_escape_string($_POST["dob"]) . "',  
                    address = '" . mysql_real_escape_string($_POST["address"]) . "', 
                    email = '" . mysql_real_escape_string($_POST["myusername"]) . "', 
                    telephone = '" . mysql_real_escape_string($_POST["telephone"]) . "' 
                    WHERE cus_id = '$cus_id'"); 

                    if ($updateDetails) 

                            $_SESSION['Umsg']['Ureg-success']="» Your details have been updated successfully!";

                       else { 
                              $Uerr[]='» error updating your account'.mysql_error(); 
                            }
                }
        }
            if(count($Uerr))
            {
                $_SESSION['Umsg']['Ureg-err'] = implode('<br />',$Uerr);
            }

    header("Location: account.php");
    exit;        
}
4

4 回答 4

2

这应该工作

if($_POST['usubmit']=='Update') 
{
    $Uerr = array();

    if (!$_POST['fullname'] || !$_POST['myusername']) 
        {   
            $Uerr[] = '&raquo; Name or Email must be filled in!';
        }

    if (!checkEmail($_POST['myusername']))
        {
            $Uerr[]='&raquo; Your email is not valid!';
        }


    // If there are no errors
    if(!count($Uerr))
        {
            /* Now we will check if username is already in use or not */
           $queryuser=mysql_query("SELECT * FROM customer WHERE email='" . mysql_real_escape_string($_POST["myusername"]) . "' AND cus_id !=" . $cus_id(mysql_real_escape_string));

           $checkuser=mysql_num_rows($queryuser);

           if($checkuser != 0)
            { 
                $Uerr[]='&raquo; Sorry this email is already registered!';
            }

        else 
                {
                    $updateDetails = mysql_query("UPDATE customer SET 
                    name = '" . mysql_real_escape_string($_POST["fullname"]) . "', 
                    dob = '" . mysql_real_escape_string($_POST["dob"]) . "',  
                    address = '" . mysql_real_escape_string($_POST["address"]) . "', 
                    email = '" . mysql_real_escape_string($_POST["myusername"]) . "', 
                    telephone = '" . mysql_real_escape_string($_POST["telephone"]) . "' 
                    WHERE cus_id = '$cus_id'"); 

                    if ($updateDetails) 

                            $_SESSION['Umsg']['Ureg-success']="&raquo; Your details have been updated successfully!";

                       else { 
                              $Uerr[]='&raquo; error updating your account'.mysql_error(); 
                            }
                }
        }
            if(count($Uerr))
            {
                $_SESSION['Umsg']['Ureg-err'] = implode('<br />',$Uerr);
            }

    header("Location: account.php");
    exit;        
}
于 2012-04-14T18:53:18.270 回答
2

我有一个包含用户详细信息的表单和一个更新语句,如果用户愿意,它将更新这些详细信息,我添加了验证,以便电子邮件不能与另一个帐户相关联,因此该语句的问题是,如果用户不更改他们的电子邮件并更新他们的详细信息,他们将收到一条错误消息,指出电子邮件已存在。

您为什么不检查是否存在其他帐户的电子邮件,除了他的帐户可以通过对您的查询进行一些更改来解决。

$queryuser=mysql_query("SELECT * FROM customer WHERE email='" . 
mysql_real_escape_string($_POST["myusername"]) . "' AND cus_id!=" . intval($cus_id));
于 2012-04-14T18:54:43.463 回答
1

我做了一些丑陋的事情,但效果很好。

我在一些隐藏的输入上添加了实际信息,例如:

<input type="hidden" name="actual_email" value="<?php echo $object->email; ?>" />

现在您只需要检查用户输入(可见)上的电子邮件是否与隐藏输入上的相同,如果是,则忽略电子邮件验证,因为这意味着用户没有更改他的电子邮件。

于 2012-04-14T18:47:52.443 回答
0

当您让用户更改他们的信息时,他们应该只能访问他们的帐户(出于安全和隐私目的)。因此,在获取他们的信息时,您应该使用他们的电子邮件作为标识符。

于 2012-04-14T18:46:28.697 回答