1

PHPでプロフィールページを作成しました。このページには、住所と電話のフィールドが含まれており、ユーザーはデータを挿入するように求められます。その後、データは profile という名前のテーブルに保存されます。すべて正常に動作しますが、問題はテーブルが毎回すべてのフィールドを更新することです。私が使用する関数は次のとおりです。

function update_user_profile($user_id, $update_data_profile){

$result = mysql_query("select user_id from profile where user_id = $user_id limit 1");

if(mysql_num_rows($result) === 1){

    $update = array();

    array_walk($update_data_profile, 'array_sanitize');

      foreach($update_data_profile as $field => $data ){
    $update[]='`' . $field . '` = \'' . $data . '\'';   
      }

mysql_query(" UPDATE `profile` SET " . implode(',  ', $update) . " WHERE `user_id` = $user_id ") or die(mysql_error());

}else{

$user_id = $update_data_profile['user_id'] ;

if(count($update_data_profile)){

  $columns = array();
  $values = array();

foreach($update_data_profile as $field => $data){
    $columns[] = $field;
    $values[] = $data;
} 
}

mysql_query(" INSERT INTO `profile` (" . implode(",", $columns) .") values ('" . implode("','", $values) . "')" ) or die (mysql_error());

}

}

私の質問は、この関数の最初の部分をどのように変更して、ユーザーが特定のフィールドにのみデータを挿入した場合、このフィールドのみが更新され、すべてのテーブルが更新されないようにすることです。たとえば、ユーザーが自分の電話番号と住所を挿入するとします。次にユーザーが再度フォームを使用してプロファイルを更新する場合、電話番号を変更すると、テーブル内の電話番号フィールドのみが変更され、住所を含む他のフィールドは変更されません。何か案は?thnx

4

1 に答える 1

1

$data変数が空かどうかをテストする必要があります。

foreach($update_data_profile as $field => $data ){
    if(!empty($data)){
        $update[]='`' . $field . '` = \'' . $data . '\'';
    }
}
if(isset($update) && !empty($update)){
    mysql_query(" UPDATE `profile` SET " . implode(',  ', $update) . " WHERE `user_id` = $user_id ") or die(mysql_error());
}

いつものように、mysql_* 関数から離れて、MySQLiまたはPDOを使用する必要があります。

于 2013-02-15T15:46:05.747 に答える