为什么nicEdit所见即所得编辑器有时会阻止发送值


Why nicEdit WYSIWYG editor sometimes prevent sending value exactly?

我在项目的管理控制面板上使用了nicEditor。但是有一些奇怪的事情
当我想发送一个值插入数据库时,它工作得很好。但在编辑页面中,当我想处理从文本区域发送的值时,只会发送插入文本区域的第一个值,如果我想更改这个值,在下一页中,我会再次获得第一个值
这是我用来将所有文本区域转换为nicEditor的代码。

bkLib.onDomLoaded(function() { nicEditors.allTextAreas() });

现在想象一下,我有一个由数据库中存储的值组成的表单,如下所示:

<textarea name="description"><?php echo $description; ?></textarea>

如果$description的值是123,并且我将其更改为1234然后提交表单,则$_POST['description']发送的值是123,这是不正确的。但是,当我删除加载nicEditor的第一行时,发送的值会更改为1234,这是正确的。

怎么了?

编辑:
这是我的第一页:

<?php
$id = $_GET['id'];
$sql = "SELECT * FROM tbl_hotels WHERE id = ?";
$q = $db->prepare($sql);
$q->execute(array($id));
$result = $q->fetch();
$des = $r['des'];
?>
<form action="process.php" method="post">
  <textarea name="des" class="large-input"><?php echo $des; ?></textarea>
  <input type="submit" value="send">
</form>

这就是我在下一页中所做的:

<?php
$des = $_POST['des'];
echo $des;
?>

直接从他们的网站上获取http://nicedit.com/docs.php

Nicedit不再处于积极开发中,您可以尝试CKEditor或TinyMCE。

也就是说,你最有可能以其他方式提交表单,而不是正常提交,因此编辑器不会与你的<textarea>同步,你可以尝试在提交前启动以下代码进行同步。

[nicInstance].saveContent()

  • 仅对于正在替换的nicInstance。此方法将编辑器的内容与textarea值同步。如果提交了带有原始表单的表单,则会自动执行此操作。但是,您可能需要自己明确地进行同步

编辑:

JS-

var myform = document.getElementById('myForm');
myform.addEventListener('submit', function() { 
    var myEditor = nicEditors.findEditor('myEditor');
    myEditor.saveContent(); 
    return true;
});

PHP

<form action="process.php" method="post" id="myForm">
  <textarea name="des" class="large-input" id="myEditor"><?php echo $des; ?></textarea>
  <input type="submit" value="send">
</form>

因为niceEditor操作不同。将niceEditor添加到文本区域时。

bkLib.onDomLoaded(function() { nicEditors.allTextAreas() });

niceEditor隐藏所有文本区域,并添加新的内容可编辑div,而不是文本区域。当您输入任何文本(如123)时,niceEditor会将其作为<span>&nsub123</span>的html格式。当您尝试用粗体显示文本<span style='bold'>123</span>时。在您的问题中,当您输入123时,niceEditor会使用类似&nsub;123的输入文本添加隐藏空间&nsub;。因此,当您发布此文本时,必须通过htmlentities()ANDmysql_real_escape_string()转换文本。此外,当从数据库检索这些文本时,您必须通过html_entity_decode()函数解码这些文本。

<?php
$id = $_GET['id'];
$sql = "SELECT * FROM tbl_hotels WHERE id = ?";
$q = $db->prepare($sql);
$q->execute(array($id));
$result = $q->fetch();
$des = html_entity_decode($r['des']);
?>

<?php
   $des = htmlentities($_POST['des']);
   echo $des;
?>