0

ユーザーがフォームを使用して、データベース内のプロファイルという名前のテーブルに電話番号を保存できるプロファイルページをphpで作成しました。ユーザーが自分の電話番号を変更することを決定した場合、簡単にフォームに移動して変更し、再度保存できます。私の唯一の問題は次のとおりです。ユーザーが自分の電話番号を削除したいとします。彼が自分の番号を削除する (フィールドを空にする) フォームに移動して保存を押すと、電話番号は空の値に変更されず、以前の番号を保持し続けます。空の値を保持するためにこれを変更する方法はありますか?

これはフォームの私のコードです:

<form   action=""   method="POST"  >    

<?php

if ( isset($_GET['success']) === true && empty($_GET['success'])===true ){
   echo'Profile Updated Sucessfuly';
    }else{
   if( empty($_POST) === false  &&  empty($errors) === true ){
     $update_data_profile = array('telephone' => $_POST['telephone']);

          update_user_profile($session_user_id, $update_data_profile);
      header('Location: profile_update.php?success');                               
      exit();

   }else if ( empty($errors) === false ){
      echo output_errors($errors);
       }

     ?>

 Telephone<input name="telephone" type="text" size="25"  value="<?php echo $user_data_profile['telephone']; ?>"/>
<input type="submit" value="" name="submit"/>
</form> 

そして、これはプロファイルテーブルにデータをディスパッチする私の関数です:

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 ){
    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());
}
   }
  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());

}

}
4

3 に答える 3

1

データが空でない場合にのみ、フィールドを更新しています。

次の行を参照してください。

if(!empty($data)){
于 2013-03-03T16:39:50.333 に答える
1

これで空の値を明示的に無視しているため:

if(!empty($data))
于 2013-03-03T16:40:56.350 に答える
0

empty() 関数は欠落している要素や偽の要素を検証できるため、単純にそれを SQL クエリに渡すことはできません。したがって、これらのアイテムのクエリを実際に生成したい場合は、次のようにして値を明示的に設定する必要があります。

if (empty($data)) {
    $update[] = "`{$field}` = ''" ;
} else {
    $update[] = "`{$field}` = '{$data}'" ;
}

PHP 5.3 以降用に作成している場合は、if..else ステートメントを置き換えて、次のような三項演算子 (条件付き代入) を使用してコードを短縮することもできます。

$update[] = (empty($data)) ? "`{$field}` = ''" : "`{$field}` = '{$data}'";
于 2013-03-03T17:05:13.637 に答える