textarea 未提交到数据库

Posted

技术标签:

【中文标题】textarea 未提交到数据库【英文标题】:textarea not submitting into database 【发布时间】:2012-12-15 22:17:02 【问题描述】:

我有一个表单正在尝试提交到我的 mysql 数据库中,它提交的所有记录都可以接受我博客表中的“内容”字段。

我不确定这是否重要,但我正在使用来自 nicedit.com 的 textarea 框架

更新:我已经删除了 NicEdit 框架,并且它作为普通文本区域提交时效果很好,我不确定现在该去哪里我会尝试将我的支持转移到 NicEdit 并在我找到时发布回复这个问题的解决方案。

但是我遇到了另一个问题并且不想打开关于它的新帖子,我的日期插入为 0000-00-00 而不是当前日期。有什么解决办法吗?

这里是 php post 方法

<?php
include_once"dbconnection.php";
session_start();
$connect = mysql_connect($host, $username, $password) or die (@mysql_error());
$selectdb = mysql_select_db($database, $connect) or die (@mysql_error());
if(isset($_POST['postblog']))
    $blogtitle = $_POST['blogtitle'];
    $blogcontent = $_POST['blogcontent'];
    $author = 'Admin';
    $query = mysql_query("INSERT INTO blog SET date='date()', title='$blogtitle', author='$author', published='1', content='$blogcontent'");
    if ($query == false)
        echo "false";
     else 
        echo "true";
    

?>

html表单

<form action='postblog.php' method='post'>
    <input class="inputMed" type="text" name="blogtitle"> <br />
    <textarea style="width: 600px;" name="blogcontent"></textarea> <br />
    <input type="submit" name="postblog" id="postblog" value="Post Blog" />
</form>

提前致谢

【问题讨论】:

我闻到了 SQL 注入的味道。 Please, don't use mysql_* functions in new code。它们不再维护and are officially deprecated。看到red box?改为了解prepared statements,并使用PDO 或MySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial. 只是猜测,您的“博客内容”中有 MySQL 不喜欢的未转义字符。尝试在插入前清理您的内容。 如果您在编写代码时不担心 MySQL 安全性,那么您就是在为失败做好准备。我建议您阅读准备好的语句,它们是防止 SQL 注入的救星。 @AaronRussell 几乎肯定是在 NicEdit 框架中。请参阅我在下面提供的答案。 对于日期问题,去掉date()周围的引号。他们正在阻止它运行该功能。 【参考方案1】:

您的编辑器可能正在提交不同的变量(或根本不提交)。一种判断方法是让您的 PHP 执行以下操作:

print_r($_REQUEST);

暂时将其放入您的脚本中,以查看提交的内容和名称。如果你看到它,那就太好了。如果您没有看到您的内容,您将知道问题与 PHP 无关,您将不得不查看 nicedit 方面的内容。

【讨论】:

哇,太棒了,这对我进行许多进一步的调试任务很有帮助。谢谢 如果我错了请纠正我,但基本上我把它放在我要放的地方 else echo "true"; 我建议把它放在文件的开头,紧跟在“【参考方案2】:

关于您的HOWEVER 日期问题。您的 'date()' 被解析为字符串而不是函数,并且您尚未定义参数。改为-

$query = mysql_query("INSERT INTO blog SET date='".date('Y-m-d')."', title='$blogtitle', author='$author', published='1', content='$blogcontent'");

或者使用 MySQL NOW()-

$query = mysql_query("INSERT INTO blog SET date=NOW(), title='$blogtitle', author='$author', published='1', content='$blogcontent'");

或者使用 MySQL CURDATE()-

$query = mysql_query("INSERT INTO blog SET date=CURDATE(), title='$blogtitle', author='$author', published='1', content='$blogcontent'");

另请参阅 - PHP function inside single quotes display is as text

【讨论】:

【参考方案3】:

根据这篇文章:NicEdit data not in POST,你需要这样的东西:

<INPUT type=submit name="submit" value="Send" onclick="nicEditors.findEditor('blogContent').saveContent();">

可能是这样的:

var editor = new nicEditors.findEditor('blogContent');
var content = editor.getContent();

这应该为您指明正确的方向。如果您想要一个具体的答案,您需要将您的问题专门针对知道和/或使用 NicEdit 的人,因为您的问题与它 (NicEdit) 如何以非标准方式包装您的 DOM 密切相关。

【讨论】:

他的帖子在哪里说他正在使用 NiceEdit? 在他说“我不确定这是否重要,但我正在使用来自 nicedit.com 的 textarea 框架”的部分。在您阅读您所评论的内容之前,请不要对答案投反对票。 如果文档here 说他们似乎在说什么,将上面的onClick 事件方法添加到您的提交按钮应该可以工作,就像将该方法添加到表单onSubmit 事件一样 嘿@ChrisOstmo 感谢您的回答!在更新我的帖子之前我没有回答你。但你的权利,我会尝试一下,看看它会把我带到哪里。谢谢!【参考方案4】:

对于日期问题,你可以使用mysql currdate 之类的函数

   mysql_query("INSERT INTO blog SET date='DATE: Auto CURDATE()', title='$blogtitle', author='$author', published='1', content='$blogcontent'");

Nicedit 试试这个

   try this code
   <html>
   <head>
    <script src="http://js.nicedit.com/nicEdit-latest.js" type="text/javascript"></script>
    <script type="text/javascript">bkLib.onDomLoaded(nicEditors.allTextAreas);</script>
   </head>

   <body>
    <form action='postblog.php' method='post'>
     <input class="inputMed" type="text" name="blogtitle"> <br />
     <textarea style="width: 600px;" name="blogcontent"></textarea> <br />
     <input type="submit" name="postblog" id="postblog" value="Post Blog" />
   </form>
  </body>
  </html> 

【讨论】:

对于 NicEdit,您是否在 html 中使用多个文本区域?请发布整个 html 代码,因为我多次使用 nicEdit,它工作正常。 当我切换到 MySQLi 并使用准备好的语句时,我的编码发生了很大变化,我宁愿打开另一个主题。我找到了有关此问题的更多有用信息,我附加了所有显示不同形式的 div。现在已经尝试了许多不同的 textarea 插件。而且没有一个在工作,所以我确定这是我附加了我的 div 并且它只是无法识别的事实,因为我注意到的一件事是,在我使用过的所有插件中,它们都没有让我真正点击任何按钮.将尽快发布链接

以上是关于textarea 未提交到数据库的主要内容,如果未能解决你的问题,请参考以下文章

表单数据未提交到服务器

php 提交表单,包含textarea和多张图片

表单提交textarea内容,第一次获取不到值,第二次才能获取到的解决方法:

WangleEditor3提交数据(servlet-jsp)

通过点击“Enter”从textarea提交数据

Tinymce 插件没有获取要上传到数据库的 textarea 值