wucher wichtel: Wo steckt der Fehler? (bin ich blind?)

Hallo!

Ich habe gerade ein Problem mit einer eigentlich einfachen Abfrage. Aber irgendwo steckt angeblich ein Fehler, und ich sehe ihn nicht. Hier der Quelltext:

  
echo "<p>".$_POST['titel']."</p>";  
  
$sql = 'INSERT INTO blogentry  
                        (inhalt)  
                    VALUES  
                        ("'.$_POST["inhalt"].'")  
                    WHERE  
                        titel = "'.$_POST["titel"].'"';  
mysql_query($sql) OR die(mysql_error());  

Dabei kommt dann folgendes heraus:
##################################
XSS

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE titel = "XSS"' at line 5
##################################

Also stimmt der Wert für titel (XSS). Aber es kommt trotzdem eine Fehlermeldung, obwohl auch die Verschachtelung der Anführungszeichen eigentlich stimmen, oder? Oder mache ich etwas anderes falsch?

ciao, ww

--
Ein japanisch-deutsches Gedicht
sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
  1. Hello,

    Ich habe gerade ein Problem mit einer eigentlich einfachen Abfrage. Aber irgendwo steckt angeblich ein Fehler, und ich sehe ihn nicht. Hier der Quelltext:

    [code]
    echo "<p>".$_POST['titel']."</p>";

    $sql = 'INSERT INTO blogentry
                            (inhalt)
                        VALUES
                            ("'.$_POST["inhalt"].'")
                        WHERE
                            titel = "'.$_POST["titel"].'"';

    echo $sql;

    mysql_query($sql) OR die(mysql_error());

    Das sollte weiterhelfen.

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hallo!

      Danke für deine Antwort.

      echo $sql;

      Das sollte weiterhelfen.

      Ich poste mal das Ergebnis:
      ##########################
      XSS

      INSERT INTO blogentry (inhalt) VALUES ("ganz viel Inhalt") WHERE titel = "XSS"

      You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE titel = "XSS"' at line 5
      ##########################

      Ich kann leider immer noch keinen Fehler entdecken!?

      ciao, ww

      --
      Ein japanisch-deutsches Gedicht
      sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
  2. Hi wucher!

    Also stimmt der Wert für titel (XSS). Aber es kommt trotzdem eine Fehlermeldung, obwohl auch die Verschachtelung der Anführungszeichen eigentlich stimmen, oder?

    Die Verschachtelung ist richtig. Allerdings solltest du bei Strings in SQL-Abfragen immer Singlequotes nehmen ("'"):
    ... WHERE titel = '".$_POST["titel"]."'";

    Mehr dazu kannst du MySQL-Referenzhandbuch unter Strings nachlesen.

    Oder mache ich etwas anderes falsch?

    Ja. Dein Script ist anfällig für SQL-Injektion.
    Mehr dazu findest du auch im gleichnamigen Artikel von php.net: SQL-Injektion

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. Hallo!

      Oder mache ich etwas anderes falsch?
      Ja. Dein Script ist anfällig für SQL-Injektion.
      Mehr dazu findest du auch im gleichnamigen Artikel von php.net: SQL-Injektion

      Danke! Werde ich mir durchlesen :)

      ciao, ww

      --
      Ein japanisch-deutsches Gedicht
      sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
  3. Tach.

    $sql = 'INSERT INTO blogentry
                            (inhalt)
                        VALUES
                            ("'.$_POST["inhalt"].'")
                        WHERE
                            titel = "'.$_POST["titel"].'"';

      
    Was soll denn INSERT INTO ... WHERE ... bewirken? Entweder fügst du etwas neu in die Datenbank ein oder aktualisierst mit UPDATE einen bestehenden Datensatz.  
    
    -- 
    Once is a mistake, twice is jazz.
    
    1. Hallo!

      Was soll denn INSERT INTO ... WHERE ... bewirken? Entweder fügst du etwas neu in die Datenbank ein oder aktualisierst mit UPDATE einen bestehenden Datensatz.

      Ok. Danke an euch 4! UPDATE kannte ich noch nicht. Danke schön!

      ciao, ww

      --
      Ein japanisch-deutsches Gedicht
      sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
  4. Hallo,

    $sql = 'INSERT INTO blogentry
                            (inhalt)
                        VALUES
                            ("'.$_POST["inhalt"].'")
                        WHERE
                            titel = "'.$_POST["titel"].'"';

    Hm, gibt es INSERT INTO ... WHERE ...? Füge einen Datensatz ein, aber nur wenn bei dem das Feld titel = "XSS" ist? Kommt Dir das logisch vor ;-)? Setzt Du nicht den Inhalt des Feldes titel beim Einfügen erst?

    Meinst Du vielleicht UPDATE?

    viele Grüße

    Axel