2013-03-03 104 views
0

我已經在php中創建了一個配置文件頁面,其中用戶使用表單可以將他的電話號碼保存在數據庫中名爲profile的表中。如果用戶決定改變他的電話號碼,可以輕易地去改變它並再次保存。我唯一的問題是以下幾點。假設用戶想要刪除他的電話號碼。如果他去表格刪除他的號碼(使字段爲空)並按保存,電話號碼不會更改爲空值並繼續保留以前的號碼。任何想法如何改變這個以保持一個空值?窗體保存空值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()); 

} 

} 

回答

1

你只更新字段,如果數據不爲空。

看到這一行:

if(!empty($data)){ 
+0

確定並將其更改爲什麼? – 33528 2013-03-03 16:41:00

+0

您可以將其刪除; // if(!empty($ data)){ $ update [] ='''。 $字段。 ''= \''。 $數據。 '\''; //} – Anonymous 2013-03-03 16:41:55

1

因爲你明確忽略空值與此:

if(!empty($data)) 
+0

我應該如何改變它以接受空值? – 33528 2013-03-03 16:41:56

+0

那麼,如果你想讓所有字段都設置爲空,你可以刪除它。如果它只是你想讓用戶清除的電話,你可以做一些類似'if(!empty($ data)|| $ field =='telephone')' – juco 2013-03-03 16:43:50

0

由於空()函數可以確認失蹤,而假的元素,你可以」 t只需將它傳遞給SQL查詢即可。所以,如果你想真正產生這些項目的查詢,你需要做這樣的事情明確設定值:

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

如果你正在編寫PHP 5.3或以上,你也可以更換if..else聲明並通過使用三元運算符(條件賦值)縮短您的代碼做這樣的事情:

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