Moin Spooky,
der Code dient zum Auslesen der einzelnen Felder des Formulars für neue Gästebucheinträge.
Ich habe das ganze jetzt simpel mit
PHP-Code:
Input::post('...')
gelöst, z.B.
Code:
// Add comment
if (Input::post('FORM_SUBMIT') == 'tl_guestbook' && !$doNotSubmit) {
$this->addGbEntry();
// Pending for approval
if ($this->gb_moderate) {
$_SESSION['TL_GUESTBOOKENTRY_ADDED'] = true;
}
$this->reload();
}
Damit kann ich auch die anderen Formularfelder auslesen und ins Gästebuch wegschreiben ...
Leider habe ich noch ein anderes Problem:
Beim Auslesen der Gästebucheinträge aus der Tabelle "tl_guestbook" fliegt mir unter Contao 5.2.4 der Datenbankzugriff um die Ohren ...
Code:
/** * Generate module */
protected function compile() {
$limit = null;
$arrComments = array();
$hasBackendUser = System::getContainer()->get('contao.security.token_checker')->hasBackendUser();
// Pagination
if ($this->gb_perPage > 0) {
$page = Input::get('page') ? Input::get('page') : 1;
$limit = $this->gb_perPage;
$offset = ($page - 1) * $this->gb_perPage;
// Get total number of comments
$objTotal = $this->Database->prepare("SELECT COUNT(*) AS count FROM tl_guestbook" . (!$hasBackendUser ? " WHERE published=1" : "")) ->execute($this->id);
// Add pagination menu
$objPagination = new Pagination($objTotal->count, $this->gb_perPage);
$this->Template->pagination = $objPagination->generate("\n ");
}
// Get all published comments
$gbEntriesStmt = $this->Database->prepare("SELECT * FROM tl_guestbook" . (!$hasBackendUser ? " WHERE published=1" : "") . " ORDER BY date" . (($this->gb_order == 'descending') ? " DESC" : ""));
if ($limit) {
$gbEntriesStmt->limit($limit, $offset);
}
$gbEntries = $gbEntriesStmt->execute($this->id);
Das führt zur Fehlermeldung:
Code:
request.CRITICAL: Uncaught PHP Exception Doctrine\DBAL\Exception\DriverException: "An exception occurred while executing a query: SQLSTATE[HY093]:
Invalid parameter number: number of bound variables does not match number of tokens"
at /Users/georg/Sites/stina.luetten-dieks.eu/vendor/doctrine/dbal/src/Driver/API/MySQL/ExceptionConverter.php line 117 {"exception":"[object]
Die Tabelle sieht folgendermaßen aus:
Code:
// Fields
'fields' => array (
'id' => array (
'sql' => "int(10) unsigned NOT NULL auto_increment"
),
'name' => array (
'label' => &$GLOBALS['TL_LANG']['tl_guestbook']['name'],
...
'sql' => "varchar(128) NOT NULL default ''"
),
'email' => array (
'label' => &$GLOBALS['TL_LANG']['tl_guestbook']['email'],
...
'sql' => "varchar(128) NOT NULL default ''"
),
'place' => array (
'label' => &$GLOBALS['TL_LANG']['tl_guestbook']['place'],
...
'sql' => "varchar(128) NOT NULL default ''"
),
'website' => array (
'label' => &$GLOBALS['TL_LANG']['tl_guestbook']['website'],
...
'sql' => "varchar(128) NOT NULL default ''"
),
'titel' => array (
'label' => &$GLOBALS['TL_LANG']['tl_guestbook']['titel'],
...
'sql' => "varchar(128) NOT NULL default ''"
),
'message' => array (
'label' => &$GLOBALS['TL_LANG']['tl_guestbook']['message'],
...
'sql' => "text NULL"
),
'comment' => array (
'label' => &$GLOBALS['TL_LANG']['tl_guestbook']['comment'],
...
'sql' => "text NULL"
),
'date' => array (
'label' => &$GLOBALS['TL_LANG']['tl_guestbook']['date'],
'sql' => "int(10) unsigned NOT NULL default '0'"
),
'tstamp' => array (
'label' => &$GLOBALS['TL_LANG']['tl_guestbook']['tstamp'],
'sql' => "int(10) unsigned NOT NULL default '0'"
),
'published' => array (
'label' => &$GLOBALS['TL_LANG']['tl_guestbook']['published'],
...
'sql' => "char(1) NOT NULL default ''"
)
)
Unter Contao 4.13.32 funktioniert das noch einwandfrei. Die Doctrine Bundles liegen doch unter 4.13.32 und 5.2.4 in der gleichen Version vor, daher wundert mich das ein wenig.
Meine 5.2.4 Experimente laufen lokal unter MAMP Pro mit mysql 5.7.39, die aktive Website läuft bei All-Inkl mit Maria DB 10.5.22. Kann das evtl. der Grund sein?
Der Code des GB wird den Contaoexperten sicherlich das blanke Grauen ins Gesicht treiben, allerdings stammt es noch aus der Contao 2/3 Welt der Vorsymfonyzeit.
Habe das ganze vor Jahren mal in ein Contao 4 Bundle umgebaut, der Code ist im wesentlichen aber erhalten geblieben ....
Bin für jeden Tip dankbar!
Lesezeichen