foreach循环获取和处理表​​单数据的问题

时间:2019-07-04 10:55:13

标签: php mysql

我有一个用户可以填写个人资料信息的表单,所有表单字段都是可选的(不是必需的)。

我的问题是我正在尝试遍历所有表单字段,任何为空的表单字段都将分配值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,而已填写的字段将被分配给用户放入表单的内容,然后在数据库中进行更新。

谢谢您的帮助。

2 个答案:

答案 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'];