2011-07-05 10 views
1

私は以下のコードでユーザー情報を更新しています。入力したフィールドに対してのみクエリを実行する必要があるため、ユーザーに少し編集を加えるたびにすべての情報を追加する必要はありません。PHPは重複する投稿を防止します

if(isset($_POST['do_edit'])) { 


    $id = mysql_real_escape_string($_POST['user_id']); 
    $company_name = mysql_real_escape_string($_POST['company_name']); 
    $contact = mysql_real_escape_string($_POST['contact']); 
    $username = mysql_real_escape_string($_POST['username']); 
    $phone = mysql_real_escape_string($_POST['phone']); 
    $address = mysql_real_escape_string($_POST['address']); 
    $email = mysql_real_escape_string($_POST['email']); 
    $password = mysql_real_escape_string($_POST['password']); 
    $password2 = mysql_real_escape_string($_POST['confirm']); 
    $level = mysql_real_escape_string($_POST['user_level']); 
    $restrict = mysql_real_escape_string($_POST['restrict']); 

    $delete = mysql_real_escape_string($_POST['delete']); 

    // Ticked the 'delete user' box? If so, delete and echo message.  
    if($delete == 'delete_uid' && $error == '') { 

    $sql = "DELETE FROM login_users WHERE user_id='$id'"; 
    $query = mysql_query($sql) or die("Fatal error: ".mysql_error()); 

    echo "<h3>Deleted</h3>"; 
    echo "<div class='success_message'>User <b>$company_name $contact</b> has been removed from the database.</div>"; 

    echo "<h2>What to do now?</h2><br />"; 
    echo "<a href=''>&laquo; Back to Admin Panel</a> | Go to the <a href='user_edit.php'>edit users</a> page.</li>"; 

    } else { 

    // Validate the submitted information 

     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>'; 
     } 

    // Password been entered? If so, validate and update information. 

     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=''>&laquo; Back to Admin Panel</a> | Go to the <a href='user_edit.php'>edit users</a> page.</li>"; 

      } 

    // Password has not been entered don't update password fields. 

     } else { 

      if($error == '') { 

      $sql = "UPDATE login_users SET restricted='$restrict', company_name='$company_name', contact='$contact', username='$username', email='$email', user_level='$level' 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 updated for <b>$company_name</b>.</div>"; 

      echo "<h2>What to do now?</h2><br />"; 
      echo "<a href=''>&laquo; Back to Admin Panel</a> | Go to the <a href='user_edit.php'>edit users</a> page.</li>"; 

      } 

     } 

    } 
} 
+0

ループを使ってきれいに行うことができます。 –

+1

phpがデータベースを更新しないようにするには、検証で '$ error ='の後に 'return'を入れてください – k102

答えて

1

フィールドのリストをチェックして、動的に応えるものに基づいて、UPDATEクエリを構築:私は

私はこれを達成するために行くためにどのような方法を見つけ出すカント空のフォームフィールドを無視したいです基準。強く繰り返しロジックを使用せず、クエリの構築を支援する機能や2を書きますが、以下は、ヒントを提供する必要があります考えてみましょう。それを行うには

$sql = "UPDATE login_users SET "; 
$first = 1; 
if ($restrict != '') { 
    if ($first) { 
     $first = 0; 
    } else { 
     $query += ", "; 
    } 
    $query += "restricted='$restrict'"; 
} 

if ($company_name != '') { 
    if ($first) { 
     $first = 0; 
    } else { 
     $query += ", "; 
    } 
    $query += "company_name='$company_name'"; 
} 

if ($contact != '') { 
    if ($first) { 
     $first = 0; 
    } else { 
     $query += ", "; 
    } 
    $query += "contact='$contact'"; 
} 

if ($username != '') { 
    if ($first) { 
     $first = 0; 
    } else { 
     $query += ", "; 
    } 
    $query += "username='$username'"; 
} 

if ($email != '') { 
    if ($first) { 
     $first = 0; 
    } else { 
     $query += ", "; 
    } 
    $query += "email='$email'"; 
} 

if ($level!= '') { 
    if ($first) { 
     $first = 0; 
    } else { 
     $query += ", "; 
    } 
    $query += "user_level='$level'"; 
} 

$query += " WHERE user_id = '$id'"; 

if (! $first) { 
    // do query, since we know something was changed 
} 
0

二つの方法:私は通常使用

  • ものですデータベースフィールド(パスワードを除く)を使用してフォームフィールドをあらかじめ入力するだけです。彼らは空である必要はありません。
  • 空のUPDATEクエリ(UPDATE login_users SET ? WHERE user_id=$id)で始まり、?を置き換えるfield = 'value'、... stringを作成します。

2番目のフォームは、単にフォームをプレフィルするよりも扱いにくいようです。

0

あなたはこのような何かを試みることができる:二つのことに注意してください

$sql = "UPDATE login_users SET "; 
foreach ($_POST as $fieldname=>$value) { 
    if ($value) { 
     $sql .= "$fieldname='$value', "; 
    } 
} 
$sql = substr($sql, 0, -2); // to remove the last ", " 
$sql .= " WHERE user_id = '$id';"; 

を:

  1. $フィールド名、データベース内の実際のフィールド名と同じにする必要があります(ない場合は、あなたが行う必要があります名前を変更するもの)。
  2. パスワードの間にmd5を置く必要があります。

編集:2つ以上のもの!

  1. MySQLをエスケープすることを忘れないでください。
  2. これは、クエリセットを構築するために、このによると、$ _POST変数と設定されているかを見る上でのことができます。sprintf
関連する問題