Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将HTML保存到MySQL数据库是动态内容生成器的好方法吗?_Html_Mysql_Database - Fatal编程技术网

将HTML保存到MySQL数据库是动态内容生成器的好方法吗?

将HTML保存到MySQL数据库是动态内容生成器的好方法吗?,html,mysql,database,Html,Mysql,Database,我有一个新项目即将推出,我必须从头开始创建一个自定义内容编辑器(我将使用Laravel和Vue JS)。每个条目都有一个由块定义的结构,这些块中有富文本、内容字段。这将是所需布局的一个示例: 我的问题是:如何在数据库中创建这些块类型(标题、副标题、三列行…)和字段?我认为用占位符将HTMLstructure字段保存到block\u types数据库表就可以了 HTML长文本保存到数据库中,放入块类型的结构字段中 <div class="row"> <div class

我有一个新项目即将推出,我必须从头开始创建一个自定义内容编辑器(我将使用Laravel和Vue JS)。每个条目都有一个由
块定义的结构,这些块中有富文本、内容
字段
。这将是所需布局的一个示例:

我的问题是:如何在数据库中创建这些
块类型
(标题、副标题、三列行…)和
字段
?我认为用占位符将HTML
structure
字段保存到
block\u types
数据库表就可以了

HTML长文本保存到数据库中,放入块类型的结构字段中

<div class="row">
    <div class="col-4">///// CONTENT</div>
    <div class="col-4">///// CONTENT</div>
    <div class="col-4">///// CONTENT</div>
</div>

/////内容
/////内容
/////内容
然后,我会按顺序将内容动态添加到
///content
占位符中。这看起来很麻烦,所以我想我可能从一开始就陷入了一个棘手的境地,有什么建议吗

PS:这将是我目前拥有的数据库结构:


将HTML保存到数据库几乎从来都不是一个好主意。CMS提供了一个富文本界面,用户可以在其中使用简单的标记(粗体、列表等)设置文本样式

在数据库中存储标记的基本问题是,由于它在数据库中是硬编码的,所以您会对它的结构感到拘束

例如,如果有一天您决定其中一个存储的
div
标记应该具有特定的类,该怎么办?或数据属性。您必须更新每一行,或者更糟糕的是,仍然会通过JS影响DOM中的更改,这意味着视图中生成的HTML与您存储的内容并不匹配

存储标记还意味着存储比您可能需要的数据更多的数据,并且具有所有这些间隔

更好的方法是定义一个块系统,使用一个专用的块表,该表通过外键引用父UI表。所以可能是这样的:

表1:UI(一个界面,标签集合,如您的示例所示)

表2:区块

---------------------------------
| id | ui_id | parent_id | type |
---------------------------------
表2将是递归的,因为它将存储表示父容器的块和其中的子块:

  • 外部块(容器)将通过
    UI\u ID
  • 子块将通过
    parent\u id
对于
类型
,您可以在这里采用这种方法并使用它运行。也许这是一个字符串,表示它应该是什么类型的块(例如“全宽”、“网格-x3”等等)

当然,您可以通过类似PHP或JS的方式在视图中呈现这些数据,再次递归地确保获得所有嵌套级别

让我们运行一些示例数据。我们现在只使用一种“类型”的块,一个简单的“div”

UI表:

----------------------------
| id | ...other fields ... |
----------------------------
| 1  | ...                 |
----------------------------
块表:

---------------------------------
| id | ui_id | parent_id | type |
---------------------------------
| 1  | 1     | null      | div  |
---------------------------------
| 2  | 1     | 1         | div  |
---------------------------------
| 3  | 1     | 2         | div  |
---------------------------------
表示嵌套块的三个级别,即渲染时:

---------------------
| ----------------- |
| | ------------- | |
| | |           | | |
| | ------------- | |
| ----------------- |

希望这能为您提供一个起点。

将HTML保存到数据库几乎从来都不是一个好主意。CMS提供了一个富文本界面,用户可以在其中使用简单的标记(粗体、列表等)设置文本样式

在数据库中存储标记的基本问题是,由于它在数据库中是硬编码的,所以您会对它的结构感到拘束

例如,如果有一天您决定其中一个存储的
div
标记应该具有特定的类,该怎么办?或数据属性。您必须更新每一行,或者更糟糕的是,仍然会通过JS影响DOM中的更改,这意味着视图中生成的HTML与您存储的内容并不匹配

存储标记还意味着存储比您可能需要的数据更多的数据,并且具有所有这些间隔

更好的方法是定义一个块系统,使用一个专用的块表,该表通过外键引用父UI表。所以可能是这样的:

表1:UI(一个界面,标签集合,如您的示例所示)

表2:区块

---------------------------------
| id | ui_id | parent_id | type |
---------------------------------
表2将是递归的,因为它将存储表示父容器的块和其中的子块:

  • 外部块(容器)将通过
    UI\u ID
  • 子块将通过
    parent\u id
对于
类型
,您可以在这里采用这种方法并使用它运行。也许这是一个字符串,表示它应该是什么类型的块(例如“全宽”、“网格-x3”等等)

当然,您可以通过类似PHP或JS的方式在视图中呈现这些数据,再次递归地确保获得所有嵌套级别

让我们运行一些示例数据。我们现在只使用一种“类型”的块,一个简单的“div”

UI表:

----------------------------
| id | ...other fields ... |
----------------------------
| 1  | ...                 |
----------------------------
块表:

---------------------------------
| id | ui_id | parent_id | type |
---------------------------------
| 1  | 1     | null      | div  |
---------------------------------
| 2  | 1     | 1         | div  |
---------------------------------
| 3  | 1     | 2         | div  |
---------------------------------
表示嵌套块的三个级别,即渲染时:

---------------------
| ----------------- |
| | ------------- | |
| | |           | | |
| | ------------- | |
| ----------------- |

希望这能为您提供一个起点。

使用XSS,您将面临一场噩梦。看看OWASP的XSS过滤器规避。我们有一个相当重要的网站,由于数据库中的HTML,为XSS注入而强化它一直是一场噩梦。可悲的是,发明自己的标记(如BB代码)也无助于你。真正的罪魁祸首是标记。数据格式(BB代码、JSON等等)和持久性技术(数据库、上传区域中的文件)是不相关的。您必须在输入时过滤脚本标记,这比看起来要困难得多。看,你在用XSS做噩梦。看看OWASP的XSS过滤器规避。我们有一个相当重要的网站,由于数据库中的HTML,为XSS注入而强化它一直是一场噩梦。可悲的是,发明自己的标记(如BB代码)也无助于你。真正的罪魁祸首是标记。数据格式(BB代码、JSON等)和持久性技术(数据库、上传区域中的文件)是不可更改的