2012-04-14 60 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