Ankündigung

Einklappen
Keine Ankündigung bisher.

Feldeinträge erzwingen (Feld soll nicht leer sein dürfen)

Einklappen

Neue Werbung 2019

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

  • Feldeinträge erzwingen (Feld soll nicht leer sein dürfen)

    Hi,
    ich habe eine Tabelle angelegt. Dort gibt es u. A. Felder wie Vorname, Nachmame und aber auch Felder die ni cht ausgefüllt werden müssen.

    Ich suche vergeblich nach einer Möglichkeit, dass MySQL die Daten nur einträgt, wenn Pflichtfelder wie Vorname, Nachname ausgefüllt sind. Hierfür dachte ich, gäbe es das "Null" und "Not Null", daher habe ich mit folgendem Befehl:
    ALTER TABLE `user` CHANGE `p_vorname` `p_vorname` VARCHAR( 100 ) CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL COMMENT 'Vorname'
    versucht den Vornamen (p_vorname) so zu setzen, dass der Datensatz nicht eingetragen wird, wenn Vorname nicht ausgefüllt ist. Allerdings auch wenn Vorname frei bleibt, trägt MySQL den Datensatz ohne Probleme ein.

    Mit welchem Befehl kann ich denn MySQL anweisen, dass das Feld "p_vorname" ein pflichtfeld ist und wenn dieses nicht ausgefüllt ist, soll der Datensatz nicht eingetragen werden!


    Danke für eure Hilfe!

  • #2
    Mit dem "NOT NULL" liegst Du schon richtig. Aber ein kleines Beispiel zum Verständnis zu NULL.

    a) es wird NULL eingefügt und wird korrekt abgewiesen
    b) es wird '' eingefügt und korrekt durchgelassen
    c) es wird ' ' (Blank) eingefügt und durchgelassen

    Code:
    CREATE TABLE test_daten (
      name varchar(50) NOT NULL
    );
    
    
    a) mysql> INSERT INTO test_daten VALUES ( NULL );
    ERROR 1048 (23000): Column 'name' cannot be null
    
    b) mysql> INSERT INTO test_daten VALUES ( '' );
    Query OK, 1 row affected (0.06 sec)
    
    c) mysql> INSERT INTO test_daten VALUES ( ' ' );
    Query OK, 1 row affected (0.00 sec)
    
    mysql>
    Grüße
    Thomas

    Kommentar


    • #3
      Zitat von thomas_w Beitrag anzeigen
      Mit dem "NOT NULL" liegst Du schon richtig. Aber ein kleines Beispiel zum Verständnis zu NULL.

      a) es wird NULL eingefügt und wird korrekt abgewiesen
      b) es wird '' eingefügt und korrekt durchgelassen
      c) es wird ' ' (Blank) eingefügt und durchgelassen

      Code:
      CREATE TABLE test_daten (
        name varchar(50) NOT NULL
      );
      
      
      a) mysql> INSERT INTO test_daten VALUES ( NULL );
      ERROR 1048 (23000): Column 'name' cannot be null
      
      b) mysql> INSERT INTO test_daten VALUES ( '' );
      Query OK, 1 row affected (0.06 sec)
      
      c) mysql> INSERT INTO test_daten VALUES ( ' ' );
      Query OK, 1 row affected (0.00 sec)
      
      mysql>
      Grüße
      Thomas
      Hi Thomas,

      kann ich auch irgendwie erreichen, dass '' und ' ' (Blank) abgewiesen werden?

      DAnke für deine Antwort!

      Kommentar


      • #4
        Feld als NOT NULL definieren und ein Trigger drauf legen:

        PHP-Code:
        CREATE TRIGGER check_username BEFORE INSERT ON usertable
            
        FOR EACH ROW BEGIN
                
        IF NEW.username '' THEN
                    SET 
        NEW.username NULL;
                
        END IF;
            
        END
        thomas_w hat ja schon die Erklärung geliefert, der Trigger sollte damit selbsterklärend sein. Wirklich empfehlen tuh ichs aber nicht. Mysql ist nicht unbedingt das DBMS in welchem ich "bussnis logic" implementieren würde.

        Kommentar


        • #5
          Zitat von thomas_w Beitrag anzeigen
          b) es wird '' eingefügt und korrekt durchgelassen

          Code:
          CREATE TABLE test_daten (
            name varchar(50) NOT NULL
          );
          
          
          
          b) mysql> INSERT INTO test_daten VALUES ( '' );
          Query OK, 1 row affected (0.06 sec)
          
          mysql>
          Ehrlich gesagt, finde ich es komisch, dass der INSERT mit dem Wert '' durchgeht. Ich hätte eher geglaubt es wäre NULL. Hier hat MySQL ein ziemlich überraschendes Typecasting. Kurzer Test mit ORACLE ... der b) INSERT wird abgewiesen.

          Kannst Du Deine Pflichtfelder nicht im Skript validieren?

          PHP-Code:
          if (empty($name)) {
           echo 
          "Pflichtfeld" ...

          Die MySQL-Fehlermeldung ist ja auch nicht sehr hilfreich.

          Grüße
          Thomas

          Kommentar


          • #6
            Sehe zwar nicht warum die Datenbank das erst pruefen muss, aber schau mal hier:
            MySQL :: MySQL 5.0 Reference Manual :: 5.1.6 Server SQL Modes
            "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

            Kommentar


            • #7
              Danke für eure Hilfe! Hab es hinbekommen was ich erreichen wollte!


              Danke!

              Kommentar


              • #8
                Wenn du noch schreibst wie sind alle zufrieden
                "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

                Kommentar


                • #9
                  Zitat von Chriz Beitrag anzeigen
                  Wenn du noch schreibst wie sind alle zufrieden
                  Ich habe einen Trigger erstellt der vor dem INSERT prüft, ob die Anzahl der Zeichen der jeweiligen Felder eine bestimmte Zahl über und nicht unterschreiten. Falls ein Feld den Wert über- oder unterschreitet löse ich eine Exception aus und trage die Werte nicht in die DB ein.
                  Somit kann man keine völlig leeren Felder eintragen Denn "NOT NULL" erfasst ja nicht "" oder " ".

                  Grüße

                  Kommentar


                  • #10
                    und über die Exception wird der Client informiert, daß ein Pflichtfeld leer ist?

                    Kommentar


                    • #11
                      Zitat von Harry_X Beitrag anzeigen
                      und über die Exception wird der Client informiert, daß ein Pflichtfeld leer ist?
                      Nicht direkt, der Funktionsumfang von Trigger in MySQL ist sehr beschränkt, er trägt einfach net ein, aber die Meldung sagt dem User nichts. Aber ich habe alle beteiligten Informiert was Pflichtfelder sind und wenn er nicht einträgt dass dann eines fehlt.

                      Kommentar


                      • #12
                        Zitat von Man-Chro Beitrag anzeigen
                        .. wenn er nicht einträgt dass dann eines fehlt.
                        eines fehlt? was genau fehlt? der komplette Datensatz, oder?

                        Mit Verlaub, das kannst so nicht machen. Der Anwender weiß nichts davon, daß sein Satz möglicherweise nicht eingetragen wird und verläßt sich dann darauf, daß sein Satz drin ist -> Irgendwelche Folgeprozesse funktionieren nicht richtig.
                        Kurz & gut: Du richtest damit den Keim für ein Chaos ein.

                        Kommentar


                        • #13
                          Zitat von Harry_X Beitrag anzeigen
                          eines fehlt? was genau fehlt? der komplette Datensatz, oder?

                          Mit Verlaub, das kannst so nicht machen. Der Anwender weiß nichts davon, daß sein Satz möglicherweise nicht eingetragen wird und verläßt sich dann darauf, daß sein Satz drin ist -> Irgendwelche Folgeprozesse funktionieren nicht richtig.
                          Kurz & gut: Du richtest damit den Keim für ein Chaos ein.
                          Mit Fehlt meine ich, dass ein Pflichtfeld nicht ausgefüllt ist. Nein ich richte damit keinen Schaden an, da ja ne exeption ausgelöst wird und das bekommt man ja mit, dass der Datensatz nicht eingetragen wurde.

                          Jeder kann das ja machen wie er es gerne möchte würd ich sagen.

                          Kommentar


                          • #14
                            Die ANtwort hierauf bist DU uns noch schuldig.
                            Kannst Du Deine Pflichtfelder nicht im Skript validieren?
                            [COLOR="#F5F5FF"]--[/COLOR]
                            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                            [COLOR="#F5F5FF"]
                            --[/COLOR]

                            Kommentar


                            • #15
                              wenn ich mit seiner Applikation arbeiten müßte, würd ich schon mal n Drohbrief aufsetzen

                              Kommentar

                              Lädt...
                              X