我有一个用户可以填写个人资料信息的表单,所有表单字段都是可选的(不是必需的)。
我的问题是我正在尝试遍历所有表单字段,任何为空的表单字段都将分配值NULL,而对于非空的表单字段则应分配用户在表单中输入的内容。
我认为用foreach而不是多个if语句会更容易并且意味着代码更简洁,但是在foreach循环中的foreach和if语句导致了我不知道如何解决的问题。
我没有包含所有代码,因为我认为这不是必需的。
// fetch form data
$formdata = filter_input_array(INPUT_POST);
// assign session to variables
$user_uid = $_SESSION['user_uid'];
$user_login = $_SESSION['user_login'];
foreach ($formdata as $data){
if (empty($data)) {
$formdata = NULL;
}
}
$url = $formdata['url'];
$facebook = $formdata['facebook'];
$twitter = $formdata['twitter'];
$instagram = $formdata['instagram'];
$youtube = $formdata['youtube'];
// connect to database
$dbh = sql_con();
// process to db
$stmt = $dbh->prepare('
UPDATE
users_profiles
INNER JOIN
users
ON
users_profiles.user_uid = users.user_uid
SET
user_url = :user_url,
user_facebook = :user_facebook,
user_twitter = :user_twitter,
user_instagram = :user_instagram,
user_youtube = :user_youtube
WHERE
users_profiles.user_uid = :user_uid
AND
users.user_login = :user_login
');
// execute query
$stmt->execute(
array(
':user_url' => $url,
':user_facebook' => $facebook,
':user_twitter' => $twitter,
':user_instagram' => $instagram,
':user_youtube' => $youtube,
':user_uid' => $user_uid,
':user_login' => $user_login
));
如果我提交表单时未填写任何表单字段,则用户数据库条目会根据需要使用NULL更新,但是如果我填写某些或任何表单字段并提交我在表单中提供的信息,则数据库中仍显示NULL并执行不会使用用户在表单中输入的内容进行更新。
我希望未填写的表单字段被分配值为NULL,而已填写的字段将被分配给用户放入表单的内容,然后在数据库中进行更新。
谢谢您的帮助。
答案 0 :(得分:0)
$formdata = NULL;
您不想将完整的$formdata
数组设置为NULL,而只将当前条目设置为:
foreach ($formdata as $key => $data) {
if (empty($data)) {
$formdata[$key] = NULL;
}
}
答案 1 :(得分:0)
此代码:
foreach ($_POST as $key => $value) {
if (empty($_POST[$key])) {
$_POST[$key] = "NULL";
}
}
$url = $_POST['url'];
$facebook = $_POST['facebook'];
$twitter = $_POST['twitter'];
$instagram = $_POST['instagram'];
$youtube = $_POST['youtube'];