Messa1 / contao-database-select-table

A table select field for the frontend in contao.
MIT License
4 stars 0 forks source link

Error on submit #2

Closed Aybee closed 6 years ago

Aybee commented 6 years ago

v1.0.1 Contao 3.5.30

Hallo, hier meine Einstellungen

bildschirmfoto am 2017-10-20 um 00 05 57

Diese Meldung ist direkt im HTML, aber nicht sichtbar, weil zwischen select und option

Warning: Invalid argument supplied for foreach() in system/modules/contao-database_select_field/forms/FormDBSelectMenu.php on line 223

#0 system/modules/contao-database_select_field/forms/FormDBSelectMenu.php(223): __error(2, 'Invalid argumen...', '/home/www/_c3de...', 223, Array)
#1 system/modules/contao-database_select_field/templates/form_db_select.html5(25): MatthiasGmeiner\FormDBSelectMenu->getOptions()
#2 system/modules/core/library/Contao/BaseTemplate.php(88): include('/home/www/_c3de...')
#3 system/modules/core/library/Contao/Widget.php(630): Contao\BaseTemplate->parse()
#4 system/modules/contao-database_select_field/forms/FormDBSelectMenu.php(199): Contao\Widget->parse(NULL)
#5 system/modules/core/forms/Form.php(241): MatthiasGmeiner\FormDBSelectMenu->parse()
#6 system/modules/core/classes/Hybrid.php(239): Contao\Form->compile()
#7 system/modules/core/forms/Form.php(84): Contao\Hybrid->generate()
#8 system/modules/core/library/Contao/Controller.php(484): Contao\Form->generate()
#9 system/modules/core/modules/ModuleArticle.php(213): Contao\Controller::getContentElement(Object(Contao\ContentModel), 'main')
#10 system/modules/core/modules/Module.php(287): Contao\ModuleArticle->compile()
#11 system/modules/core/modules/ModuleArticle.php(67): Contao\Module->generate()
#12 system/modules/core/library/Contao/Controller.php(417): Contao\ModuleArticle->generate(false)
#13 system/modules/core/library/Contao/Controller.php(277): Contao\Controller::getArticle(Object(Contao\ArticleModel), false, false, 'main')
#14 system/modules/core/pages/PageRegular.php(133): Contao\Controller::getFrontendModule('0', 'main')
#15 system/modules/core/controllers/FrontendIndex.php(285): Contao\PageRegular->generate(Object(Contao\PageModel), true)
#16 index.php(20): Contao\FrontendIndex->run()
#17 {main}

Diese Meldung ist dann sichtbar nach dem Absenden

Warning: Invalid argument supplied for foreach() in system/modules/core/library/Contao/Widget.php on line 1313

#0 system/modules/core/library/Contao/Widget.php(1313): __error(2, 'Invalid argumen...', '/home/www/_c3de...', 1313, Array)
#1 system/modules/contao-database_select_field/forms/FormDBSelectMenu.php(121): Contao\Widget->isValidOption('3')
#2 system/modules/core/forms/Form.php(198): MatthiasGmeiner\FormDBSelectMenu->validate()
#3 system/modules/core/classes/Hybrid.php(239): Contao\Form->compile()
#4 system/modules/core/forms/Form.php(84): Contao\Hybrid->generate()
#5 system/modules/core/library/Contao/Controller.php(484): Contao\Form->generate()
#6 system/modules/core/modules/ModuleArticle.php(213): Contao\Controller::getContentElement(Object(Contao\ContentModel), 'main')
#7 system/modules/core/modules/Module.php(287): Contao\ModuleArticle->compile()
#8 system/modules/core/modules/ModuleArticle.php(67): Contao\Module->generate()
#9 system/modules/core/library/Contao/Controller.php(417): Contao\ModuleArticle->generate(false)
#10 system/modules/core/library/Contao/Controller.php(277): Contao\Controller::getArticle(Object(Contao\ArticleModel), false, false, 'main')
#11 system/modules/core/pages/PageRegular.php(133): Contao\Controller::getFrontendModule('0', 'main')
#12 system/modules/core/controllers/FrontendIndex.php(285): Contao\PageRegular->generate(Object(Contao\PageModel), true)
#13 index.php(20): Contao\FrontendIndex->run()
#14 {main}
Messa1 commented 6 years ago

Senden sollte nun klappen. In der neuen Version. Werde die nächsten Wochen den Code nochmals komplette überarbeiten. Den HTML Fehler konnte ich nicht sehen. Habe auch auf Contao 3.5.30 getestet und alles wie bei dir im Screenshot eingestellt.

Aybee commented 6 years ago

Der Bug ist noch da, aber ich habe den Fehler gefunden. https://github.com/Messa1/contao-database_select_field/blob/master/forms/FormDBSelectMenu.php#L219 https://github.com/Messa1/contao-database_select_field/blob/master/forms/FormDBSelectMenu.php#L223

Line 219 muss z.B. so lauten.

$db_conditions = $this->db_conditions ? deserialize($this->db_conditions) : array();

Das gab bei dir keinen Fehler, weil du in tl_form_field.db_conditions bereits einen Wert drin hast. Du musst sicherstellen, dass der erste Parameter von foreach() auch wirklich ein Array ist.

Aybee commented 6 years ago

Kleine Verbesserung. Die Funktion deserialize() bietet schon eine Option, ein leeres Array zurück zu geben.

$db_conditions = deserialize($this->db_conditions, true);