thomas: Kann den Fehler nicht finden...

Hey!

Ich hab hier dieses Skript bei dem ich einen User in eine Datenbank eintragen möchte, der ein Forumlar abgeschickt hat.
In die Datenbank wird aber auch nach mehreren Fehlersuchen nichts eingetragen.
Vielleicht findet von euch einer hier den Fehler ;-)
Hier ein Auszug aus dem Skript: (Die Verbindung zur DB wurde bereits in einer Include-Datei hergestellt)

$res = mysql_query("INSERT INTO asc_users (username, password, email, group) VALUES (
      '".$_REQUEST['asc_user']."',
      '".md5($_REQUEST['asc_pass'])."',
      '".$_REQUEST['asc_email']."',
      '".$_REQUEST['asc_group']."')");

Lg thomas

  1. Hallo Thomas,

    was gibt denn MySQL für einen Fehler zurück?

    Gruß
    Olaf

    P.S.: Du weisst, was SQL-Injection ist?

    1. Hallo,

      was gibt denn MySQL für einen Fehler zurück?

      Keinen, es wird nur kein neuer Eintrag in der DB angelegt ;-)

      P.S.: Du weisst, was SQL-Injection ist?

      Nein, weiß ich nicht

      Lg thomas

      1. Hallo,

        was gibt denn MySQL für einen Fehler zurück?

        Keinen, es wird nur kein neuer Eintrag in der DB angelegt ;-)

        Fragst Du mysql_error() oder mysql_errno() ab oder woher weisst Du das.

        P.S.: Du weisst, was SQL-Injection ist?
        Nein, weiß ich nicht

        SQL-Injection ist eine der häufigsten und ernstesten Sicherheitslücken bei Internetanwendungen.

        Gruß
        Olaf

        1. Hallo,

          Fragst Du mysql_error() oder mysql_errno() ab oder woher weisst Du das.

          Ok, nachdem ich diese beiden Funktionen befragt habe bekomme ich folgende Meldung:
          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 'group) VALUES ( 'test', '098f6bcd4621d373cade4e832627b4f6', ' at line 1

          Leider kann ich mit der Meldung nichts anfangen, da ich dennoch nicht weiß wo der Fehler liegt.
          Das mit den Injections werde ich demnächst beachten, danke dafür.

          Lg thomas

          1. hi,

            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 'group) VALUES ( 'test', '098f6bcd4621d373cade4e832627b4f6', ' at line 1

            Leider kann ich mit der Meldung nichts anfangen, da ich dennoch nicht weiß wo der Fehler liegt.

            group ist als Feldname keine sonderlich gute Wahl, weil group ein reserviertes Wort ist.

            Du kannst es aber, wenn es sein muss (gut ist's wie gesagt nicht) trotzdem benutzen, in dem du es in allen Queries entsprechend "quotest" - durch Backticks um den Namen.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
          2. Hallo Thomas,

            Ok, nachdem ich diese beiden Funktionen befragt habe bekomme ich folgende Meldung:
            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 'group) VALUES ( 'test', '098f6bcd4621d373cade4e832627b4f6', ' at line 1

            Du verwendest

            group

            als Spaltenname, group ist aber reserviert, deswegen musst Du es mit Backticks maskieren:

              
            INSERT INTO asc_users (  
                username,  
                password,  
                email,  
                `group`  
            ) VALUES (  
            [...]  
            )
            

            Noch besser ist es meiner Meinung nach auf die Verwendung von reservierten Wörtern als Bezeichner zu verzichten.

            Freundliche Grüße

            Vinzenz

          3. Hallo,

            Ok, nachdem ich diese beiden Funktionen befragt habe bekomme ich folgende Meldung:
            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 'group) VALUES ( 'test', '098f6bcd4621d373cade4e832627b4f6', ' at line 1

            Zumindest eines sagt Dir diese Fehlermeldung: Du hast ein syntaktisches Problem. Folge am besten dem guten Rat von Vinzenz, das SQL erst in eine Variable zu speichern und diese dann auszugeben. Vielleicht findest Du dann schon selber einen Fehler oder Du postest einmal das SQL, bei dem der obrige Fehler auftritt.

            Leider kann ich mit der Meldung nichts anfangen, da ich dennoch nicht weiß wo der Fehler liegt.
            Das mit den Injections werde ich demnächst beachten, danke dafür.

            Das ist ein guter Vorsatz. Sobald man die ersten Schritte unternommen hat, sollten de Themen Debugging und Security ganz oben auf der Fortbildungsliste stehen.

            Gruß
            Olaf

            1. … oder Du wartest auf die kompetenten Bemerkungen anderer SelfHTMLler, die den Fehler eins-zwei-drei finden ;-)

              Gruß
              Olaf

      2. Hallo Thomas,

        was gibt denn MySQL für einen Fehler zurück?
        Keinen, es wird nur kein neuer Eintrag in der DB angelegt ;-)

        P.S.: Du weisst, was SQL-Injection ist?
        Nein, weiß ich nicht

        Dann empfehle ich Dir den Handbuchabschnitt SQL-Injection, wobei dieser Abschnitt nicht gut genug ist :-(

        Besser ist es, die Eingabedaten mit mysql_real_escape_string() zu behandeln, nachdem gegebenenfalls in Abhängigkeit der Einstellung von magic_quotes_gpc vorher stripslashes() auf die Daten angewandt werden muss (wie es auch bei mysql_real_escape_string() steht.

        Noch besser wäre es mit prepared Statements zu arbeiten, wie sie die neuere MySQL-Unterstützung mysqli zur Verfügung stellt: mysqli_prepare() und Verlinkungen im genannten Abschnitt.

        Nächster Schritt wäre die Nutzung eines Datenbankabstraktionslayers ...

        Ach ja, zurück zu Deinem Ausgangsproblem:
        Grundsätzlich ist es eine gute Idee, die SQL-Anweisung zuerst in einer Zeichenkettenvariablen zusammenzubauen. Deren Inhalt kann man sich wunderbar zu Debugzwecken ausgeben oder loggen lassen. Sowas kann ungemein helfen - die Ausgabe von mysql_error() selbstverständlich auch.

        Freundliche Grüße

        Vinzenz

  2. Danke an Olaf, Vinzenz und wahsaga für ihre Hilfe.
    Wenn man von den reservierten Wörtern nichts weiß, kann man ja lange nach dem Fehler suchen ;-) Aber mit Hilfe des Forums war es in 30min. erledigt.

    Lg thomas

  3. $res = mysql_query("INSERT INTO asc_users (username, password, email, group) VALUES (
          '".$_REQUEST['asc_user']."',
          '".md5($_REQUEST['asc_pass'])."',
          '".$_REQUEST['asc_email']."',
          '".$_REQUEST['asc_group']."')");

    Lg thomas

    Hi,

    denk dran die Requests zu quoten sonst gibst Du SQL-Inections eine Chance!