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 に答える