Knud Schröder: (MySQL) Insert into funktioniert nicht, warum?

Hallo Leute !

Hab ein kleines (?) Problem, bei dem ich nicht wieter weiß:

folgender Script-Ausschnitt funktioniert nicht:

$verbindung = mysql_connect($_server,$_login,$_pass);

$abfrage = "insert into kunden (firma,strasse,plz,ort,branche,tel,fax,email,homepage,background,color,rahmen,emaillink,homepagelink,fett,logo,blz,konto,modus,formular,wertung,bonus,login,password) values ('$firma','$strasse','$plz','$ort','$branche','$tel','$fax','$email','$homepage','$background','$color','$rahmen','$emaillink','$homepagelink','$fett','$logo','$blz','$konto','$modus','$formular','$wertung','$bonus','$login','$password')";

$erg = mysql_db_query($dbname,$abfrage,$verbindung);

$verbindung gibt 1 zurück, also ohne Fehler.
$erg bleibt leer und leider wird kein neuer Datensatz angefügt.
Die Felder sind gefüllt, sollte aber auch egal sein, oder?
Ich spreche das erste Feld nicht an, ist doch richtig, oder? Es soll ja automatisch hochgezählt werden.

Die Struktur der Tabelle sieht folgendermaßen aus:
CREATE TABLE kunden (
   kdnr int(6) DEFAULT '0' NOT NULL auto_increment,
   firma varchar(40) NOT NULL,
   strasse varchar(40) NOT NULL,
   plz varchar(5) NOT NULL,
   ort varchar(40) NOT NULL,
   branche varchar(40) NOT NULL,
   tel varchar(40) NOT NULL,
   fax varchar(40) NOT NULL,
   email varchar(40) NOT NULL,
   homepage varchar(40) NOT NULL,
   background varchar(6) NOT NULL,
   color varchar(6) NOT NULL,
   rahmen char(3) NOT NULL,
   emaillink char(3) NOT NULL,
   homepagelink char(3) NOT NULL,
   fett char(3) NOT NULL,
   logo varchar(40) NOT NULL,
   blz varchar(10) NOT NULL,
   konto varchar(15) NOT NULL,
   modus varchar(20) NOT NULL,
   formular varchar(40) NOT NULL,
   wertung varchar(5) NOT NULL,
   bonus varchar(200) NOT NULL,
   login varchar(20) NOT NULL,
   password varchar(20) NOT NULL,
   datum date DEFAULT '0000-00-00' NOT NULL,
   PRIMARY KEY (kdnr)
);

Wie gesagt, ich bekomme keine Fehlermeldung und auch sonst kein Anzeichen darauf, dass irgendwo ein Fehler liegt. Nur der Satz wird nicht in die Tabelle eingefügt.

Danke schonmal für Eure Hilfe.

Knud

  1. Hi Knud,

    Die Felder sind gefüllt, sollte aber auch egal sein, oder?

    nicht wenn du sie zuvor explizit als NOT NULL deklariert hast!
    da könnte der hund schon begraben sein...

    Ich spreche das erste Feld nicht an, ist doch richtig, oder? Es soll ja automatisch hochgezählt werden.

    das sollte kein problem sein.

    hmmm...schon einmal gecheckt, ob manche felder evtl. mehr zeichen (char) enthalten, als deine deklaration erlaubt?

    Wie gesagt, ich bekomme keine Fehlermeldung und auch sonst kein Anzeichen darauf, dass irgendwo ein Fehler liegt. Nur der Satz wird nicht in die Tabelle eingefügt.

    noch ein punkt: check einmal die dateirechte deiner db...man kann ja nie wissen ;-)

    ich hoffe, das sind brauchbare hinweise, ich 'arbeite' selbst noch nicht lange mit dem system...

    so long...
    /*,*/
    Wowbagger

    1. Hi Wowbagger !

      nicht wenn du sie zuvor explizit als NOT NULL deklariert hast!
      da könnte der hund schon begraben sein...

      Stimmt !
      Momentan nicht getestet (Zeit!, leider!) aber daran wirds liegen, denke ich!
      Ansonsten wird's dann wohl funktionieren, denn dann ist's auch egal, welches Feld man anspricht, wieviele und ob sie gefüllt sind oder nicht.

      Wird wohl Zeit, dass ich langsam mal verstehe, was ich da schreibe *smile*.

      Dank und Grüße,

      Knud

  2. Hallo,

    deine Insert Anweisung enthält weniger Felder als im Table deklariert sind.
    Du mußt die letzten beiden Felder auch in die Insert query mit aufnahmen.
    Es reicht wenn du NULL bei beiden eingibst.

    Also -> ...'$password',NULL,NULL);

    Viel Spaß weiterhin !!!

  3. Hallo Forum !

    Komme leider iommer noch nicht weiter. Trotz der mit Sicherheit richtigen Tipps von Wowbagger (Danke *g*).

    Nachdem ich einfach mal $abfrage ausgegeben habe, kopiert habe und in phpmyadmin ausprobiert habe, musste ich feststellen,
    dass es dort funktioniert hat.
    Dass ich Felder nicht anspreche, spielt also keine Rolle.

    Jetzt liegt es entweder irgendwie an den Hoch-Kommata oder der String ist zu lang ???

    Die Struktur meiner Tabelle sieht jetzt folgendermaßen aus:

    CREATE TABLE kunden (
       kdnr int(6) DEFAULT '0' NOT NULL auto_increment,
       firma varchar(40) NOT NULL,
       strasse varchar(40) NOT NULL,
       plz varchar(8) NOT NULL,
       ort varchar(40) NOT NULL,
       branche varchar(40) NOT NULL,
       tel varchar(40) NOT NULL,
       fax varchar(40),
       email varchar(40) NOT NULL,
       homepage varchar(40),
       background varchar(6) NOT NULL,
       color varchar(6) NOT NULL,
       rahmen char(3),
       emaillink char(3),
       homepagelink char(3),
       fett char(3),
       logo varchar(40),
       blz varchar(12) NOT NULL,
       konto varchar(20) NOT NULL,
       modus varchar(20) NOT NULL,
       formular varchar(40),
       wertung varchar(5),
       bonus varchar(200),
       login varchar(20) NOT NULL,
       password varchar(20) NOT NULL,
       datum date DEFAULT '0000-00-00',
       PRIMARY KEY (kdnr)
    );

    Der PHP-Code für's Schreiben in die Tabelle sieht zur Zeit so aus:

    $verbindung = mysql_connect($_server,$_login,$_pass);
    $abfrage = "insert into kunden ";
    $abfrage .= "(firma,strasse,plz,ort,branche,tel,fax,email,homepage,background,color,rahmen,";
    $abfrage .= "emaillink,homepagelink,fett,logo,blz,konto,modus,formular,wertung,bonus,login,password) ";
    $abfrage .= "values ('$firma','$strasse','$plz','$ort','$branche','$tel','$fax','$email','$homepage',";
    $abfrage .= "'$background','$color','$rahmen','$emaillink','$homepagelink','$fett','$logo','$blz','$konto','$modus',";
    $abfrage .= "'$formular','$wertung','$bonus','$login','$password')";
    $erg = mysql_db_query($dbname,$abfrage,$verbindung);

    $Abfrage sieht optisch korrekt aus und die Felder sind auch nicht zu gross oder zu klein.

    Bin echt dankbar, wenn jemand die Lösung weiss.

    Knud (der zur Zeit echt auf dem Schlauch steht)