【问题标题】:Store json data as array in database将json数据作为数组存储在数据库中
【发布时间】:2020-01-15 14:02:28
【问题描述】:

我正在开发一个用户可以填写他/她的个人资料的项目。因此,在存储用户的社交媒体链接时,我有一个 json 文件,其中包含名称、favicon、url 等所有引用。所以我可以使用 json_decode foreach 它并显示一个文本字段。但是如何将数据库中输入的所有链接存储为 json 格式并使用完整的 URL 检索它们。

这是json文件

{
  "facebook": {
    "icon": "fab fa-facebook",
    "title": "Facebook",
    "url": "https://facebook.com/%s"
  },
  "instagram": {
    "icon": "fab fa-instagram",
    "title": "Instagram",
    "url": "https://instagram.com/%s"
  }
}

这就是我的显示方式

 <?php foreach($available_buttons as $key => $button):  ?>
       <div class="col-md-4 mb-3">
            <div class="form-group">
                 <label ><i class="<?= $button->icon ?> mr-2"></i> <?= $button->title ?></label>
                 <input type="text" name="buttons[<?= $key ?>]" class="form-control" />
            </div>
       </div
 <?php endforeach; ?>

我正在使用 json_encode 处理它并将其提交给 db

$buttons = json_encode(clean_array($_POST['buttons']));

在干净的数组函数中传递数据

function clean_array(Array $data) {
    foreach($data as $key => $value) {
        $data[$key] = filter_var($data, FILTER_SANITIZE_STRING);
    }

    return $data;
}


但是当我尝试提交时,我在数据库中得到了错误,例如“{'instagram': 'false', 'instagram': 'false'}”

我该怎么做?

【问题讨论】:

  • 帖子名称不正确 "buttons[= $key ?>]" 。您正在传递具有动态值的名称,但您正在保存与该名称不匹配的结果 "$_POST['buttons']"
  • 不使用 echo for $key,您可以简单地用等号包裹它来回显它 = $key ?>,这不是问题
  • 我不是在说回声功能。讲述名称中的动态值
  • 问题已编辑
  • 请在提交表单后检查您的 $_POST['buttons'] 值,并显示给我们

标签: php mysql json


【解决方案1】:

您可以将数据以 JSON 格式存储在数据库中,然后再次从数据库中获取并使用 json_decode 进行转换。 MySQL 支持 JSON 数据类型。看看这个链接。

https://dev.mysql.com/doc/refman/5.7/en/json.html

【讨论】:

    【解决方案2】:

    filter_var() 失败时可以返回 FALSE,请查看文档: https://www.php.net/manual/en/function.filter-var.php

    作为第一个参数,您应该传递标量或字符串,但您传递数组 $data(数组不是标量),因此 filter_var 失败并返回 false。 也许你想传递 $value?

    例如你的函数应该是什么样子的例子

    function clean_array(Array $data) {
        foreach($data as $key => $value) {
            $data[$key] = filter_var($value, FILTER_SANITIZE_STRING);
        }
    
        return $data;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-07
      • 2014-02-18
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多