如果超过512字节,TextArea不会保存到mySQL

时间:2012-07-18 12:11:10

标签: php mysql forms textarea html-entities

我一直在寻找年龄,找不到这个确切的问题,但如果有的话,请随时指出正确的方向。

简单描述:有一个页面上有TEXTAREA。这个TEXTAREA接受HTML,因为它用于编辑客户网站的主页。

目的是让这个TEXTAREA保存到一个非常简单的mySQL表中。

问题:问题是如果TEXTAREA超过512个字符,则将保存到数据库字段。根据它,它存储得很好。

以下是代码:

$homeTopLeft = addslashes(htmlentities($_GET['homeTopLeft'], ENT_QUOTES | ENT_IGNORE, "UTF-8"));
$homeNews    = addslashes(htmlentities($_GET['homeNews'], ENT_QUOTES | ENT_IGNORE, "UTF-8"));

mysql_login();

$query = "UPDATE cmsData SET homeTopLeft='$homeTopLeft', homeNews='$homeNews', lastUpdated=NOW() WHERE entry=1";
$result = mysql_query($query) or die(reportError('Unable to save new CMS data'));
if (mysql_affected_rows() > 0) {
    echo '<p class="ok">Pages Successfully Updated!</p>';
    echo '<p style="border:1px dashed #ccc;">homeTopLeft = ' . $homeTopLeft . '</p>';
} else {
    echo '<p class="err">Unable to update the home page</p>';
}

我目前有$ _GET方法,因为我实际上是通过AJAX调用该函数,在512个字符下工作正常。

什么不是 - 它不是mySQL字段大小:它的数据类型是TEXT,我通过phpMyAdmin手动增加了字段而没有错误。 - 这不是(据我所知)AJAX调用,因为如果TEXTAREA是&lt; 512字节 - 整理(我不认为:我将其设置为latin1_general_ci并尝试latin1_bin和部分UFT)

最终注释 由于homeTopLeft调用,字段htmlentities的实际数据库大小必须大于512字节。

我还应该补充一点,无论我是使用简单的TEXTAREA还是tinyMCE富文本编辑器,都会发生这种情况。

感谢您提供的任何帮助。谢谢!

3 个答案:

答案 0 :(得分:5)

GET请求有一个大小限制。对于像这样的大事,请使用POST

答案 1 :(得分:1)

如果您在ajax中使用GET方法,则无法将如此多的数据传递给服务器,将其更改为POST,一切都会正常工作。

您可以在此处找到有关该内容的简短概述:http://www.boutell.com/newfaq/misc/urllength.html

答案 2 :(得分:0)

对addslashes使用mysql_real_escape_string(htmlentities())。 htmlentities通常不应该进入数据库。除此之外,您的数据库应该使用UTF8作为table-charset,因此如果您使用外语字符,排序等将是正确的。

如果相应的字段接受了文本,则大于512字节(!)的文本没有已知问题。