Javascript 尝试将法语/英语文本更新为mysql数据库时出错

Javascript 尝试将法语/英语文本更新为mysql数据库时出错,javascript,php,html,css,mysql,Javascript,Php,Html,Css,Mysql,我有一页可以编辑数据。在本例中,我将显示编辑法语数据的页面。问题是,当我用法语粘贴文本并单击进行编辑和更新时,它假设mysql\u错误。这只发生在法语和英语中,我可以用葡萄牙语做。我只使用这种树语言 我试过一些方法,但什么都没发生。。。 所评论的是我所尝试的 当我按下按钮时,会发生这样的情况:“Ocorreu um erro,tente de novo!您的SQL语法有错误;请查看与您的MariaDB服务器版本对应的手册,以了解在第1行的“ont forcéa travailler comme

我有一页可以编辑数据。在本例中,我将显示编辑法语数据的页面。问题是,当我用法语粘贴文本并单击进行编辑和更新时,它假设mysql\u错误。这只发生在法语和英语中,我可以用葡萄牙语做。我只使用这种树语言

我试过一些方法,但什么都没发生。。。 所评论的是我所尝试的

当我按下按钮时,会发生这样的情况:“Ocorreu um erro,tente de novo!您的SQL语法有错误;请查看与您的MariaDB服务器版本对应的手册,以了解在第1行的“ont forcéa travailler comme Appentia l'usine d'orfèvrerie de son”附近使用的正确语法。”


TL;DR使用
htmlspecialchars($\u POST['text\u fr]',ENT\u引号)
或使用一些SQL库

$title\u fr、$text\u fr或其他siilar变量中的文本可能包含一个单引号字符('),这会打乱您的查询

假设
$\u POST['text\u fr']
的值是
C'est la vie

然后,生成的查询看起来有点像这样:

UPDATE tb_biografia SET text_fr='C'est la vie'  WHERE id='10'
如您所见,应该分隔字符串的引号和字符串本身中的引号混合在一起,结果查询完全无效。即使是堆栈溢出的语法HighlL也被这一点弄糊涂了

这是一个导致SQL注入攻击的巨大安全漏洞。如果您不能完全确定自己知道自己在做什么,请不要自己根据用户输入编写SQL查询

本例中的问题是函数
htmlspecialchars
的行为。默认情况下,它不转义单引号,只转义双引号。看见您需要提供第二个参数,ENT_引号,以便它也对单引号进行编码

$text_fr = htmlspecialchars ($_POST['text_fr'], ENT_QUOTES);
菲律宾万岁

但是,我确实建议您使用一些有助于构建查询并防止您犯类似错误的工具:

  • PDO和准备好的语句(PHP核心的一部分)
  • NotORM、Dibi、SQL查询生成器。。。轻量级库,便于使用SQL数据库进行操作
  • 条令或类似的ORM框架-用于大型项目的繁重工作

    • TL;DR使用
      htmlspecialchars($\u POST['text\u fr]',ENT\u引号)
      或使用一些SQL库

      $title\u fr、$text\u fr或其他siilar变量中的文本可能包含一个单引号字符('),这会打乱您的查询

      假设
      $\u POST['text\u fr']
      的值是
      C'est la vie

      然后,生成的查询看起来有点像这样:

      UPDATE tb_biografia SET text_fr='C'est la vie'  WHERE id='10'
      
      如您所见,应该分隔字符串的引号和字符串本身中的引号混合在一起,结果查询完全无效。即使是堆栈溢出的语法HighlL也被这一点弄糊涂了

      这是一个导致SQL注入攻击的巨大安全漏洞。如果您不能完全确定自己知道自己在做什么,请不要自己根据用户输入编写SQL查询

      本例中的问题是函数
      htmlspecialchars
      的行为。默认情况下,它不转义单引号,只转义双引号。看见您需要提供第二个参数,ENT_引号,以便它也对单引号进行编码

      $text_fr = htmlspecialchars ($_POST['text_fr'], ENT_QUOTES);
      
      菲律宾万岁

      但是,我确实建议您使用一些有助于构建查询并防止您犯类似错误的工具:

      • PDO和准备好的语句(PHP核心的一部分)
      • NotORM、Dibi、SQL查询生成器。。。轻量级库,便于使用SQL数据库进行操作
      • 条令或类似的ORM框架-用于大型项目的繁重工作

      用此代码替换您的代码。希望能有帮助。谢谢使用mysql_real_escape_字符串对特殊字符进行转义,并删除php变量查询中的{}

      if ($_POST)
      {
          $id = $_POST['id'];
          $title_fr = mysql_real_escape_string($_POST['title_fr']);
          $subtitle_fr = mysql_real_escape_string($_POST['subtitle_fr']);
          $text_fr = mysql_real_escape_string($_POST['text_fr']);
      
          $q = mysql_query ("UPDATE tb_biografia SET title_fr='$title_fr', subtitle_fr='$subtitle_fr', text_fr='$text_fr'  WHERE id='$id}'") or die ("Ocorreu um erro, tente de novo! " .mysql_error());
      
          if($q){
              echo "<script>alert ('Editado com sucesso'); window.location='admin_biografia.php'</script>";
          }
      }
      
      if($\u POST)
      {
      $id=$_POST['id'];
      $title\u fr=mysql\u real\u escape\u字符串($\u POST['title\u fr']);
      $subtitle\u fr=mysql\u real\u escape\u字符串($\u POST['subtitle\u fr']);
      $text\u fr=mysql\u real\u escape\u字符串($\u POST['text\u fr']);
      $q=mysql\u query(“更新tb\u biografia SET title\u fr='$title\u fr',subtitle\u fr='$subtitle\u fr',text\u fr='$text\u fr',其中id='$id}'”)或die(“Ocorreu um erro,tente de novo!”.mysql\u error());
      如果($q){
      echo“alert('Editado com successo');window.location='admin_biografia.php';
      }
      }
      
      用此代码替换您的代码。希望能有帮助。谢谢使用mysql_real_escape_字符串对特殊字符进行转义,并删除php变量查询中的{}

      if ($_POST)
      {
          $id = $_POST['id'];
          $title_fr = mysql_real_escape_string($_POST['title_fr']);
          $subtitle_fr = mysql_real_escape_string($_POST['subtitle_fr']);
          $text_fr = mysql_real_escape_string($_POST['text_fr']);
      
          $q = mysql_query ("UPDATE tb_biografia SET title_fr='$title_fr', subtitle_fr='$subtitle_fr', text_fr='$text_fr'  WHERE id='$id}'") or die ("Ocorreu um erro, tente de novo! " .mysql_error());
      
          if($q){
              echo "<script>alert ('Editado com sucesso'); window.location='admin_biografia.php'</script>";
          }
      }
      
      if($\u POST)
      {
      $id=$_POST['id'];
      $title\u fr=mysql\u real\u escape\u字符串($\u POST['title\u fr']);
      $subtitle\u fr=mysql\u real\u escape\u字符串($\u POST['subtitle\u fr']);
      $text\u fr=mysql\u real\u escape\u字符串($\u POST['text\u fr']);
      $q=mysql\u query(“更新tb\u biografia SET title\u fr='$title\u fr',subtitle\u fr='$subtitle\u fr',text\u fr='$text\u fr',其中id='$id}'”)或die(“Ocorreu um erro,tente de novo!”.mysql\u error());
      如果($q){
      echo“alert('Editado com successo');window.location='admin_biografia.php';
      }
      }
      
      您传递的值类似于
      “{$title\u fr}”
      ,这将产生一个错误
      改变这个

      title_fr='{$title_fr}' 
      


      它会起作用的

      您传递的值类似于
      “{$title\u fr}”
      ,这将产生一个错误
      改变这个

      title_fr='{$title_fr}' 
      


      它会起作用的

      只需将此
      title\u fr='{$title\u fr}'
      更改为
      title\u fr=''.
      即可。谢谢,欢迎您的回答,现在您可以检查我的答案:)只需将此
      title\u fr='{$title\u fr}'
      更改为
      title\u fr='.
      即可。谢谢,谢谢,谢谢你的回答谢谢,谢谢你的回答谢谢,谢谢你的回答谢谢,谢谢你的回答谢谢,谢谢你的回答谢谢,谢谢你的回答