2

Updated 我在表单中提供的文本区域将用户输入作为字符串

包含双引号的字符串在 DB 中插入不完整..

我在文本区域中插入了一个字符串

“不要太担心布局/设计/文本大小,我们通常会为您的横幅“增添趣味”(即粗体、斜体、间距)以获得更好的整体外观。

当我将字符串插入数据库时​​,字符串结束于

不要太担心布局/设计/文本大小,我们经常会

并且被部分插入。我应该怎么做才能允许插入所有的单引号和双引号?

应要求编辑

下面是我使用 php 插入数据库的查询

“插入 products_description (products_id, products_name, products_logo_name1, products_logo_name2, products_logo_name3, products_description) 值 ('" . (int)$products_id . "', 'banner_" . $products_id . "','".$_POST['logoimage1' ]."', '".$_POST['logoimage2']."', '".$_POST['logoimage3']."', '".mysql_real_escape_string($_POST['description'])."') "

这里 mysql_real_escape_string($_POST['description']) 没有转义双引号,因此在插入时会截断应该做什么?

4

5 回答 5

5

转义字符串中的双引号,如下所示:

$theString = "Hello, i wonder what all these \"quotes\" are doing in here...";

反斜杠将告诉编译器忽略后面双引号的“含义”,并将其视为普通字符(这就是我们所说的“转义”)。

在使用用户输入时还要检查mysql_real_escape_string()(这将自动转义字符串中的所有危险元素,以便在 mySQL 数据库中使用)。

于 2010-09-15T09:50:38.950 回答
3

大声笑
还没有阅读整个问题,但我确定我知道答案

它被插入到数据库中,然后被检索到,然后进入HTML 表单的字段值...... ;-)

好吧,说真的。
您必须一步一步地跟踪您的数据。
您的应用程序中有一些邪恶的代码,这会产生一些邪恶的东西。
您必须遵循您的数据流并检查它在哪个阶段被破坏
只需在这些步骤中打印您的数据:

  • 收到表单数据后
  • 在插入数据库之前
  • 从数据库中检索后
  • 在打印回表格之前

这是您的普遍错误:您将多阶段过程视为一个步骤。
你看到你的字符串被插入到 textarea 中,下次你在这个 textarea 中看到它被截断了。你认为这是数据库问题。虽然您不能这么确定 - 有许多步骤不涉及数据库。将您的应用程序视为一个多阶段过程,而不是一个实体块。

于 2010-09-15T09:53:05.387 回答
0

mysql_real_escape_string()如果它来自用户输入,请使用该功能。

mysql_real_escape_string()调用 MySQL 的库函数 mysql_real_escape_string,该函数在以下字符前添加反斜杠:\x00、\n、\r、\、'、" 和 \x1a。

在向 MySQL 发送查询之前,必须始终(除了少数例外)使用此函数来确保数据安全。

于 2010-09-15T09:51:07.623 回答
0

你需要逃避你的报价。

如果您的数据库是 MySQL,请在将所有数据mysql_real_escape_string()保存到数据库之前通过该函数传递所有数据。

如果您不这样做,您将面临代码中存在重大安全漏洞的风险,而不仅仅是数据丢失!

(如果您还没有这样做,您还应该转义其他数据以用于其他目的;例如,应转义发送回浏览器的数据,以防止流氓用户向其添加原始 HTML 或 Javascript 代码来操纵您的地点。

PHP 中有许多函数可以处理添加和删除转义字符以及数据过滤。如果您希望您的网站是安全的,您需要学习这些功能和技术。

[编辑]

看到您的编辑后:

首先,您需要转义查询中的所有字符串,而不仅仅是描述,因此添加转义到$_POST['logoimage1']等,因为如果其中任何一个包含引号,您将遇到同样的问题。

但是描述字段上的转义看起来是正确的,所以我不知道为什么它会被截断。手册页mysql_real_escape_string()声明它转义了双引号和单引号,因此对您来说应该没问题。您可以通过 print() 对完全转义的 SQL 字符串进行测试;这将显示是否有任何未转义的内容。

在黑暗中射击 - 您是否检查过数据库中描述字段的最大长度?这也可能导致字符串截断。虽然不太可能;我想如果你用 textarea 输入,你会设置它足够长。

于 2010-09-15T09:59:04.677 回答
0

根据@COL Sharpnel's Scouldings :-)

感谢 Agauin 让我自责……有时这是必要的

我回应了 $_POST['description'] 并显示为

不要太担心布局/设计/文本大小,我们经常会

当我使用

htmlspecialchars(stripslashes($_POST['description']))

它给了我完整的字符串

“不要太担心布局/设计/文本大小,我们通常会为您的横幅“增添趣味”(即粗体、斜体、间距)以获得更好的整体外观。

> 帖子的道德:不要对意大利面条代码过于自信

于 2010-09-15T11:31:30.467 回答