我已经在php中创建了一个配置文件页面,用户可以使用表单将其电话号码保存在数据库中名为profile的表中。如果用户决定更改他的电话号码,可以很容易地转到表单,更改它并再次保存它。我唯一的问题是。假设用户想要删除他的电话号码。如果他转到表单删除他的号码(使字段为空)并按下保存,则电话号码不会更改为空值,并继续保留以前的号码。你知道如何改变它来保持空值吗?
这是我的表单代码:
<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());
}
}
发布于 2013-03-03 16:39:50
仅当数据不为空时才更新该字段。
请看下面这一行:
if(!empty($data)){
发布于 2013-03-03 16:40:56
因为您使用下面的代码显式忽略了空值:
if(!empty($data))
发布于 2013-03-03 17:05:14
由于empty()函数可以验证缺少的和错误的元素,因此不能简单地将其传递给SQL查询。因此,如果您希望实际生成这些项的查询,则需要通过执行以下操作显式设置该值:
if (empty($data)) {
$update[] = "`{$field}` = ''" ;
} else {
$update[] = "`{$field}` = '{$data}'" ;
}
如果您正在为PHP5.3或更高版本编写代码,您还可以替换if..else语句,并通过使用三元运算符(条件赋值)来缩短代码,如下所示:
$update[] = (empty($data)) ? "`{$field}` = ''" : "`{$field}` = '{$data}'";
https://stackoverflow.com/questions/15187899
复制相似问题