Keine Blogkommentare möglich - Fehlermeldung

Gerade bekomme ich eine Fehlermeldung, bei dem Versuch einen ersten Blogkommentar einzutragen. Ich nutze ein Plugin für den Blog und habe über die Anleitung von Moritz hier das Emailfeld ausgeblendet und den Datenschutzhinweis mit Checkbox eingefügt. Ich verstehe die Fehlermeldung nicht ganz, vermute aber das Problem beim Emailfeld - scheint ein Pflichtfeld zu sein.

Kann jemand helfen:

An exception occurred while executing 'INSERT INTO s_blog_comments (blog_id, name, headline, comment, creation_date, active, email, points) VALUES (?, ?, ?, ?, ?, ?, ?, ?)' with params [49, "test", " ", "test", "2018-04-20 17:06:53", 0, null, "10"]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'email' cannot be null
2018-04-20T17:06:53.771378+0200
core
{
    "uri": "/blog/rating/blogArticle/49",
    "method": "POST",
    "query": {
        "module": "frontend",
        "controller": "blog",
        "action": "rating",
        "blogArticle": "49"
    },
    "post": {
        "name": "test",
        "headline": " ",
        "points": "10",
        "comment": "test",
        "first_name_confirmation": "",
        "blog-checkbox": "1",
        "Submit": "Speichern",
        "__csrf_token": "jQFydFWARy0eR4Sk6HMcu0Z8MQZxwO"
    }
}




exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'email' cannot be null' in /var/www/vhosts/host.de/shop/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php:168
Stack trace:
#0 /var/www/vhosts/host.de/shop/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php(168): PDOStatement->execute(NULL)
#1 /var/www/vhosts/host.de/shop/engine/Library/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php(281): Doctrine\DBAL\Statement->execute()
#2 /var/www/vhosts/host.de/shop/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(1014): Doctrine\ORM\Persisters\Entity\BasicEntityPersister->executeInserts()
#3 /var/www/vhosts/host.de/shop/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(378): Doctrine\ORM\UnitOfWork->executeInserts(Object(Doctrine\ORM\Mapping\ClassMetadata))
#4 /var/www/vhosts/host.de/shop/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php(356): Doctrine\ORM\UnitOfWork->commit(NULL)
#5 /var/www/vhosts/host.de/shop/engine/Shopware/Controllers/Frontend/Blog.php(555): Doctrine\ORM\EntityManager->flush()
#6 /var/www/vhosts/host.de/shop/engine/Shopware/Controllers/Frontend/Blog.php(453): Shopware_Controllers_Frontend_Blog->sSaveComment(Array, 49)
#7 /var/www/vhosts/host.de/shop/engine/Library/Enlight/Controller/Action.php(193): Shopware_Controllers_Frontend_Blog->ratingAction()
#8 /var/www/vhosts/host.de/shop/engine/Library/Enlight/Controller/Dispatcher/Default.php(549): Enlight_Controller_Action->dispatch('ratingAction')
#9 /var/www/vhosts/host.de/shop/engine/Library/Enlight/Controller/Front.php(222): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp))
#10 /var/www/vhosts/host.de/shop/engine/Shopware/Kernel.php(215): Enlight_Controller_Front->dispatch()
#11 /var/www/vhosts/host.de/shop/vendor/symfony/http-kernel/HttpCache/HttpCache.php(486): Shopware\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#12 /var/www/vhosts/host.de/shop/engine/Shopware/Components/HttpCache/AppCache.php(268): Symfony\Component\HttpKernel\HttpCache\HttpCache->forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL)
#13 /var/www/vhosts/host.de/shop/vendor/symfony/http-kernel/HttpCache/HttpCache.php(253): Shopware\Components\HttpCache\AppCache->forward(Object(Symfony\Component\HttpFoundation\Request), true)
#14 /var/www/vhosts/host.de/shop/vendor/symfony/http-kernel/HttpCache/HttpCache.php(270): Symfony\Component\HttpKernel\HttpCache\HttpCache->pass(Object(Symfony\Component\HttpFoundation\Request), true)
#15 /var/www/vhosts/host.de/shop/engine/Shopware/Components/HttpCache/AppCache.php(143): Symfony\Component\HttpKernel\HttpCache\HttpCache->invalidate(Object(Symfony\Component\HttpFoundation\Request), true)
#16 /var/www/vhosts/host.de/shop/vendor/symfony/http-kernel/HttpCache/HttpCache.php(201): Shopware\Components\HttpCache\AppCache->invalidate(Object(Symfony\Component\HttpFoundation\Request), true)
#17 /var/www/vhosts/host.de/shop/engine/Shopware/Components/HttpCache/AppCache.php(116): Symfony\Component\HttpKernel\HttpCache\HttpCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#18 /var/www/vhosts/host.de/shop/shopware.php(122): Shopware\Components\HttpCache\AppCache->handle(Object(Symfony\Component\HttpFoundation\Request))
#19 {main}

Next exception 'Doctrine\DBAL\DBALException' with message 'An exception occurred while executing 'INSERT INTO s_blog_comments (blog_id, name, headline, comment, creation_date, active, email, points) VALUES (?, ?, ?, ?, ?, ?, ?, ?)' with params [49, "test", " ", "test", "2018-04-20 17:06:53", 0, null, "10"]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'email' cannot be null' in /var/www/vhosts/host.de/shop/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:131
Stack trace:
#0 /var/www/vhosts/host.de/shop/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php(178): Doctrine\DBAL\DBALException::driverExceptionDuringQuery(Object(Doctrine\DBAL\Driver\PDOMySql\Driver), Object(PDOException), 'INSERT INTO s_...', Array)
#1 /var/www/vhosts/host.de/shop/engine/Library/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php(281): Doctrine\DBAL\Statement->execute()
#2 /var/www/vhosts/host.de/shop/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(1014): Doctrine\ORM\Persisters\Entity\BasicEntityPersister->executeInserts()
#3 /var/www/vhosts/host.de/shop/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(378): Doctrine\ORM\UnitOfWork->executeInserts(Object(Doctrine\ORM\Mapping\ClassMetadata))
#4 /var/www/vhosts/host.de/shop/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php(356): Doctrine\ORM\UnitOfWork->commit(NULL)
#5 /var/www/vhosts/host.de/shop/engine/Shopware/Controllers/Frontend/Blog.php(555): Doctrine\ORM\EntityManager->flush()
#6 /var/www/vhosts/host.de/shop/engine/Shopware/Controllers/Frontend/Blog.php(453): Shopware_Controllers_Frontend_Blog->sSaveComment(Array, 49)
#7 /var/www/vhosts/host.de/shop/engine/Library/Enlight/Controller/Action.php(193): Shopware_Controllers_Frontend_Blog->ratingAction()
#8 /var/www/vhosts/host.de/shop/engine/Library/Enlight/Controller/Dispatcher/Default.php(549): Enlight_Controller_Action->dispatch('ratingAction')
#9 /var/www/vhosts/host.de/shop/engine/Library/Enlight/Controller/Front.php(222): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp))
#10 /var/www/vhosts/host.de/shop/engine/Shopware/Kernel.php(215): Enlight_Controller_Front->dispatch()
#11 /var/www/vhosts/host.de/shop/vendor/symfony/http-kernel/HttpCache/HttpCache.php(486): Shopware\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#12 /var/www/vhosts/host.de/shop/engine/Shopware/Components/HttpCache/AppCache.php(268): Symfony\Component\HttpKernel\HttpCache\HttpCache->forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL)
#13 /var/www/vhosts/host.de/shop/vendor/symfony/http-kernel/HttpCache/HttpCache.php(253): Shopware\Components\HttpCache\AppCache->forward(Object(Symfony\Component\HttpFoundation\Request), true)
#14 /var/www/vhosts/host.de/shop/vendor/symfony/http-kernel/HttpCache/HttpCache.php(270): Symfony\Component\HttpKernel\HttpCache\HttpCache->pass(Object(Symfony\Component\HttpFoundation\Request), true)
#15 /var/www/vhosts/host.de/shop/engine/Shopware/Components/HttpCache/AppCache.php(143): Symfony\Component\HttpKernel\HttpCache\HttpCache->invalidate(Object(Symfony\Component\HttpFoundation\Request), true)
#16 /var/www/vhosts/host.de/shop/vendor/symfony/http-kernel/HttpCache/HttpCache.php(201): Shopware\Components\HttpCache\AppCache->invalidate(Object(Symfony\Component\HttpFoundation\Request), true)
#17 /var/www/vhosts/host.de/shop/engine/Shopware/Components/HttpCache/AppCache.php(116): Symfony\Component\HttpKernel\HttpCache\HttpCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#18 /var/www/vhosts/host.de/shop/shopware.php(122): Shopware\Components\HttpCache\AppCache->handle(Object(Symfony\Component\HttpFoundation\Request))
#19 {main}
2018-04-20T17:06:53.811232+0200
core
{
    "uri": "/blog/rating/blogArticle/49",
    "method": "POST",
    "query": {
        "module": "frontend",
        "controller": "blog",
        "action": "rating",
        "blogArticle": "49"
    },
    "post": {
        "name": "test",
        "headline": " ",
        "points": "10",
        "comment": "test",
        "first_name_confirmation": "",
        "blog-checkbox": "1",
        "Submit": "Speichern",
        "__csrf_token": "jQFydFWARy0eR4Sk6HMcu0Z8MQZxwO"
    }
}

 

LG

Hallo,

dann solltest du statt den Shopware Block für das Eingabefeld der E-Mail komplett zu ersetzen das Eingabefeld einfach per CSS ausblenden und als Standardwert ein Leerzeichen eintragen, damit es im Standard schon gefüllt ist (mit einem Leerzeichen) und somit die Fehlermeldung nicht kommt (da das Feld email im Formular mit übergeben werden muss). Alternativ kannst du natürlich auch einfach ein Plugin einsetzen, das diese ganzen Funktionen schon bereits im Standard integriert hat.

Grüße

Sebastian

Also wenn ich damit richtig lag, dass es das nicht ausgefüllt Emailfeld ist, schau ich mal nach einer passenden Lösung. Danke.

Hallo,

ich habe dir doch aber die Lösung genannt? Die musst du doch nur umsetzen (lassen).

Grüße

Sebastian

Hast du denn das Opt-In für Artikelbewertungen inaktiv? Die Blog-Kommentare laufen über die gleiche Funktion, wenn ich es in Erinnerung habe. Sonst würde das ausblenden ja wenig Sinn machen.

Nein, das optin ist nicht aktiv.

@sschreier ich habe deine beiden Lösungsmöglichkeiten schon verstanden, muss mich nur noch für eine entscheiden. Da ich gestern nicht mehr am Rechner war und es bei diesem Thema nicht soooo brennt, schau ich mir das nächste Woche in Ruhe an.

[@Moritz Naczenski](http://forum.shopware.com/profile/14574/Moritz Naczenski “Moritz Naczenski”)‍ fragt, ob ich das Optin für Artikelbewertungen inaktiv habe. Ich antworte: Ja, ist nicht aktiv (=inaktiv). Weiß ich auch, ohne dass ich am Rechner sitze.

Hintergrund der Frage, wie ich vermute: Ist das Optin aktiv, wird bei den Bewertungen die Email als Pflicht abgefragt und eine optin-Mail verschickt. Folglich wäre das Emailfeld bei den Blogkommentaren auch ein Pflichtfeld, damit die EMail verschickt werden kann. Wenn ich dann das Emailfeld im Template ausblende, kann es logischerweise nicht funktionieren.

Von daher ist der Kommentar von SB hier völlig sinnfrei.

Hallo,

die Option für das Opt-In für Artikelbewertungen hat meines Erachtens damit gar nichts zu tun, da es ja nur regelt, ob das email - Feld ein Pflichtfeld ist oder nicht. Wenn es kein Pflichtfeld sein soll, ist das Feld aber trotzdem im Formular vorhanden und somit kommt auch kein Fehler. Du hast das Feld ja aber durch Überschreiben des entsprechenden Shopware Blocks komplett aus dem Formular genommen, sodass es gar nicht mehr angezeigt wird und somit auch nicht mehr im Formular ist - und dadurch kommt der Fehler, da das Feld trotzdem im Formular sein muss, auch wenn es nicht sichtbar sein sollte oder keinen Inhalt hat.

Ein Plugin, was dich ansich fast jedes Feld bei den Blogkommentaren ausblenden lässt wäre dieses hier (siehe Pluginbeschreibung): Individualisieren des Shopware Blogs (neue Bereiche für die Blog Sidebar, uvm.) | Menü + Kategorien | Produktdarstellung | Storefront / Detailanpassungen | Erweiterungen | Shopware Community Store . Dort hast du sogar auch schon den DSGVO - Datenschutzhinweis entweder als Text oder Checkbox mit drin. 

Grüße

Sebastian

Hab jetzt erstmal den das Feld nur wieder anzeigen lassen und Kommentieren geht wieder. Auch ohne Eingabe der EMailadresse. In den Datenschutzbestimmungen hab ich das Feld eh berücksichtigt. Soll ausfüllen wer will oder auch nicht.

Wichtiger wäre mir, dass der Name kein Pflichtfeld ist - wie bei den Bewertungen - und vor allem, dass das Feld bei eingeloggten Kunden nicht schon mit vollem Namen vorausgefüllt ist.

Aber das eigentliche Thema hier ist dann erstmal gelöst. Danke.

Hallo,

naja ist ja auch klar, wenn du das Feld wieder anzeigen lässt, das Opt-In für Artikelbewertungen aber deaktiviert hast, dass dann das email - Feld kein Pflichtfeld mehr ist und keine Eingabe erforderlich ist. Das ist ja aber ansich überhaupt nicht das gewesen, was du willst, da du ja das Feld gar nicht erst anzeigen lassen willst.

Beim genannten Plugin kannst du das Namensfeld auf jeden Fall auch ausblenden lassen - sicher kann der Hersteller das auch noch erweitern, dass es trotzdem angezeigt wird, aber kein Pflichtfeld ist. Das betrifft dich aber ja eh nicht, da du ja ein Plugin im Einsatz hat, was all diese Funktionen nicht hat.

Alternativ kannst du das ja auch einfach bei dem Shopware Block selbst so hinterlegen, dass das Namensfeld kein Pflichtfeld ist und auch nicht automatisch befüllt werden soll.

Grüße

Sebastian