Contao-Camp 2024
Ergebnis 1 bis 22 von 22

Thema: Fehlermeldung bei Custom field

  1. #1
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard Fehlermeldung bei Custom field

    Hallo zusammen,

    ich habe diverse Custom Felder bei Mitgliedern. Wenn versuche ein neues Mitglied anzulegen kommt.

    Code:
    An exception occurred while executing a query: SQLSTATE[HY000]: General error: 1364 Field 'pruefung' doesn't have a default value
    Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['pruefung'] = [
        'label'         => ['Prüfung', 'Geplantes Prüfungsquartal des Schülers'],
        'exclude'       => true,
        'filter'         => true,
        'inputType'     => 'select',
        'options'       => ['2023/JP4','2023/JP3','2023/JP2','2023/JP1','2022/JP4','2022/JP3', 'unbekannt'],
        'eval'          => array('tl_class'=>'w25', 'mandatory'=>true, 'doNotCopy'=>false, 'feGroup'=>'pruefung', 'feEditable' => true, 'includeBlankOption' => true),
        'sql'           => "varchar(32) NOT NULL default"
    ];

    Bisher ist das nie aufgefallen, da ich immer Mitglieder kopiere. Da kommt der Fehler nicht.

    Wieso braucht es hier einen default? Und wenn ja wie setze ich den? https://docs.contao.org/dev/referenc...lds/#reference

    VG
    Frank
    Geändert von Kahmoon (20.10.2022 um 10:10 Uhr)

  2. #2
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    OK, es braucht bei select fields anscheinend immer ein "default". So geht es:

    Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['pruefung'] = [
        'label'         => ['Prüfung', 'Geplantes Prüfungsquartal des Schülers'],
        'exclude'       => true,
        'filter'         => true,
        'inputType'     => 'select',
        'options'       => ['2023/JP4','2023/JP3','2023/JP2','2023/JP1','2022/JP4','2022/JP3', 'unbekannt'],
        'default'         => '',
        'eval'          => array('tl_class'=>'w25', 'mandatory'=>true, 'doNotCopy'=>false, 'feGroup'=>'pruefung', 'feEditable' => true, 'includeBlankOption' => true),
        'sql'           => "varchar(32) NOT NULL default"
    ];

  3. #3
    Contao-Fan Avatar von bjarke
    Registriert seit
    07.06.2011.
    Beiträge
    351
    Partner-ID
    5067

    Standard

    PHP-Code:
    'sql' => "varchar(32) NOT NULL default ''" 

  4. #4
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Zitat Zitat von bjarke Beitrag anzeigen
    PHP-Code:
    'sql' => "varchar(32) NOT NULL default ''" 
    haha, ok.....oder so :-D. Also kann ich "NOT NULL default" weglassen?

  5. #5
    Contao-Fan Avatar von bjarke
    Registriert seit
    07.06.2011.
    Beiträge
    351
    Partner-ID
    5067

    Standard

    Nicht weglassen, sondern mit '' am Ende versehen.

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['pruefung'] = [
        
    'label'      => ['Prüfung''Geplantes Prüfungsquartal des Schülers'],
        
    'exclude'    => true,
        
    'filter'     => true,
        
    'inputType'  => 'select',
        
    'options'    => ['2023/JP4','2023/JP3','2023/JP2','2023/JP1','2022/JP4','2022/JP3''unbekannt'],
        
    'eval'       => array('tl_class'=>'w25''mandatory'=>true'doNotCopy'=>false'feGroup'=>'pruefung''feEditable' => true'includeBlankOption' => true),
        
    'sql'        => "varchar(32) NOT NULL default ''"
    ]; 
    Beispiel: tl_member.php

  6. #6
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Das läuft auf Fehler beim DB Update.

    Edit:
    Der Befehl direkt in PHPMyAdmin ging durch. Nur im DB Update vom Contao Manager nicht.

    Code:
    ALTER TABLE tl_member CHANGE pruefung pruefung VARCHAR(32) DEFAULT '' NOT NULL
    Geändert von Kahmoon (20.10.2022 um 10:42 Uhr)

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Dein initiales Problem war, dass du bei deinem Feld zwar NOT NULL definiert hast, aber dann in der SQL Definition keinen default angegebenen hast (du hast zwar "default" geschrieben, aber dann nichts mehr, also keinen default angegeben).

    Bzgl. deinem aktuellen Problem: immer deinen Code posten.
    » sponsor me via GitHub or PayPal or Revolut

  8. #8
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Danke für die Info.

    Code Snipped hatte ich eigentlich immer gepostet.

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Poste dein aktuelles DCA.
    » sponsor me via GitHub or PayPal or Revolut

  10. #10
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Problem ist eigentlich behoben. Nur halt das ich das Db Update händisch machen musste.

    Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['pruefung'] = [
        'label'         => ['Prüfung', 'Geplantes Prüfungsquartal des Schülers'],
        'exclude'       => true,
        'filter'         => true,
        'inputType'     => 'select',
        'options'       => ['2023/JP4','2023/JP3','2023/JP2','2023/JP1','2022/JP4','2022/JP3', 'unbekannt'],
        'eval'          => array('tl_class'=>'w25', 'mandatory'=>true, 'doNotCopy'=>false, 'feGroup'=>'pruefung', 'feEditable' => true, 'includeBlankOption' => true),
        'sql'           => "varchar(32) NOT NULL default ''"
    ];
    Das hier ging auch

    Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['pruefung'] = [
        'label'         => ['Prüfung', 'Geplantes Prüfungsquartal des Schülers'],
        'exclude'       => true,
        'filter'         => true,
        'inputType'     => 'select',
        'default'     => '',
        'options'       => ['2023/JP4','2023/JP3','2023/JP2','2023/JP1','2022/JP4','2022/JP3', 'unbekannt'],
        'eval'          => array('tl_class'=>'w25', 'mandatory'=>true, 'doNotCopy'=>false, 'feGroup'=>'pruefung', 'feEditable' => true, 'includeBlankOption' => true),
        'sql'           => "varchar(32) NOT NULL"
    ];
    Geändert von Kahmoon (21.10.2022 um 09:20 Uhr)

  11. #11
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Die Zweite Version solltest du nicht machen - und würde dir auch kein Datenbank Update geben. Hattest du den Symfony Application Cache nach der Änderung zur ersten Version neu aufgebaut?
    » sponsor me via GitHub or PayPal or Revolut

  12. #12
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    OK

    Aber so wäre es OK? (anderes Feld)

    Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['praxisstunden'] = [
        'label'         => ['Praxisstunden', 'Praxisstunden >60 abgeschlossen und Ausbildungsbestätigung erhalten'],
        'exclude'       => true,
        'filter'         => true,
        'inputType'     => 'select',
        'default'         => 'offen',
        'options'       => ['offen','abgeschlossen'],
        'eval'          => array('tl_class'=>'w25', 'mandatory'=>false, 'doNotCopy'=>true),
        'sql'           => "varchar(20) NOT NULL"
    ];


    Jepp, hatte jedes Mal danach komplett den Cache gelöscht.

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Empfohlen wäre
    PHP-Code:
    'sql'           => "varchar(20) NOT NULL default 'offen'" 
    statt dem DCA default. Bzw.:
    PHP-Code:
    'sql' => ['type' => 'string''length' => 20'default' => 'offen'
    » sponsor me via GitHub or PayPal or Revolut

  14. #14
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    OK, ich versuche das. Warum gibt es das Parameter dann einzeln auch?

  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Mehr oder weniger aus historischen Gründen, oder für Spezialfälle. Einen default über die Datenbank zu setzen ist immer vorzuziehen.
    » sponsor me via GitHub or PayPal or Revolut

  16. #16
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    OK, dann ändere ich das bei anderen Felder auch so. Bei nem Integer Wert wäre es dann vermutlich so?

    Aktuell
    Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['flintenschiessen'] = [
        'label'         => ['Tontauben geschossen', 'Info ob der Schüler diese Einheit absolviert hat oder nicht.'],
        'exclude'       => true,
        'filter'         => true,
        'sorting'        => true,
        'inputType'     => 'select',
        'default'         => '0',
    'options'       => ['0', '25', '50', '75', '100', '125', '150', '175', '200', '225', '250'],
    
        'eval'          => array('tl_class'=>'w25', 'mandatory'=>true, 'doNotCopy'=>true, 'feGroup'=>'schiessnachweise', 'feEditable' => true),
        'sql'           => "varchar(32) NOT NULL"
    ];



    Neu

    Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['flinte'] = [
        'label'         => ['Tontauben geschossen', 'Info ob der Schüler diese Einheit absolviert hat oder nicht.'],
        'exclude'       => true,
        'filter'         => true,
        'sorting'        => true,
        'inputType'     => 'select',
            'options'       => [0, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250],
        'eval'          => array('tl_class'=>'w25', 'mandatory'=>true, 'doNotCopy'=>true, 'feGroup'=>'schiessnachweise', 'feEditable' => true),
        'sql'             => ['type' => 'integer', 'length' => 3, 'default' => '0']
    ];

  17. #17
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Eher so:
    PHP-Code:
    'sql' => ['type' => 'integer''unsigned' => true'default' => 0
    » sponsor me via GitHub or PayPal or Revolut

  18. #18
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Fällt mir das auf die Nase wenn die Zahlen bisher als String gespeichert wurden und ich das jetzt auf Int ändere?

    Die Options werde ich dann vermutlich auch ohne Anführungszeichen angeben richtig?
    Code:
       'options'       => [0, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250],

  19. #19
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Eher so:
    PHP-Code:
    'sql' => ['type' => 'integer''unsigned' => true'default' => 0
    Also das mag er per Contao Manager DB Update nicht. Über PHPMyAdmin ging es.

    Siehe Anhang
    Angehängte Grafiken Angehängte Grafiken

  20. #20
    Contao-Fan Avatar von Anke
    Registriert seit
    30.06.2009.
    Ort
    Rhein-Main-Gebiet
    Beiträge
    919

    Standard

    Hallo,

    ich probiere zum ersten Mal, ein eigenes Feld zu ergänzen. In Newsartikeln soll eine Kategorie ausgewählt werden können. Hier mein Code:


    Code:
    // contao/dca/tl_news.php
    use Contao\CoreBundle\DataContainer\PaletteManipulator;
    
    $GLOBALS['TL_DCA']['tl_news']['fields']['newsCategory'] = [
    'label'                   => ['News-Kategorie', 'Wählen Sie eine Kategorie bzw Rubrik aus'],
    'exclude'                 => true,
    'search'                  => true,
    'inputType'               => 'select',
    'options'                 => ['Unternehmen', 'Produkte', 'Veranstaltungen'],
    'eval'                    => array('tl_class'=>'w50', 'includeBlankOption' => true),
    'sql'                     => ['type' => 'string', 'length' => 20, 'default' => '']
    ];
    
    PaletteManipulator::create()
      ->addField('newsCategory', 'teaser_legend', PaletteManipulator::POSITION_APPEND)
      ->applyToPalette('default', 'tl_news')
      ->applyToPalette('internal', 'tl_news')
    ;
    Nach dem Neuaufbau des Anwendungscache passiert nichts. Es wird kein Feld hinzugefügt und gibt auch keine Fehlermeldungen.
    Daher habe ich es testweise versucht mit diesem original Beispielcode der Seite aus der Doku

    Code:
    // contao/dca/tl_news.php
    use Contao\CoreBundle\DataContainer\PaletteManipulator;
    
    $GLOBALS['TL_DCA']['tl_news']['fields']['location'] = [
        'label' => ['Location', 'Location of the news entry, if applicable.'],
        'inputType' => 'text',
        'eval' => ['tl_class' => 'w50', 'maxlength' => 255],
        'sql' => ['type' => 'string', 'length' => 255, 'default' => ''],
    ];
    
    PaletteManipulator::create()
        ->addField('location', 'title_legend', PaletteManipulator::POSITION_APPEND)
        ->applyToPalette('default', 'tl_news')
        ->applyToPalette('internal', 'tl_news')
    ;
    Auch dies bleibt ohne Erfolg. Wo liegt mein Fehler? (Contao 4.13.25, PHP 8.1)

  21. #21
    Contao-Nutzer
    Registriert seit
    10.06.2021.
    Beiträge
    232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    <?php hast du aber schon an den Anfang der Datei eingefügt oder?

  22. #22
    Contao-Fan Avatar von Anke
    Registriert seit
    30.06.2009.
    Ort
    Rhein-Main-Gebiet
    Beiträge
    919

    Standard

    Zitat Zitat von lbableck Beitrag anzeigen
    <?php hast du aber schon an den Anfang der Datei eingefügt oder?
    Oh, mei ...! Nein, ich hatte mich an das gehalten, was in den Doks steht. Dankeschön!

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •