MySQL Datenbank insert into geht nicht (mehr)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL Datenbank insert into geht nicht (mehr)

    Hallo php Resource Leute,

    ich habe nen großes Problem. Also fange ich mal ganz vorne an. Ich habe eine Tabelle mit Kunden. Diese besteht aus ziemlich vielen Feldern. u.a. Text, timestamp, id (auto_increment), vorname, nachname usw....

    Beim updaten der Kunden geht alles Problemlos. update XXX set XXX where kndnummer XXX

    Komischerweise kann ich seit neustem nichts mehr in meine Tabelle eintragen. In der MySQL Tabelle habe ich lediglich ein varchar (25) Feld hinzugefügt was aber gar nicht in dem insert into angesprochen wird...

    Hier mal der (abgekürzte, habe noch überprüfungen ob was eingetragen ist usw.) Quellcode:

    Code:
    else{
     $kndnummer = $_POST['kndnummer'];
     $paket = $_POST['paket'];
     $anrede = $_POST['anrede'];
     $vorname = $_POST['vorname'];
     $nachname = $_POST['nachname'];
    $eintragung = "INSERT INTO kunden(kndnummer,paket,anrede,vorname,nachname) 
    VALUES('$kndnummer','$paket','$anrede','$vorname','$nachname')";
     
     if(mysql_query($eintragung))
    {echo '<p align="center">Kundendaten erfolgreich eingetragen.<br /><br /><a href="kundenuebersicht.php';
     echo '">Zurück</a></p>';
     }
     
    else
     
    {
     echo '<p align="center">
     Beim eintragen des Kunden trat leider ein Fehler auf.<br /><br /><a
     href="kundenuebersicht.php">Zurück</a></p>';
     }
     
     }

  • #2
    Hallo,

    das passiert typischerweise dann, wenn man der neuen Spalte keinen Standardwert verpasst, sie aber gleichzeitig als NOT NULL definiert. Würdest du dir die Fehlermeldungen der DB ansehen, wüsstest du das aber bereits.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hier fehlt übrigens das sehr wichtige Escaping der Daten. Hat wohl jemand vergessen, darf aber nicht passieren.

      PHP: SQL Injection - Manual

      Kommentar


      • #4
        Die Tabelle hat nur Felder mit dem Typ NULL und nirgends Standardwerte gesetzt...
        Muss ich jetzt für jedes Feld einen Standardwert setzten? Die Felder sollen ja leer sein wenn ich nicht übergeben. Wenn ich einen neuen Kunden anlege und keine Handynummer habe bleibt das Feld mobil ja selbstverständlich leer...

        Wie löse ich das ganze jetzt am besten...

        Achja Danke für die schnelle Antwort

        Kommentar


        • #5
          Ja wegen dem escaping... das wäre zwar sinnvoll habe ich aber noch nicht eingebaut da sich das ganze in einem geschütztem Loginbereich befindet. Auf den habe derzeit nur ich Zugriff

          Kommentar


          • #6
            Zitat von Baracuda-man Beitrag anzeigen
            Ja wegen dem escaping... das wäre zwar sinnvoll habe ich aber noch nicht eingebaut da sich das ganze in einem geschütztem Loginbereich befindet. Auf den habe derzeit nur ich Zugriff
            Der Schutz vor SQL-Injections ist nur ein Aspekt. Das Escaping garantiert dir aber auch die fehlerlose Verarbeitung von diversen Sonderzeichen. Hast du zB. ein Hochkomma in einem Wert (zB: D'Agostino als Nachname) zerhaust du dir deine Datenbankabfrage und verursachst einen Fehler.

            Kommentar


            • #7
              So ich bins nochmal...

              habe gerade mal zum Spaß versucht manuell einen Datensatz in die MYSQL Tabelle einzufügen..

              Dabei hat er mir ein Error gebracht das die "id" (auto_increment) 127 schon vergeben ist. Diese ist in der Tat schon vergeben. Danach habe ich versucht eine manuelle ID anzugeben. Dabei wollter er wieder nichts eintragen wegen der ID 127.

              Habe jetzt den Eintrag mit der ID 127 manuell verändert und ihm die ID 100 gegeben (100 war ein Kunde den ich gelöscht hatte)

              Aber normal hätte sowas doch nicht passieren dürfen...

              Jetzt geht zumindest wieder das eintragen

              -----UPDATE-----

              Egal welche ID ich ändere sobald ich einen neuen Eintrage bekommt dieser die ID 127...
              Versuche ich dann einen neuen Eintrag zu erstellen will MYSQL ihm wider die ID 127 geben!!!!!!!!
              ALTER LEUTE WAS GEHT DA AB...
              Zuletzt geändert von Baracuda-man; 19.01.2011, 18:02.

              Kommentar


              • #8
                Ist die Spalte vielleicht ein SIGNED TINYINT? Hier kann der Wert nicht größer als 127 sein.

                Kommentar


                • #9
                  Natürlich...

                  Das Feld ID ist nen TyniInt Feld (gewesen) und deswegen ging auch mein insert Into nicht mehr... Habe jetzt alle Änderungen Rückgängig gemacht und die Original Insert Into Funktion wieder eingebaut...

                  Und ES FUNKTIONIERT WIEDER

                  Danke dir, auf sowas blödes hätte ich auch kommen können...

                  Habe jetzt das Feld auf Int (4) gesetzt 9999 Kunden werde ich wohl nicht erreichen :-D

                  Oder sollte ich noch was ändern?

                  Ansonsten DANKE AN EUCH ALLE ! ! !


                  -------------------Kann geschlosssen werden-------------------------
                  Zuletzt geändert von Baracuda-man; 19.01.2011, 18:15.

                  Kommentar


                  • #10
                    INT(4) bedeutet nicht, dass die Zahl auf 4 Stellen limitiert ist. Die Zahl in INT() ist in den meisten Fällen sogar bedeutungslos.

                    Kennst du übrigens den Satz "640K ought to be enough for anybody"?

                    Kommentar


                    • #11
                      Nein den Spruch kannte ich noch nicht,

                      was ist denn sonst mit der Zahl gemeint... Naja ich werds auch so herrausfinden können. Aber auf das Problem mit TinyInt hätte ich selbst drauf kommen können... Fragt sich nur wie lange das gedauert hätte :-D

                      Kommentar


                      • #12
                        das ist die Anzahl Bytes für die Spalte - in dem Fall des Integer bedeuten 4 Byte

                        Mit Vorzeichen von -2.14 Mrd bis +2.14 Mrd (-2^31 bis 2^31-1
                        Ohne Vorzeichen von 0 bis 4,29 Mrd ( 0 bis 2^32-1)

                        und demzufolge genug Platz für alle Kunden, die dir in den nächsten 3000 Jahren begegnen werden ^^

                        Und der Spruch mit den 640K(Bytes) stammt glaub ich vom IBM-Vorstand, als Kritiker anmerkten, das Speicherkonzept des IBM-PC (1980) sei ungenügend -

                        man sollte allerdings wissen, dass die ersten Serien des IBM-PC noch mit 256 KByte Speicher kamen - und die Leute durchaus mit den damaligen Anwendungen (mehr oder weniger) komfortabel arbeiten konnten ... Aber damals wurden Programme auch noch in erster Linie auf geringen Speicherbedarf optimiert.

                        Ich finde allerdings den Spruch des DEC-Chefs etwa 24 Jahre zuvor viel besser: "ich schätze den WELTWEITEN Bedarf an Computern auf ca DREI" (wohlgemerkt nicht 300 oder 3000 .. 3 - aber der dachte da an Ungetüme ála Enigma, der soviel Strom verbrauchte, wie eine 50000-Einwohner-Stadt)
                        [font=Verdana]
                        Wer LESEN kann, ist klar im Vorteil!
                        [/font]

                        Kommentar


                        • #13
                          Zitat von eagle275 Beitrag anzeigen
                          das ist die Anzahl Bytes für die Spalte - in dem Fall des Integer bedeuten 4 Byte
                          Nein, ist sie nicht.

                          Wenn du ZEROFILL verwendest, ist das die Anzahl der Stellen, die mit 0 aufgefüllt werden.

                          Angenommen du hast INT(4), dann wird aus einer 1 0001. Bei INT(5) 00001, INT(6) 000001, usw.

                          Ein INT hat _immer_ 4 Byte, egal welche Zahl du da reinschreibst.

                          Kommentar

                          Lädt...
                          X