更新MySQL文本字段行时生成不需要的反斜杠

时间:2012-11-19 03:56:53

标签: php html mysql forms post

我的代码是通过textarea更新MySQL表行(同一页面上的所有代码)。更新表单(HTML部分)在PHP if语句中回显。当用户单击“编辑”按钮时,会弹出一个textrea(使用Javascript)。他们输入更新并点击提交,然后立即在MySQL数据库和网站上更新它。这是代码:


PHP(回声HTML表格)

echo "<span id=\"about_me\">".$row['aboutme']."</span><span style=\"font-size:10px;\"><a id=\"popup\">Edit</a></span></p>
    <form style\"display:none;\" method=\"post\">
    <textarea rows=\"5\" cols=\"31\" id=\"area\" name=\"about_update\" style=\"display:none\" placeholder=\"Type 140 characters or less and press submit.\"></textarea>
    <input style=\"display:none;\" type=\"submit\" id=\"aboutsubmit\" value=\"Submit\" />
    </form>";

PHP

if (isset($_POST['about_update'])) {
    $about_update = $mysqli->real_escape_string($_POST['about_update']);
    $update = "UPDATE tbl_name SET aboutme='$about_update' 
        WHERE firstname='$firstname' && lastname='$lastname'";
    $mysqli->query($update);
}

除了使用撇号之外,它都能正常运行,它会在它前面放置一个\。 MySQL中aboutme行的类型是TEXT btw。为什么textarea会生成此\

1 个答案:

答案 0 :(得分:1)

如果您无法访问php.ini文件,则以下函数应该有效:

function escapeString($value){
global $mysqli;
  if(get_magic_quotes_gpc()){
    $value=stripslashes($value);
  }
  $value=$mysqli->real_escape_string($value);
  return $value;
}

确保在打开数据库连接后放置该功能:)

而不是你的

$mysqli->real_escape_string();

$someVariable=escapeString($variableYouWantToEscspe);

希望这有效!

编辑:正在发生的事情是撇号被魔术引用一次性转义,然后转义的字符串被real_escape_string函数再次转义。你想要做的是只有当魔术引号插入它们时才删除任何反斜杠(首先是if语句)然后转义字符串,或者如果魔术引号没有打开,只需转义字符串:)