MatthiasN: Formularwerte an Datenbank übergeben

Um ein bestellsystem zu programmieren möchte ich formulareingaben an eine datenbank übergeben. Meiner meinung nach syntaktisch korrekt habe ich folgenden Code geschrieben:

<html>
<head>
<?php
   if ($gesendet)
   {
      $db = mysql_connect("localhost","usr","passwd");

mysql_select_db("datenbank",$db);

$ed = getdate ();

$sql= "INSERT INTO order (firma,  filiale, artikel, artikelnr, anzahl, lieferdatum, notiz)
             VALUES ($fi, $fili, $art, $artnr, $anz, $liefer, $note)";

mysql_query($sql, $db)
     or die('Fehler: ' . mysql_error() . '<br />SQL: ' . $sql);

}
?>
</head>

<body>
Geben Sie einen vollständigen Datensatz ein und senden Sie das
Formular ab:
<form action = "eintragen.php" method = "post">
    <input name="fi"> Firma<p>
    <input name="fili"> für Filiale<p>
    <input name="art"> Artikelbeschreibung<p>
    <input name="artnr"> Bestellnummer (wenn vorhanden)<p>
    <input name="anz"> Anzahl<p>
    <input name="liefer"> Lieferdatum<p>
    <input name="note"> Notiz<p>

<input type="submit" name="gesendet">
    <input type="reset">
</form>
</body>
</html>

Nur wird mir immer wieder folgende Fehlermeldung ausgespuckt:

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 'order (firma, filiale, artikel, artikelnr, anzahl, lieferdatum, notiz) ' at line 1
SQL: INSERT INTO order (firma, filiale, artikel, artikelnr, anzahl, lieferdatum, notiz) VALUES (a,b,c,d,e,f,g)

Auf dem Server läuft Mysql 5, PHP 4/5...

Könnt ihr mir weiter helfen? Besten Dank.

Matthias

  1. $db = mysql_connect("localhost","usr","passwd");

    ich kann kein PHP, es ist aber üblich solche Aktionen auf Erfolg zu prüfen.

    $sql= "INSERT INTO order (firma,  filiale, artikel, artikelnr, anzahl, lieferdatum, notiz)
                 VALUES ($fi, $fili, $art, $artnr, $anz, $liefer, $note)";

    und vor allem keine ungefilterten Werte in einem SQL Befehl zu zulassen, dir ist SQL Injection ein Begriff?

    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 'order (firma, filiale, artikel, artikelnr, anzahl, lieferdatum, notiz) ' at line 1
    SQL: INSERT INTO order (firma, filiale, artikel, artikelnr, anzahl, lieferdatum, notiz) VALUES (a,b,c,d,e,f,g)

    Schau dir mal an, was exakt im insert statement stehen muss.

    Struppi.

    1. Also die werte werden auf jeden fall übergeben, hab ich mit echo $fi etc überprüft...

      die werteüberprüfung baue ich noch ein, will aber erstmal die werte übermittelt bekommen...

      Schau dir mal an, was exakt im insert statement stehen muss.

      Im Insert statement muss doch nur stehen:

      die Tabelle in die der inhalt eingefügt werden soll (order)

      die Spalten (firma, filiale...)

      und nach dem VALUES dann die Werte...

      und all dies hab ich so formuliert... Nur finde ich den fehler nicht, der ein eintragen in die datenbank verhindert...

      1. Also die werte werden auf jeden fall übergeben, hab ich mit echo $fi etc überprüft...

        Das habe ich nie bezweifelt.
        Aber z.b. den connect prüfen ist, wie gesagt üblich und sql injections verhindern ist, wenn dir deine Daten wichtig sind, absolut notwendig.

        Schau dir mal an, was exakt im insert statement stehen muss.

        Im Insert statement muss doch nur stehen:

        Das klingt nicht so als ob du in einer Doku nachgeschaut hast.

        und all dies hab ich so formuliert... Nur finde ich den fehler nicht, der ein eintragen in die datenbank verhindert...

        Naja, die Fehlermeldung hast du doch bereits. Jetzt musst du nur ncoh nachschauen, wie der Befehl richtig lautet.

        Struppi.

  2. echo $begrüßung;

    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 'order (firma, filiale, artikel, artikelnr, anzahl, lieferdatum, notiz) ' at line 1
    SQL: INSERT INTO order (firma, filiale, artikel, artikelnr, anzahl, lieferdatum, notiz) VALUES (a,b,c,d,e,f,g)

    Das INSERT-Statement hat keine ORDER-Klausel. Die Stelle, mit der etwas im Statement nicht stimmt steht in der Fehlermeldung immer direkt nach dem "near".

    Du verwendest ein reserviertes Wort als Tabellennamen. Verzichte darauf oder kennzeichne ihn als Bezeichner.

    echo "$verabschiedung $name";