Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 01. April 2013 05:36

FKoeln
probiert CMS/ms aus
Registriert: 05. März 2013
Beiträge: 32

[GELÖST] FormBuilder und Variablenübergabe

Hallo,

mit FormBuilder habe ich ein relativ "normales" Kontaktformular erstellt.

Nun möchte ich dieses Formular per Link ansprechen und dabei Werte vorgeben. Im praktischen Beispiel habe ich mehrere Standorte, die im Formular ausgewählt werden können. Mein Ziel ist es nun, einen Link in eine andere Seite einzubinden, der das Formular auf einen dieser Standorte "voreinstellt".

Der Code

<a href="{cms_selflink href='kontakt'&Betreff=Anfrage}">Initiativbewerbung</a>

soll dazu führen, dass das Formular (bzw. die Seite "kontakt") geöffnet wird und dass der Betreff "Anfrage" voreingestellt ist. Leider erhalte ich aber nur eine Fehlermeldung.

Hat jemand eine Idee, wie ich Variablen übergeben kann?

Danke

Offline

#2 01. April 2013 10:52

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: [GELÖST] FormBuilder und Variablenübergabe

die frage taucht hier im forum häufig auf. ich empfehle es so zu machen:
<a href="{cms_selflink href='kontakt'}?betreff=Anfrage">Initiativbewerbung</a>
und auf der kontaktseite dann der Formbuilder:

{FormBuilder form='kontakt' value_betreff=$smarty.get.betreff}

oder

{FormBuilder form='kontakt' value_fld40=$smarty.get.betreff}

mehr dazu in diesem thread
value_betreff und value_fld40 entsprechend deinem formbuilder setup einpassen. ist jetzt nur ein vorschlag.

wenn du KEIN mod_rewrite benutzt, muss der link so aussehen:
<a href="{cms_selflink href='kontakt'}&amp;betreff=Anfrage">Initiativbewerbung</a>

Beitrag geändert von nicmare (01. April 2013 10:54)

Offline

#3 02. April 2013 00:34

FKoeln
probiert CMS/ms aus
Registriert: 05. März 2013
Beiträge: 32

Re: [GELÖST] FormBuilder und Variablenübergabe

Super,

Danke, das war's. Ich hatte zwar schon die grundsätzliche Umsetzung gefunden, hatte nur nirgends gelesen, dass man das "&" maskieren muss, wenn man kein mod_rewrite einsetzt.

Offline

#4 02. April 2013 12:48

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [GELÖST] FormBuilder und Variablenübergabe

nicmare schrieb:

ich empfehle es so zu machen:
<a href="{cms_selflink href='kontakt'}?betreff=Anfrage">Initiativbewerbung</a>

Wenn schon cms_selflink, dann sollte der Tag den Job komplett übernehmen wink - ohne HTML-Smarty-Gemauschel

{cms_selflink page='kontakt' urlparam='?betreff=Anfrage' text='Initiativbewerbung'}

Da gibts den title als Bonus obendrauf ...

nicmare schrieb:

{FormBuilder form='kontakt' value_betreff=$smarty.get.betreff}

Hmm, bei so etwas wird mir immer heiß und kalt zugleich. Wie Jan im anderen Thread bereits darauf hingewiesen hat, enthält die Variable $smarty.get.betreff den ungefilterten (!) $_GET Wert. Smarty hat insoweit keinerlei Filter. Das bedeutet andersherum, dass man sich mit einer derartigen Verwendung der Variable eine gigantische Sicherheitslücke auf die Webseite holt. Wie man hier sieht

https://www.owasp.org/index.php/XSS_Fil … heat_Sheet

lässt sich das relativ einfach ausnutzen und ist für eine Firmenwebseite nicht gerade wünschenwert, wenn die Webseite dann infolge einer Malware-Infektion o.ä. auf Googles schwarzer Liste landet.

Offline

#5 02. April 2013 13:57

FKoeln
probiert CMS/ms aus
Registriert: 05. März 2013
Beiträge: 32

Re: [GELÖST] FormBuilder und Variablenübergabe

Grundsätzlich natürlich richtig, nur fällt mir keine bessere Variante ein, um das zu bewerkstelligen. Evtl. noch über die Session, aber wie das immer so ist, sollen halt schnelle Ergebnisse her...

Oder gibt es in CMSms eine Möglichkeit, Variablen weiterzureichen?

Offline

#6 02. April 2013 14:08

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: [GELÖST] FormBuilder und Variablenübergabe

Die Variable kann natürlich auch ausgewertet werden:

{FormBuilder form='kontakt' value_betreff=$smarty.get.betreff|strip_tags}

oder weitere Funktionen können darüber gelassen werden.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#7 02. April 2013 14:50

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: [GELÖST] FormBuilder und Variablenübergabe

genau cyberman, wo bleibt dann die sichere alternative? ;-).

@ FKoeln: du kannst es auch mit post machen:
{FormBuilder form='kontakt' value_betreff=$smarty.post.betreff}

Dann muss der vorige link aber aus nem <form> heraus aufgerufen werden.
also

<form method="post" name="formular">
<input type="hidden" name="betreff" value="wert"/>
<input type="submit" value="zum Formular"/>
</form>

Beitrag geändert von nicmare (02. April 2013 14:50)

Offline

#8 03. April 2013 00:31

FKoeln
probiert CMS/ms aus
Registriert: 05. März 2013
Beiträge: 32

Re: [GELÖST] FormBuilder und Variablenübergabe

Per POST wäre sicherlich sinnvoller. Wenn ich es auf die Art versuche, schaffe ich's aber nicht, das Formular aufzurufen, sondern erhalte nur die aktuelle Seite (ist ja auch logisch, weiß ja niemand, auf welcher Seite das Formular zu finden ist).

Ich habe es schon mit "action=..." versucht, was aber kompletter Unsinn war.

Wie rufst Du denn die Seite auf?

Offline

#9 03. April 2013 04:41

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [GELÖST] FormBuilder und Variablenübergabe

nockenfell schrieb:

Die Variable kann natürlich auch ausgewertet werden:

{FormBuilder form='kontakt' value_betreff=$smarty.get.betreff|strip_tags}

oder weitere Funktionen können darüber gelassen werden.

http://htmlpurifier.org/comparison#striptags schrieb:

The PHP function striptags() is the classic solution for attempting to clean up HTML. It is also the worst solution, and should be avoided like the plague. The fact that it doesn't validate attributes at all means that anyone can insert an onmouseover='xss();' and exploit your application.
While this can be bandaided with a series of regular expressions that strip out on[event] (you're still vulnerable to XSS and at the mercy of quirky browser behavior), striptags() is fundamentally flawed and should not be used.

hmm

Offline

#10 03. April 2013 05:41

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: [GELÖST] FormBuilder und Variablenübergabe

Naja, ein Patentrezept gegen XSS gibt es soweit mir bekannt ist nicht. Schlussendlich müsste man jede einzelne Eingabe des Benutzers entsprechend dem zu erwartenden Wert auswerten.

strip_tags ist die schnellste Lösung die mir eingefallen ist (und die übrigens trotz allem an diversen Orten mangel besser wissens genutzt wird)


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#11 03. April 2013 09:42

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: [GELÖST] FormBuilder und Variablenübergabe

FKoeln schrieb:

Per POST wäre sicherlich sinnvoller. Wenn ich es auf die Art versuche, schaffe ich's aber nicht, das Formular aufzurufen, sondern erhalte nur die aktuelle Seite (ist ja auch logisch, weiß ja niemand, auf welcher Seite das Formular zu finden ist).

Ich habe es schon mit "action=..." versucht, was aber kompletter Unsinn war.

Wie rufst Du denn die Seite auf?

wieso ist das unsinn. es war ja nur ein denkanstoß. natürlich musst du es entsprechend komplettieren:

<form method="post" name="formular" action="{cms_selflink href=ALIAS}">
<input type="hidden" name="betreff" value="wert"/>
<input type="submit" value="zum Formular"/>
</form>

Offline

#12 03. April 2013 12:48

FKoeln
probiert CMS/ms aus
Registriert: 05. März 2013
Beiträge: 32

Re: [GELÖST] FormBuilder und Variablenübergabe

Anscheinend war ich schon in den Tiefschlaf verfallen.

Ich hatte bei "action" statt href page verwendet, was nicht wirklich funktionierte.

Danke der Tipps bin ich jetzt fertig, Danke euch allen.

Offline

#13 03. April 2013 15:56

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [GELÖST] FormBuilder und Variablenübergabe

nicmare schrieb:

@ FKoeln: du kannst es auch mit post machen:
{FormBuilder form='kontakt' value_betreff=$smarty.post.betreff}

Wer so bösartig ist, GET Parameter zu manipulieren, hat auch garantiert das FF Plugin Tamperdata

http://tamperdata.mozdev.org/

in seiner Werkzeugkiste, womit die Manipulation von HiddenFields genau so einfach und damit unsicher ist wie GET sad.

Offline

#14 02. April 2014 17:57

faglork
arbeitet mit CMS/ms
Ort: Fränkische Schweiz
Registriert: 15. Dezember 2010
Beiträge: 1.152
Webseite

Re: [GELÖST] FormBuilder und Variablenübergabe

Und das heisst jetzt was? Dass es keine Lösung gibt?

Wie macht das denn der Rest der Welt?

BTW: Folgendes Problem: Wenn ich das so ausführe wie oben beschrieben, dann passiert folgendes: Wenn der User vergisst ein Pflichtfeld auszufüllen wird ja die Form nochmals aufgerufen. Diesesmal aber leider ohne einen Post-Parameter, und damit hat sichs dann: Es gibt keinen Parameter mehr zum Übergeben.

Ausserdem funzt es eh nicht, wenn ich
{FormBuilder form='anfrage' value_fld53=$smarty.post.objekt|strip_tags}
einfüge. Feld 53 ist ein hidden field, wird auch alles wunderbar übergeben, nur ... wenn ich auf Absenden klicke tut sich nichts ... klick ich nochmals auf absenden, wird versandt, aber natürlich ohne den Post-Parameter ...

Wat nu?

EDIT: {FormBuilder form='anfrage' value_fld53='Meine Anfrage'}
lässt sich absenden, aber in der Mail steht objekt: Array und nicht objekt: Meine Anfrage

WTF?

Servus,
Alex

Beitrag geändert von faglork (02. April 2014 19:36)

Offline

#15 03. April 2014 09:29

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [GELÖST] FormBuilder und Variablenübergabe

Anstelle von strip_tags kann man doch auch einfach nur die gute alte PHP Funktion htmlentities() verwenden, oder?

{FormBuilder form='anfrage' value_fld53=$smarty.post.objekt|htmlentities}

Oder htmlspecialchars

{FormBuilder form='anfrage' value_fld53=$smarty.post.objekt|htmlspecialchars}

Oder oder oder (smarty bietet doch da ein paar Modifikatoren zum "escapen").

Wenn der User vergisst ein Pflichtfeld auszufüllen wird ja die Form nochmals aufgerufen. Diesesmal aber leider ohne einen Post-Parameter, und damit hat sichs dann: Es gibt keinen Parameter mehr zum Übergeben.

Aber es wird doch bestimmt der "Submit-Button" übergeben, oder?
Also vorher prüfen, ob das Formular bereits abgesendet wurde.
z.B. mit

{if isset($smarty.post.submit)} ...

Wobei "submit" hier noch id ID der Formbuilder-Instanz benötigt ...
Wenn ja, den Formbuilder ganz normal aufrufen.
Wenn nicht, dann mit den POST-Parametern aus der vorherigen Seite.
(nur ne Idee)

Ausserdem funzt es eh nicht

Wie sieht denn das Formular aus, nachdem man auf den Link zum Formular geklickt hat? (also der HTML-Code)

aber in der Mail steht objekt: Array und nicht objekt: Meine Anfrage

Wie sieht das E-Mail Template an dieser Stelle aus?


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#16 03. April 2014 13:15

faglork
arbeitet mit CMS/ms
Ort: Fränkische Schweiz
Registriert: 15. Dezember 2010
Beiträge: 1.152
Webseite

Re: [GELÖST] FormBuilder und Variablenübergabe

NaN schrieb:

Anstelle von strip_tags kann man doch auch einfach nur die gute alte PHP Funktion htmlentities() verwenden, oder?

{FormBuilder form='anfrage' value_fld53=$smarty.post.objekt|htmlentities}

Oder htmlspecialchars

{FormBuilder form='anfrage' value_fld53=$smarty.post.objekt|htmlspecialchars}

Oder oder oder (smarty bietet doch da ein paar Modifikatoren zum "escapen").

Es funzt auch ohne die escaperei nicht ...

NaN schrieb:

Wenn der User vergisst ein Pflichtfeld auszufüllen wird ja die Form nochmals aufgerufen. Diesesmal aber leider ohne einen Post-Parameter, und damit hat sichs dann: Es gibt keinen Parameter mehr zum Übergeben.

Aber es wird doch bestimmt der "Submit-Button" übergeben, oder?
Also vorher prüfen, ob das Formular bereits abgesendet wurde.
z.B. mit

{if isset($smarty.post.submit)} ...

Wobei "submit" hier noch id ID der Formbuilder-Instanz benötigt ...
Wenn ja, den Formbuilder ganz normal aufrufen.
Wenn nicht, dann mit den POST-Parametern aus der vorherigen Seite.
(nur ne Idee)

Naja, da muss ich aber dann die Fehlerbehandlung von FormBuilder umbauen :-(

NaN schrieb:

Ausserdem funzt es eh nicht

Wie sieht denn das Formular aus, nachdem man auf den Link zum Formular geklickt hat? (also der HTML-Code)

{FormBuilder form='anfrage' value_fld53=$smarty.post.objekt}
ergibt folgenden code:


[== html ==]
<form id="m3e69bmoduleform_2" method="post" action="http://medicconsulting.info/praxisboerse/anfrage.html" class="cms_form" enctype="multipart/form-data"> <div class="hidden"> <input type="hidden" name="mact" value="FormBuilder,m3e69b,default,1" /> <input type="hidden" name="m3e69breturnid" value="74" /> <input type="hidden" name="page" value="74" /> <input type="hidden" name="m3e69bfbrp_callcount" value="1" /> </div>  	<div><input type="hidden" id="m3e69bform_id" name="m3e69bform_id" value="5" /> <input type="hidden" id="m3e69bfbrp_continue" name="m3e69bfbrp_continue" value="2" /> <input type="hidden" id="m3e69bfbrp_done" name="m3e69bfbrp_done" value="1" /> </div> 	<div class="stdform"> 	 						<div><h2>Anfrage-Formular</h2> <p>Füllen Sie einfach die Felder des Formulars aus und klicken Sie auf "Anfrage absenden". Hinweis: Felder die mit einem * gekennzeichnet sind *müssen* ausgefüllt werden.</p></div>											<div class="required"><label for="fbrp__43">Anfrage*</label><textarea name="m3e69bfbrp__43" cols="80" rows="15" class="cms_textarea" id="fbrp__43"></textarea></div>								<div class="required"><label for="fbrp__44">Name*</label><input type="text" name="m3e69bfbrp__44" value="" size="25" maxlength="128"  id="fbrp__44" /> </div>								<div><label for="fbrp__45">PLZ / Ort</label><input type="text" name="m3e69bfbrp__45" value="" size="25" maxlength="80"   id="fbrp__45" /> </div>								<div><label for="fbrp__46">Adresse</label><input type="text" name="m3e69bfbrp__46" value="" size="25" maxlength="80"   id="fbrp__46" /> </div>								<div><label for="fbrp__47">Land</label><input type="text" name="m3e69bfbrp__47" value="" size="25" maxlength="80"   id="fbrp__47" /> </div>								<div><label for="fbrp__48">E-Mail</label><input type="email" name="m3e69bfbrp__48" value="" size="25" maxlength="128"  id="fbrp__48" /> </div>								<div class="required"><label for="fbrp__49">Telefon*</label><input type="text" name="m3e69bfbrp__49" value="" size="25" maxlength="80"   id="fbrp__49" /> </div>								<div><label for="fbrp__50">Mobil</label><input type="text" name="m3e69bfbrp__50" value="" size="25" maxlength="80"   id="fbrp__50" /> </div>								<div><label for="fbrp__51">Telefax</label><input type="text" name="m3e69bfbrp__51" value="" size="25" maxlength="80"   id="fbrp__51" /> </div>								<div><label for="fbrp__52">Rückruf erbeten</label><input type="checkbox" class="cms_checkbox" name="m3e69bfbrp__52" value="t"  id="fbrp__52" /> &nbsp;<a href="javascript:fbht('fbrp_ht_52')"><img src="modules/FormBuilder/images/info-small.gif" alt="Help" /></a><span id="fbrp_ht_52" style="display:none" class="fbr_helptext">Sollen wir Sie zurückrufen, statt auf die E-Mail zu antworten?</span></div>								<input type="hidden" name="m3e69bfbrp__53" value="Fachpraxis: Nr. 1" id="fbrp__53" />					<div class="submit"><input class="cms_submit fbsubmit" name="m3e69bfbrp_submit" id="m3e69bfbrp_submit" value="Anfrage absenden" type="submit"  /></div> 	</div> 	</form>

Das Feld 53 wird korrekt mit dem Post-Parameter gefüllt. Nur Absenden lässt sich das Formular nicht - bei Klick auf Absenden passiert nix, alle Felder sind dann leer. Natürlich auch das hidden Field 53 ...

NaN schrieb:

aber in der Mail steht objekt: Array und nicht objekt: Meine Anfrage

Wie sieht das E-Mail Template an dieser Stelle aus?

HTML in der Form:
<input name="m8a3f5fbrp__53" value="Meine Anfrage" id="fbrp__53" type="hidden">   

EMail-Template
{if $fld_53 != "" && $fld_53 != "(nicht angegeben)" }objekt: {$fld_53}{/if}

ergibt in der Mail:
objekt: Array

Servus,
Alex


Servus,
Alex

Beitrag geändert von faglork (03. April 2014 13:21)

Offline

#17 04. April 2014 15:37

faglork
arbeitet mit CMS/ms
Ort: Fränkische Schweiz
Registriert: 15. Dezember 2010
Beiträge: 1.152
Webseite

Re: [GELÖST] FormBuilder und Variablenübergabe

Es ist zum Mäusemelken!

Das hidden field hat in FormBuilder die ID 53 und den Wert "Fachpraxis"

{FormBuilder form='anfrage'}

--> hidden field wird in der form korrekt erstellt, ergibt in der E-Mail als Wert "Fachpraxis"

{FormBuilder form='anfrage' value_fld53='Testinhalt'}

--> hidden field wird in der form korrekt erstellt, ergibt in der E-Mail als Wert "Array"

Die jeweiligen HTML-Formulare sind IDENTISCH, bis auf den unterschiedlichen Wert von Feld 53 ...

Servus,
Alex

Offline

#18 04. April 2014 17:02

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [GELÖST] FormBuilder und Variablenübergabe

Schau doch einfach mal nach, was in dem Array drin ist.

Offline

#19 04. April 2014 17:38

faglork
arbeitet mit CMS/ms
Ort: Fränkische Schweiz
Registriert: 15. Dezember 2010
Beiträge: 1.152
Webseite

Re: [GELÖST] FormBuilder und Variablenübergabe

In dem Array steht der per Modulaufruf übergebene Parameter zweimal drin.

{FormBuilder form='anfrage' value_fld53='Testinhalt'}

überschriebt den Inhalt des hidden fields korrekt, aber  beim Absenden des Formulars wird daraus ein Array, welches den selben Wert zweimal enthält.

Grund: Die entsprechende Schleife im Sourcecode wird zweimal durchlaufen --> das ist ein Bug.

Workaround: im E-Mail-Template einfach das erste Element des Arrays ansprechen,

also nicht

{if $fld_41 != ""} Wert: {$fld_41}{/if}

sondern

{if $fld_41 != ""} Wert: {$fld_41[0]}{/if}

Funzt.

Jetzt muss ich nur noch das mit dem POST Parameter lösen:

{FormBuilder form='anfrage' value_fld53=$smarty.post.pbanfrage}

ergibt zwar eine korrekte Form, aber Formbuilder wird beim Absenden offenbar nicht aufgerufen. Stattdessen wird einfach die Formularseite nochmals aufgerufen (ohne Verarbeitung der Form!), wobei natürlich alle Form-Parameter verloren gehen.

aaaargh ...

Servus,
Alex

Beitrag geändert von faglork (04. April 2014 17:50)

Offline

#20 05. April 2014 11:39

faglork
arbeitet mit CMS/ms
Ort: Fränkische Schweiz
Registriert: 15. Dezember 2010
Beiträge: 1.152
Webseite

Re: [GELÖST] FormBuilder und Variablenübergabe

Habe einen neuen Thread eröffnet, da dieser ja als GELÖST markiert ist:
http://www.cmsmadesimple.de/forum/viewt … 472#p30472

Servus,
Alex

Offline