簡體   English   中英

mysql創建發布並將圖像和段落存儲在單個表或多個表中

[英]mysql create post and store images & paragraphs in single table or multiple table

我嘗試建立一個包含圖像和段落的文章頁面。

我的問題是我應該為圖像和段落創建2個表格嗎?

或創建一個表並將圖像和段落存儲在一個列中?

*(圖片和段落從上到下的順序)

1.多表

//文章表

id title
1  first post

// image表(易於輸出,但是db會很大)

id article_id src
1  1          abc.jpg

//段落表

id article_id text
1  1          this is first paragraph...

2.單表(在db內存儲標簽,輸出會有xss問題)

//文章表

id  content
1  <p>feff.....</p><img... /><p>efefef</p><img.../>

您的第一種方法的問題在於它沒有順序的概念。 除非您只有一個圖像和一個段落以特定順序排列,否則無法保證正確的順序。 完成這些任務的一種更好的方法是將有類似articlesarticle_contents

//文章

id, title

// article_contents

id, article_id, content_type, body, order

我想您也可能沒有order字段,而是依靠自動增量ID,但是我認為最好對這些內容更明確。

因此,在渲染模板時,您可以執行類似操作。 (這都是偽代碼)

<h1>
    <?= $article->title; ?>
</h1>

<?php
foreach($article->content as $content) {
    // this would be better as a class constant
    if ($content->content_type === 'image') {
        // have a class to handle rendering of images
        echo \Content\Image::render($content->body);
    }

    if ($content->content_type === 'paragraph') {
        // have a class to handle rendering of content, this output will likely need to be purified (see below)
        echo \Content\Paragraph::render($content->body);
    }
}
?>

有很多方法可以做到。

您提到的另一個選項確實有問題,但是您可以通過兩種方式之一來處理XSS問題。

  1. htmlentities(),但您會丟失所有格式()。
  2. HTML Purifier,這將使您可以將某些標簽(如粗體,斜體和段落)列入白名單。 對於第一種解決方案,您也可能需要這樣做,因為沒有任何格式的文章閱讀起來很糟糕。

基於評論的更新:

關於您的第一條評論,如果ID位於兩個單獨的表中,則不能依賴ID,它可能會起作用,但這是一個非常脆弱的解決方案,沒有提供我能想到的任何好處。

至於凈化src標記,您只需配置HTMLpurifier即可驗證src標記,從外觀上,您可以使用指令Core.RemoveInvalidImg HTMLPuirifier內置了很多這些選項,功能非常強大。 有關更多選項/文檔,請參見下面的鏈接。

https://github.com/GordonLesti/Lesti_Blog/tree/master/lib/HTMLPurifier/ConfigSchema/schema

http://htmlpurifier.org/docs/enduser-customize.html

進一步更新:

關於性能。 這就是所謂的“要解決的好問題”。

選擇文章時,您可以緩存結果HTML並將其提供,當數據不經常更改時,無需打擾數據庫。

插入新文章時,您只需要等待並圍繞它構建即可。 您可以執行諸如更新UI和異步更新數據庫之類的操作。 讓用戶了解最新信息,這是最重要的。

更新文章時,請不要忘記使緩存無效。

最主要的是, 這不是您現在需要考慮的真正問題 現在,請放入一個緩存層,當您達到SO的大小時,您可以聘請專業人士來處理這種瘋狂的事情。 請參閱下面的鏈接,這非常有趣。

http://nickcraver.com/blog/2013/11/22/what-it-takes-to-run-stack-overflow/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM