2012-04-14 96 views
1

我有用户的详细信息,如果用户想将更新这些细节的更新语句的形式,我添加了验证,这样的电子邮件不能因此另一个帐户if($checkuser != 0)PHP/MySQL的更新语句建议

相关

该声明的问题在于,如果用户没有更改他们的电子邮件并更新他们的详细信息,他们将会收到错误消息,说明电子邮件已存在。

我想在电子邮件存在检查后进行集成,如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;   
} 
+1

我通常这样做的方式是,在更新表单中,我将电子邮件字段留空(或密码,因为它只是数据库中的散列)。并在目标页面,我检查,如果电子邮件字段不是空的,然后我检查电子邮件和一切,如果它是空的,那么我只是简单地从sql语句中删除它。在你的情况下,你可以简单地添加“AND user_id!= $ current_user_id”,并通过他自己的记录不会出现在查询 – 2012-04-14 18:49:13

回答

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;   
} 
+0

谢谢Al,'和cus_id!='“。$ cus_id。”''是什么我失踪 – 2012-04-14 19:24:44

+0

解决问题,但如果您尝试使用相同的功能来更新记录的用户信息将无法正常工作。 – Gerep 2012-04-14 20:47:55

0

当你有一个用户改变他们的信息,他们应该只能访问他们的帐户(出于安全&隐私的目的)。因此,您在获取信息时应将其电子邮件用作标识符。

1

我做的事情很丑,但很好。

我想补充的实际信息的一些隐藏的输入,比如:

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

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

2

我有用户详细信息的形式,这将 更新这些细节,如果用户想,我添加了验证,这样 的电子邮件不能被相关的更新语句与另一个帐户,因此 该声明的问题是,如果用户不更改他们的 电子邮件和更新他们的详细信息,他们会收到一个错误,说电子邮件 已经存在。

为什么你不只是检查是否有存在的电子邮件与另一个帐户除了他的账号可与您的查询一些改变来解决。

$queryuser=mysql_query("SELECT * FROM customer WHERE email='" . 
mysql_real_escape_string($_POST["myusername"]) . "' AND cus_id!=" . intval($cus_id)); 
+0

感谢Invisal'AND cus_id!='“。$ cus_id。”''就是缺少的东西 – 2012-04-14 19:25:23