2011-07-01 17 views
1

私は送信時にユーザ情報を更新するフォームを持っています。現在のセットアップでは、すべてのフィールドが入力された場合にのみフォームを送信できます。私は作成される必要がありますif文は、各フィールドには、更新されていない場合は、人口がないと言う。MySQLの更新ユーザコード

私は各フィールドごとに何をしたいのかを説明する以下のパスワードフィールドを持っていますが、IF内に複数の変数をリストすることができるかどうか、または別のIFステートメントを記述し、データベースのすべての時間はここで

if($password != '') { 
    if($password != $password2) { 
    $error = '<div class="error_message">Attention! Your passwords did not match.</div>'; 
    } 

    if(strlen($password) < 5) { 
    $error = '<div class="error_message">Attention! Your password must be at least 5 characters.</div>'; 
    } 

    if($error == '') { 
    $sql = "UPDATE login_users 
       SET restricted = '$restrict', 
        company_name = '$company_name', 
        contact = '$contact', 
        email = '$email', 
        user_level = '$level', 
        password = MD5('$password') 
      WHERE user_id = '$id'"; 
    $query = mysql_query($sql) or die("Fatal error: ".mysql_error()); 

    echo "<h2>Updated</h2>"; 
    echo "<div class='success_message'>User information (and password) updated for User ID <b>$id ($company_name)</b>.</div>"; 
    echo "<h2>What to do now?</h2><br />"; 
    echo "<a href='xxxxxxxx'>&laquo; Back to Admin Panel</a> | Go to the <a href='user_edit.php'>edit users</a> page.</li>"; 
    } 

は、私があれば人口があれば言う 各フィールドのステートメントを作成する必要が私のコード

if(trim($id) == '1') { 
    $error = '<div class="error_message">Attention! You cannot edit the main Administrator, use database.</div>'; 
} else if(trim($company_name) == '') { 
    $error = '<div class="error_message">Attention! You must enter a company name.</div>'; 
} else if(trim($contact) == '') { 
    $error = '<div class="error_message">Attention! You must enter a contact name.</div>'; 
} else if(!isEmail($email)) { 
    $error = '<div class="error_message">Attention! You have entered an invalid e-mail address, try again.</div>'; 
} else if(trim($level) == '') { 
    $error = '<div class="error_message">Attention! No user level has been selected.</div>'; 
} 
+0

フィールドごとに異なるメッセージが必要な場合は、複数のif文が必要です。 – joakimdahlstrom

+0

入力しないと更新しないようにする必要がありますが、空白のフィールドでテーブルを更新したくない場合もあります。 – iamwhitebox

+0

よろしくお願いします。 – joakimdahlstrom

答えて

1

のいくつかのより多くのです アップデートしていない場合は、更新しないでください。

あなたが行ったようにSQL文を作成できます。線に沿って何か:近い将来

$sqlCols = ''; 
$error = ''; 

// Password 
if ($password != '') { 
    if ($password == $password2) { 
     if (strlen($password) > 4) { 
      $sqlCols .= "password = MD5('".mysql_real_escape_string($password)."'), "; 
     } else { 
      $error .= '<div class="error_message">Attention! Your password must be at least 5 characters.</div>'; 
     } 
    } else { 
     $error .= '<div class="error_message">Attention! Your passwords did not match.</div>'; 
    } 
} 


// Email 
if ($email != '') { 
    if (isValidEmail($email)) { 
     $sqlCols .= "email ='".mysql_real_escape_string($password)."', "; 
    } else { 
     $error .= '<div class="error_message">Attention! Your email is invalid.</div>'; 
    } 
} 

if ($error == '') { 
    $sql = "UPDATE login_users 
      SET ".trim($sqlCols, ', ')." 
      WHERE user_id = '$id'"; 

    // etc... 
} 

、パフォーマンスの向上やSQLインジェクションに対するより良い保護のためPDOに切り替えます。

+0

$ username、$ name、$ emailなどがあったらif文を続けますか? – iamwhitebox

+0

私はこの周りに私の頭を包み込むことを試みているだけです – iamwhitebox

+0

はい。私は説明するために電子メールセグメントを追加しました。また、ユーザーが複数のエラーを返すフォームを送信できるので、エラー文字列を連結しました。 – webbiedave

1

どのようなユーザーのフィードバックが必要かによって異なりますが、ここでは、検証に合格したフィールドを収集し、クエリに使用する簡単な方法があります。

$errors = array(); 
$fields = array(); 

if(($password != $password2) { 
    $errors[] = "Passwords didn't match"; 
    $fields['password'] = $password; 
} 

if(empty($email)) { 
    $errors[] = "Email is empty"; 
    $fields['email'] = $email; 
} 

if($something > $nothing) { // 
    $errors[] = "More errors"; 
    $fields['something'] = $something; 
} 

//and so on... 

if(!count($errors)) { 

    $str = ''; 

    foreach($fields as $field => $val) { 
     $str .= $field. "= '" .$val."', "; 
    } 

    $str = substr($str,0,1); //removes last , (comma) 

    $sql = "UPDATE login_users 
     SET $str 
     WHERE user_id = '$id'"; 

    //do query.. 

}