Alkatar: Insert into fehler

Guten Abend,
ich arbeite immoment an einem Script, wo Leute Daten eingeben können und diese dann in die Datenbank kommen. also hab ich mich drangesetzt und dashier gemacht:

mysql_connect($DB_HOST, $DB_USER, $DB_PASS);
mysql_select_db($DB_NAME);
$sql = "insert into 'mil' values ('',$grade,'$frage','$ant1','$ant2','$ant3','$ant4','$richtig')";
$result=mysql_query($sql);

Das verbinden klappt einwandfrei. Jetzt das Problem:
$result ist leer
In der Datenbank ist nichts eingetragen worden
und wenn ich den Befehl

insert into 'mil' values ('',50,'kil','fghj1','cbvnant2','ant3','ant4','drichtig')

in meinem phpmyadmin ausführe kommt die folgende Fehlermeldung:

#1064 - 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 ''mil' values ('',50,'kil','fghj1','cbvnant2','ant3','ant4','drichtig')' at line 1

ich hoffe mir kann da jemand helfen

mfg
Alkatar

PS:
Hier noch die Tabellenstruktur:
Field           Type        Key    Default       Extra
id          int(11)   PRI   NULL         auto_increment
grade2          int(11)      0
frage2          text
ant1          varchar(120)
ant2          varchar(120)
ant3          varchar(120)
ant4          varchar(120)
antrichtig  varchar(10)

  1. Hallo,

    insert into 'mil' values ('',50,'kil','fghj1','cbvnant2','ant3','ant4','drichtig')

    Lass mal die Hochkommata um mil weg …

    Gruß
    Olaf

    1. Hallo,

      insert into 'mil' values ('',50,'kil','fghj1','cbvnant2','ant3','ant4','drichtig')

      Lass mal die Hochkommata um mil weg …

      Gruß
      Olaf

      Funktioniert auch nich -.- und @ Rob:
      danke für den tipp mit dem Code
      mit den Spaltenangaben im insert gehts auch net

      1. Hi!

        mit den Spaltenangaben im insert gehts auch net

        Nein. Das war auch nicht zu erwarten.
        Der Fehler liegt darin, daß du deinen Tabellennamen in Quotes gefasst hast.

        Die Syntax lautet:
        INSERT INTO tabelle (spalten) VALUES (werte)
        und nicht:
        INSERT INTO 'tabelle' (spalten) VALUES (werte)

        (Wobei du das (spalten) auch weglassen könntest.)

        Schöner Gruß,
        rob

        1. Hi!

          mit den Spaltenangaben im insert gehts auch net
          Nein. Das war auch nicht zu erwarten.
          Der Fehler liegt darin, daß du deinen Tabellennamen in Quotes gefasst hast.

          Die Syntax lautet:
          INSERT INTO tabelle (spalten) VALUES (werte)
          und nicht:
          INSERT INTO 'tabelle' (spalten) VALUES (werte)

          (Wobei du das (spalten) auch weglassen könntest.)

          Schöner Gruß,
          rob

          Wie gesagt, das funktioniert genausowenig-.-

          1. Hi!

            Wie gesagt, das funktioniert genausowenig-.-

            Und du bekommst noch immer genau die gleiche Fehlermeldung?
            Da du in deinem Script ja alle Rückgabewerte ignorierst und keinerlei Fehlermeldungen ausgibst, solltest du das noch mal in PHPMyAdmin versuchen und schauen, ob sich die Fehlermeldung eventuell geändert hat.

            Das mit den Quotes um deinen Tabellennamen ist in jedem Fall schon einmal falsch gewesen und hätte zu der von dir geposteten Fehlermeldung führen müssen.

            Schöner Gruß,
            rob

            1. Hi!

              Wie gesagt, das funktioniert genausowenig-.-
              Und du bekommst noch immer genau die gleiche Fehlermeldung?
              Da du in deinem Script ja alle Rückgabewerte ignorierst und keinerlei Fehlermeldungen ausgibst, solltest du das noch mal in PHPMyAdmin versuchen und schauen, ob sich die Fehlermeldung eventuell geändert hat.

              Das mit den Quotes um deinen Tabellennamen ist in jedem Fall schon einmal falsch gewesen und hätte zu der von dir geposteten Fehlermeldung führen müssen.

              Schöner Gruß,
              rob

              Jetzt versteh ich endgültig nixmehr...
              im phpmyadmin funktioniert das so aber in meinem php prog net obwohl das (fast) identisch ist(bis auf die Variablen)

              1. Hi!

                Wie gesagt, das funktioniert genausowenig-.-
                Und du bekommst noch immer genau die gleiche Fehlermeldung?
                Da du in deinem Script ja alle Rückgabewerte ignorierst und keinerlei Fehlermeldungen ausgibst, solltest du das noch mal in PHPMyAdmin versuchen und schauen, ob sich die Fehlermeldung eventuell geändert hat.

                Das mit den Quotes um deinen Tabellennamen ist in jedem Fall schon einmal falsch gewesen und hätte zu der von dir geposteten Fehlermeldung führen müssen.

                Schöner Gruß,
                rob

                Jetzt versteh ich endgültig nixmehr...
                im phpmyadmin funktioniert das so aber in meinem php prog net obwohl das (fast) identisch ist(bis auf die Variablen)

                Aha jetzt funktionierts plötzlich kp warum aber es funzt Danke euch für eure Hilfeeeee
                mfg
                Alkatar

                1. Ich hab das nächste problem, eigendlich schon wieder das gleiche, nur ich hab jetzt eine Tablle die heißt 50, eine die heißt 100, eine heißt 200 usw.
                  So nun habe ich hierdas wobei $grade aus einem optionfeld geholt wird, in dem halt 50, 100 oda 200 usw. steht:

                  $sql="insert into $grade values ('','$frage','$ant1','$ant2','$ant3','$ant4','$richtig')";
                  $result=mysql_query($sql);

                  $result ist mal wieder leer

                  Die Tabelle:
                  Feld         Typ        Kollation   Extra
                  id        int(11)                auto_increment
                  frage        text       latin1_german2_ci
                  ant1        varchar(120)    latin1_german2_ci
                  ant2        varchar(120)    latin1_german2_ci
                  ant3        varchar(120)    latin1_german2_ci
                  ant4        varchar(120)    latin1_german2_ci            antrichtig   varchar(10)     latin1_german2_ci

                  So sehen alle der Tabellen aus
                  mfg
                  Alkatar

                  PS: phpmyadmin meldet bei
                  insert into 50 values ('','gf','df','fd','ert','fg','kjl'):

                  #1064 - 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 '50 values ('','gf','df','fd','ert','fg','kjl')' at line 1

                  1. Ich hab das nächste problem, eigendlich schon wieder das gleiche, nur ich hab jetzt eine Tablle die heißt 50, eine die heißt 100, eine heißt 200 usw.
                    So nun habe ich hierdas wobei $grade aus einem optionfeld geholt wird, in dem halt 50, 100 oda 200 usw. steht:

                    Du hast Tabellen mit Zahlen als Namen?
                    Das würde ich lassen... :-)

                    Nick

                    --
                    --------------------------------------------------
                    http://www.xilp.eu
                    XILP Internet Links People
                    Dein persoenliches privates Netzwerk
                    aus Freunden, Verwandten, Bekannten und Kollegen.
                    --------------------------------------------------
                  2. Hi!

                    Ich hab das nächste problem,

                    Ja, da gibt es einiges an Problemen.
                    Wie ich bereits sagte, darfst du niemals Variablen ungeprüft übernehmen und in deine Abfragen einbauen.

                    So nun habe ich hierdas wobei $grade aus einem optionfeld geholt wird, in dem halt 50, 100 oda 200 usw. steht:
                    $sql="insert into $grade values ('','$frage','$ant1','$ant2','$ant3','$ant4','$richtig')";

                    Was ist denn jetzt, wenn jemand per URL (oder vielleicht auch per POST-Request) einen anderen Wert übergibt?
                    Dann werden dort Einträge in eine andere Tabelle gemacht.
                    Und da du keine Spaltennamen mit angibst, so wie ich das empfohlen habe, würde es wohl keine Fehlermeldung geben, sondern der Eintrag würde dann wohl gemacht werden...

                    Du mußt alle Daten, die von außen kommen, grundsätzlich als böse ansehen.
                    Niemals darfst du damit so - ungeprüft und unbereinigt - weiterarbeiten.
                    Ich habe dir da bereits einen Link gepostet...
                    Schau dir auch mal das an: http://de.wikipedia.org/wiki/SQL-Injektion

                    Mit einem Script wie deinem, ist es nicht besonders schwer, die Kontrolle über deine Datenbank zu übernehmen und mal eben ein paar Tabellen zu killen.
                    Das ist wirklich fahrlässige Programmierung.

                    $result=mysql_query($sql);
                    $result ist mal wieder leer

                    Und es gibt keine Fehlermeldung?
                    Wieso fängst du die Fehler nicht ab?
                    Zumindest zu Testzwecken solltest du das tun:
                    $result=mysql_query($sql) or die( "Fehler: " . mysql_error() );

                    PS: phpmyadmin meldet bei
                    insert into 50 values ('','gf','df','fd','ert','fg','kjl'):

                    #1064 - 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 '50 values ('','gf','df','fd','ert','fg','kjl')' at line 1

                    Deine Tabelle heißt wirklich "50"?
                    Das ist aber gar nicht gut...
                    Prinzipiell ist das zwar erlaubt, aber ich würde dir doch stark davon abraten, einfach nur eine Zahl als Tabellennamen zu verwenden.
                    Hier liegt auch dein Problem.
                    Setze den Tabellennamen in Backticks, dann müßte es funktionieren:
                    INSERT INTO 50 VALUES ('','gf','df','fd','ert','fg','kjl');
                    Aber halt Backticks und keine Single-Quotes. Dann bekommst du wieder die Fehlermeldung, die du vorher hattest...

                    Außerdem beendest du dein Statements mit einem Doppelpunkt anstelle eines Semikolons.

                    Schöner Gruß,
                    rob

  2. Hi!

    mysql_connect($DB_HOST, $DB_USER, $DB_PASS);
    mysql_select_db($DB_NAME);

    Interessieren dich die Rückgabewerte dieser Funktionen nicht?

    $sql = "insert into 'mil' values ('',$grade,'$frage','$ant1','$ant2','$ant3','$ant4','$richtig')";

    Entferne die Quotes um den Tabellennamen. Dann wird deine Abfrage sicherlich funktionieren.

    Aber: Warum gibst du die Spalten eigentlich nicht mit an? Das mußt du nicht unbedingt tun, wäre aber besser, um eventuelle Fehler zu vermeiden.

    $result=mysql_query($sql);

    Wieso fängst du eventuell auftretende Fehler nicht ab?

    Außerdem befürchte ich, daß du deine Variablen einfach ungeprüft in deine Abfrage einbaust (oder du hast den entsprechenden Codeteil verschwiegen).
    Das darfst du niemals tun!
    Ansonsten darfst du dich nicht wundern, wenn mal jemand deine Tabellen killt oder sonstwas macht.

    Aus den FAQ der Newsgroups de.comp.lang.php.*:
    Wie kann ich bösartigen Code in SQL-Abfragen unterbinden?

    Schöner Gruß,
    rob