【发布时间】:2019-06-13 17:12:22
【问题描述】:
我有一个表单,我用它来更新用户个人资料。问题是我不想让所有字段都成为强制性的,所以如果用户留下一个空白字段,那么已经存储在数据库中的值会被更新为空白或空值。因此,我决定查询数据库并获取一个已经存储的值数组,然后我从用户表单中获得了一个值数组。我需要以某种方式合并这两个数组,如果在表单中插入了新值,我可以更新数据库字段,如果表单字段为空,则保留旧的数据库值。
我知道我可以在不使用数组的情况下执行以下操作,但我不知道在这种情况下如何使用准备好的语句
if(!empty($user_last))
$update_values[] = "user_last='".$user_last."'";
$update_values_imploded = implode(', ', $update_values);
if( !empty($update_values) ){
$q = "UPDATE users SET $update_values_imploded WHERE user_id='$userid' ";
$r = mysqli_query($conn,$q);
if($r){
$_SESSION['success_msg'] = 'profile updated!';
header("location: ../client_profile.php");
exit();
}
}
我尝试过的数组方法如下,但确实不能正常工作。
$merged_array = array_unique(array_merge($database_rows, $form_data));
您还有其他想法吗?非常感谢
这是带有模拟数组的完整代码
$km_user_id= 2;
// this array comes from the form
$from_array = array(
'km_user_first_name' => 'Antonio',
'km_user_last_name' => 'Acri',
'km_user_address' => 'via pola',
'km_user_city' => 'roma',
'km_user_city_prov' => '',
'km_user_postcode' => '',
'km_user_email' => '',
'km_user_website' => 'url',
'km_user_telephone' => '123456',
'km_user_mobile' => '',
'km_user_fiscalcode' => '',
'km_user_document' => '',
'km_user_document_number' => '',
'km_user_document_exp' => '',
'km_user_birth_place' => '',
'km_user_birth_date' => ''
);
// select vakues from database
$query= "SELECT km_user_first_name, km_user_last_name, km_user_address, km_user_city, km_user_city_prov, km_user_postcode, km_user_email, km_user_website, km_user_telephone, km_user_mobile, km_user_fiscalcode, km_user_document, km_user_document_number, km_user_document_exp, km_user_birth_place, km_user_birth_date FROM km_users WHERE km_user_id= ?";
$stmt = mysqli_prepare($db_user_conn, $query);
mysqli_stmt_bind_param($stmt, 'i', $km_user_id);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
print_r($row);
?>
<br>
<br>
<?php
print_r($from_array);
?>
<br>
<br>
<?php
$result = array_merge($from_array, $row);
print_r($result);
您可以在合并的数组中看到值[km_user_address] => via roma 11 应该是[km_user_address] => via pola。
【问题讨论】:
-
but it doesn't really work properly.这是什么意思?您需要向我们展示数组的值、您期望的以及您得到的。 -
向我们展示完整的代码。
-
您好,我已按照要求使用代码更新了问题
-
要在准备好的语句中将参数传递给动态数字
?,请使用bind_param,如call_user_func_array(array($stmt, 'bind_param'), refValues($params));。见stackoverflow.com/a/16120923/5459839 -
如果第一个数组有空字段,您可以使用
array_filter排除它们然后合并