【问题标题】:Rich Text Editors Not Saving Certain Inputs from TextArea to MySQL富文本编辑器不将某些输入从 TextArea 保存到 MySQL
【发布时间】:2019-03-04 20:41:28
【问题描述】:

作为构建内容管理应用程序的一部分,我遇到了无法调试的问题:

我在一个由富文本编辑器修改的表单中创建了一个 textarea 字段。我尝试了一些编辑器:TinyMCE、SummerNote 和其他一些编辑器,两次都得到了相同的结果。

在 90% 的情况下,数据提交正常。在 10% 的情况下,我需要测试一大块文本 + 格式 + 图像,当我提交表单时,它会执行与提交时相同的所有操作,但没有发生实际的数据库写入,什么都没有记录或保存。

例如,我可能会复制/粘贴此页面的主要内容:https://knowledge.hubspot.com/articles/kcs_article/cms-blog/create-and-publish-a-blog-post 作为用户可能输入的 lorem ipsum 的“错误”示例,并且不会保存。但是,如果我只粘贴第一步(从“创建新博客文章”到第一张图片的正下方),它可以很好地保存它。极长的纯文本保存良好。

数据已正确清理(我认为):

      $itemname = $_POST['itemname'];
      $itemcomment = $_POST['textarea_content'];

      $query = "INSERT INTO `table`.`items` (`itemname`, `itemcomment`) VALUES ('$itemname', '$itemcomment');";

 mysql_query($query);

数据作为longtext字段编码utm8mb4_bin保存在“itemcomment”下的数据库中。

有时有效,有时无效。

我没有找到任何错误日志。整个post 似乎在某些输入下消失得无影无踪。

甚至不知道从哪里开始调试或问题可能是什么。也许我引入的一些粗略格式没有正确清理?

【问题讨论】:

  • 我建议更多的包含问题而不是 mysql。
  • 第一个错误显示include(): Failed opening ..... in .../u/index.php on line 61, referer: .../insert_item.php
  • @Tuckbros 很好,我想我没有正确阅读。这似乎是一个完全不相关的问题。我删除了那行代码(不同的功能),再次测试,错误没有出现,但上面描述的错误确实出现了。带有“ASDFASDF”的帖子会通过,但长富文本格式不会。日志中没有记录错误。
  • 不推荐使用mysql_query,您可以尝试在变量上使用mysql_real_escape_string(不推荐使用mysql_query)来保护您的查询。它可以防止sql注入(可能富文本的某些字符对sql不安全。
  • 而且您似乎可以在编辑器中嵌入一些图片等,您应该考虑在数据库中使用文本以外的其他内容,或者使用 base64_encode 对数据进行编码,但您需要解码它们以备后用。

标签: php mysql textarea form-submit wysiwyg


【解决方案1】:

关于您的问题,您可以寻求不同的解决方案

保持数据库不变

  $itemname = base64_encode($_POST['itemname']);
  $itemcomment = base64_encode($_POST['textarea_content']);

但您需要阅读后base64_decode才能获得原始内容。

更改数据库中的数据类型

为您的itemcomment 列选择blob 或等效数据类型(我让您了解如何编写插入) 您当然需要“准备”查询。

【讨论】:

  • 这成功了!我都做了。将 db 列类型更改为 blob 本身并不能解决问题,但是一旦我使用博客进行编码/解码,它似乎就解决了问题。我将假设我使用的 copypasta 文本测试有一些格式没有被正确转义,编码/解码或多或少隐藏了这个问题。
  • 作为推论,在 MySQL 中处理字符串之前是否对字符串进行 base64 编码以防止 SQL 注入?
  • 不是专家,但我想说是的,因为编码的字符串只包含字母数字值(带有“+”、“/”和“=”)。所以没有引号、双引号、冒号、分号或者我不知道要插入的文本字符串中的其他字符可以解释为查询。详细信息:stackoverflow.com/questions/26791906/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多