为什么每当我执行更新MYSQL数据库中任何文本字段的PHP代码时,都会添加额外的空间?

为什么每当我执行更新MYSQL数据库中任何文本字段的PHP代码时,都会添加额外的空间?,php,mysql,text,space,Php,Mysql,Text,Space,我正在建立一个博客网站,在更新MYSQL数据库中的字段时遇到了问题。每当我点击使用PHP的表单上的更新按钮时,它就会在MYSQL文本字段中的文本字符串之前添加额外的空间。以下是PHP代码: //UPDATE TEXT $updated_text = $_POST['text'.$the_post['ID'][$n]]; if ($updated_text != "") { $sql = "UPDATE posts SET TEXT = '".addslashes(

我正在建立一个博客网站,在更新MYSQL数据库中的字段时遇到了问题。每当我点击使用PHP的表单上的更新按钮时,它就会在MYSQL文本字段中的文本字符串之前添加额外的空间。以下是PHP代码:

   //UPDATE TEXT
   $updated_text = $_POST['text'.$the_post['ID'][$n]];
   if ($updated_text != "") {  
     $sql = "UPDATE posts SET TEXT = '".addslashes($updated_text)."' WHERE ID = '".$the_post['ID'][$n]."'";
     $text_result = mysql_query($sql) or die(mysql_error());
   }

谢谢

我不知道为什么会出现此问题,但您可以先尝试使用删除字符串开头和结尾的白色字符:

$updated_text = trim($_POST['text'.$the_post['ID'][$n]]);
如果这解决了问题,那是因为您从表单接收到了这些空白——否则。。。嗯,奇怪^^


还有几点需要注意:

  • 转义数据以将其发送到DB服务器时,应使用特定于DB的函数。这里,您使用的是一个MySQL数据库和
    MySQL.*
    函数,这意味着您应该使用而不是
    addslashes
  • 您正在转义放入
    文本中的数据
    ;但是,为了避免这种情况,您也应该保护
    where
    子句中的数据使用。
    • 如果您的
      ID
      是DB中的char/varchar,这意味着也要在
      $the_post['ID'][$n]
      上使用
      mysql\u real\u escape\u string
    • 如果您的
      ID
      是数据库中的整数:
      • 值周围的引号不是必需的:在SQL中,引号是字符串分隔符;整数不需要任何分隔符
      • 您应该确保您正在向数据库发送一个整数;例如,使用
        intval(_post['ID'][$n])
    • 这不会改变您的问题的任何方面,但注意安全始终是最好的;-)

不确定出现此问题的原因,但可以先尝试使用删除字符串开头和结尾的白色字符:

$updated_text = trim($_POST['text'.$the_post['ID'][$n]]);
如果这解决了问题,那是因为您从表单接收到了这些空白——否则。。。嗯,奇怪^^


还有几点需要注意:

  • 转义数据以将其发送到DB服务器时,应使用特定于DB的函数。这里,您使用的是一个MySQL数据库和
    MySQL.*
    函数,这意味着您应该使用而不是
    addslashes
  • 您正在转义放入
    文本中的数据
    ;但是,为了避免这种情况,您也应该保护
    where
    子句中的数据使用。
    • 如果您的
      ID
      是DB中的char/varchar,这意味着也要在
      $the_post['ID'][$n]
      上使用
      mysql\u real\u escape\u string
    • 如果您的
      ID
      是数据库中的整数:
      • 值周围的引号不是必需的:在SQL中,引号是字符串分隔符;整数不需要任何分隔符
      • 您应该确保您正在向数据库发送一个整数;例如,使用
        intval(_post['ID'][$n])
    • 这不会改变您的问题的任何方面,但注意安全始终是最好的;-)

可能是html的文本区域标记的问题-例如,如果它缩进左右..

可能是html的文本区域标记的问题-例如,如果它缩进左右..

我发现空的mySQL字段正在将“”插入我的html表单值中,因此我使用:

$variable=trim($variable,“”)


修剪不需要的空间。

我发现空的mySQL字段将“”插入到我的html表单值中,因此我使用:

$variable=trim($variable,“”)


修剪不需要的空间。

如果中间有空格或换行符(在代码编辑器中),请删除它们。我之前也遇到过同样的问题,但现在已经解决了。

如果代码编辑器中有空格或换行符,请删除它们。我之前也遇到过同样的问题,但现在已经解决了。

我建议您将addslashes($updated_text)的结果输出到标记内部的浏览器中。然后,您将看到实际添加的内容。插入前可能需要修剪前导空格。这可能与您的问题没有直接关系,但不要使用addslashes()来转义db输入。至少使用mysql_escape_string()。Addslashes肯定会错过一些内容,并转义一些实际上不需要转义的内容。我建议您将Addslashes($updated_text)的结果输出到标记内部的浏览器。然后,您将看到实际添加的内容。插入前可能需要修剪前导空格。这可能与您的问题没有直接关系,但不要使用addslashes()来转义db输入。至少使用mysql_escape_string()。Addslashes肯定会错过一些东西,而逃避一些实际上不需要逃避的东西;IDE自动格式化我的代码,并在开始和结束标记之间添加空格,这让我感到惊讶…+1;IDE自动格式化我的代码,并在开始和结束标记之间添加空格,这让我感到惊讶。。。