2017-07-04 1 views
1

Ich habe eine Seite, um Daten zu bearbeiten. In diesem Fall zeige ich die Seite an, um französische Daten zu bearbeiten. Das Problem ist, dass, wenn ich den Text in Französisch einfügen und klicken, um zu bearbeiten und zu aktualisieren, nimmt es mysql_error an. Dies geschieht nur mit Französisch und Englisch, ich kann es richtig in Portugiesisch tun. Ich benutze nur diese Baumsprachen.Fehler beim Versuch, Text in Französisch/Englisch zu mysql db zu aktualisieren

Ich habe einige Wege versucht, aber nichts passierte ... Was kommentiert ist, ist das, was ich ausprobiert habe.

Wenn ich die Taste drücke, passiert Folgendes: "Ocorreu umo, tente de novo! Sie haben einen Fehler in Ihrer SQL-Syntax; prüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion für die richtige Syntax in der Nähe entspricht 'ont forcé à travailler comme apprenti à l'Usine d'orfèvrerie de son' at line 1"

<?php 
    session_start(); 
    $cookie_name = "loggedin"; 
    if (isset($_COOKIE[$cookie_name])){ 
     $cookie_value = $_COOKIE[$cookie_name]; 
    }else { 
     echo "O seu tempo expirou, inicie sessão novamente!"; 
     header("Refresh:2; url=/estagio/admin/login.php"); 
    } 

    ini_set ('default_charset', 'UTF-8'); 


    mysql_set_charset('utf8'); 

    //header ("content-type: text/html; charset=utf-8"); 

    //mysql_query("SET NAMES 'utf8'"); 
    //mysql_query("SET character_set_connection=utf8"); 
    //mysql_query("SET character_set_client=utf8"); 
    //mysql_query("SET character_set_results=utf8"); 

    mysql_connect ("localhost", "root", "") or die ("Erro na conexão " .mysql_error()); 
    mysql_select_db ("casadoadro") or die ("Erro na seleção da base de dados " .mysql_error()); 


    $editid = $_GET['eid']; 

    if (!isset($_GET['eid']) || empty($_GET['eid'])){ 
     header ("location: admin_biografia.php"); 
    } 

    $editquery = mysql_query("select * from tb_biografia where id='{$editid}'") or die (mysql_error()); 
    $editdata = mysql_fetch_row($editquery); 


    if ($_POST) 
    { 
     $id = htmlspecialchars ($_POST['id']); 
     $title_fr = htmlspecialchars ($_POST['title_fr']); 
     $subtitle_fr = htmlspecialchars ($_POST['subtitle_fr']); 
     $text_fr = htmlspecialchars ($_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>"; 
     } 
    } 
?> 

<html> 
    <head> 
     <meta charset="UTF-8"> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> 
     <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css"> 
     <link rel="stylesheet" type="text/css" href="/estagio/css/styles.css"> 
     <title>Casa do adro</title> 
    </head> 
    <body> 
     <div class="col-2"></div> 
     <div class="col-8"> 
       <div class="col-12 w3-card-4 nopadding"> 
        <form method="post" class="w3-container w3margin" enctype="multipart/form-data"> 
         <input type="hidden" name="size" value="10000000" /> 
         <div class="w3-row mtb"> 
          <div class="w3-col" style="width:150px">ID</div> 
          <div class="w3-rest"> 
           <?php echo $editdata[0]; ?> 
           <input class="w3-input w3-border" type="hidden" name="id" value="<?php echo $editdata[0]; ?>"> 
          </div> 
         </div> 
         <div class="w3-row mtb"> 
          <div class="w3-col" style="width:150px">Título FR</div> 
          <div class="w3-rest"> 
           <input class="w3-input w3-border" type="text" name="title_fr" value="<?php echo $editdata[2]; ?>"> 
          </div> 
         </div> 
         <div class="w3-row mtb"> 
          <div class="w3-col" style="width:150px">Legenda FR</div> 
          <div class="w3-rest"> 
           <input class="w3-input w3-border" type="text" name="subtitle_fr" value="<?php echo $editdata[6]; ?>"> 
          </div> 
         </div> 
         <div class="w3-row mtb"> 
          <div class="w3-col" style="width:150px">Texto FR</div> 
          <div class="w3-rest"> 
           <div class="w3-rest"> 
           <textarea class="w3-input w3-border" rows="1" type="text" name="text_fr"><?php echo $editdata[9]; ?></textarea> 
          </div> 
          </div> 
         </div> 

         <button class="btnfbform w3-block mtb w3-ripple w3-input w3-border" type="submit" name="upload"> Editar texto</button> 
        </form> 
       </div> 
      </div> 
      <div class="col-2"></div> 
     </body> 
</html> 
+0

ändern Sie einfach diese 'title_fr = '{$ title_fr}'' mit 'title_fr = '". $ Title_fr. "'' Es wird funktionieren. –

+0

Vielen Dank, für Ihre Antwort –

+0

sind Sie herzlich willkommen und jetzt können Sie meine Antwort überprüfen :) –

Antwort

0

Ersetzen Sie Ihren Code mit diesem. Ich hoffe es hilft. Vielen Dank. Verwenden Sie mysql_real_escape_string, um Sonderzeichen zu entfernen, und entfernen Sie {} in Ihrer Abfrage für die PHP-Variable.

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>"; 
    } 
} 
+0

Vielen Dank, für Ihre Antwort –

+0

Sie sind herzlich willkommen Jacinto Cruz. – Gyan

0

TL; DR htmlspecialchars($_POST['text_fr]', ENT_QUOTES) verwenden oder einige SQL-Bibliothek

Der Text in $ title_fr, $ text_fr verwenden oder eine andere sizulare Variable enthält wahrscheinlich ein einfaches Anführungszeichen ('), das Ihre Abfrage durcheinanderbringt.

Nehmen wir an, der Wert von $_POST['text_fr'] ist C'est la vie.

Dann wird die resultierende Abfrage aussehen etwas wie folgt aus:

UPDATE tb_biografia SET text_fr='C'est la vie' WHERE id='10' 

Wie Sie sehen, das Zitat, die die Zeichenfolge und das Zitat in der Zeichenfolge begrenzen sollte sich zusammen mischt und die resultierende Abfrage ist vollständig ungültig. Selbst der Syntax-Highliter hier im Stack-Overflow ist dadurch verwirrt.

Dies ist eine große Sicherheitslücke, die SQL-Injection-Angriffe ermöglicht. Erstellen Sie niemals SQL-Abfragen von Benutzereingaben selbst, wenn Sie nicht vollkommen sicher sind, dass Sie wissen, was Sie tun. Das Problem in Ihrem Fall ist das Verhalten der Funktion htmlspecialchars. Es entkoppelt standardmäßig keine einfachen Anführungszeichen, sondern nur doppelte Anführungszeichen. Siehe http://php.net/manual/en/function.htmlspecialchars.php. Sie müssen das zweite Argument ENT_QUOTES angeben, damit auch einfache Anführungszeichen codiert werden.

$text_fr = htmlspecialchars ($_POST['text_fr'], ENT_QUOTES); 

Viva la PHP!

Allerdings empfehle ich Ihnen wirklich ein Tool zu verwenden, die mit dem Aufbau der Abfrage hilft und schützt vor ähnliche Fehler:

  • PDO und vorbereitete Anweisungen (Teil von PHP-Kern)
  • NotORM, Dibi, SQL query builder ... leichtgewichtige Bibliotheken zur einfacheren Manipulation mit SQL-Datenbanken
  • Doktrin oder ähnliches ORM-Framework - für schweres Heben bei größeren Projekten.
+0

Vielen Dank, für Ihre Antwort –

0

Sie passieren den Wert wie '{$title_fr}', die einen Fehler produzieren
gerade diese es wird

title_fr='{$title_fr}' 

mit

title_fr='".$title_fr."' 

ändern arbeiten.

Verwandte Themen