Danke Dominik! Sein Beitrag bezieht sich auf meinen Post hier:Dominik Späte hat geschrieben: ↑14 Jul 2025, 10:03 Jemand möchte darauf hingewiesen werden, dass man in Smarty direkt auf GET-Parameter zugreifen kann und sich den Umweg über die ContentView-Klasse sparen kann - zumal, wenn dieser neuerdings nicht mehr funktioniert.
[…]
Man kann mit diesem gegen Cross-Site Scripting (XSS) abgesicherten Code auf einen source-Parameter in der URL zugreifen und diesen als Wert eines gleichnamigen Eingabefeldes in der Smarty-Template-Datei verwenden:
Code: Alles auswählen
<input type="hidden" name="source" value="{$smarty.get.source|escape:'html'}">
https://www.gambio.de/forum/threads/new ... 9-5.52303/
Jetzt ist nur noch die Frage: Wie greife ich korrekt auf den Inhalt der source-Variable bei der Übermittlung mit POST zu und bekomme ihn in die Datenbank?In Gambio 4.5.3 unter PHP 7.4.3 habe ich folgende Anpassungen erfolgreich im Einsatz:
Datenbanktabelle newsletter_recipients um Spalte source ergänzt:In der Datei /GXMainComponents/View/ThemeContentViews/core/ThemeContentView.inc.phpCode: Alles auswählen
ALTER TABLE `newsletter_recipients` ADD COLUMN `source` VARCHAR(45) NULL DEFAULT NULL AFTER `date_added`;
unterhalb vondie ZeileCode: Alles auswählen
protected $captcha;hinzugefügt sowie in der Funktion prepare_data() folgende Zeile ergänzt:Code: Alles auswählen
protected $source = '';Code: Alles auswählen
$this->content_array['SOURCE'] = htmlentities_wrapper($this->source);
In der Datei /system/classes/newsletter/NewsletterContentControl.inc.php das
$sql_data_array umerweitert und am Ende der Datei nach der ZeileCode: Alles auswählen
, 'source' => xtc_db_input($this->v_data_array['POST']['source'])folgende eingefügt:Code: Alles auswählen
if (isset($this->v_data_array['POST']['email'])) { $coo_newsletter_view->set_('email_address', $this->v_data_array['POST']['email']); }Und in meinem Theme die Datei/themes/meintheme/html/custom/newsletter.html angelegt:Code: Alles auswählen
if (isset($this->v_data_array['GET']['source'])) { $coo_newsletter_view->set_('source', $this->v_data_array['GET']['source']); }Code: Alles auswählen
{block name="newsletter_email_container" append} <input type="hidden" id="source" name="source" value="{$SOURCE}" /> {/block}
Anwendungsfall: Ich kann https://shop.tannenhof-imshausen.de/new ... source=XYZ rausgeben und tracken, welche Nutzer sich über diesen Link zum Newsletter angemeldet haben.
Die gleichen Anpassungen unter der aktuellen Gambio-Version 4.9.5 und PHP 8.1 funktionieren jedoch nicht mehr: Das hidden-Feld wird nicht gefüllt und auch wenn ich händisch was eintrage bleibt die Spalte source in der Datenbanktabelle newsletter_recipients leer. Ich konnte nicht herausfinden, warum. Kann mir jemand helfen?
Die angehängten Dateien sind für Version 4.9.5.
Besten Dank & viele Grüße, Johannes
Denn
Code: Alles auswählen
if (isset($this->v_data_array['POST']['source'])) {
$sql_data_array['source'] = xtc_db_input($this->v_data_array['POST']['source']);
} funktioniert irgendwie nicht, in der Datenbank steht bloß NULL…
Die angehängte Datei spiegelt den aktuellen Stand, PHP-Dateien können hier nicht direkt eingebunden werden, deshalb als ZIP.
Herzlichen Dank & viele Grüße,
Johannes