[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
X-Form: Variable übergeben - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
benny0903
Beiträge: 17
Registriert: 5. Jun 2006, 22:20

X-Form: Variable übergeben

30. Jun 2008, 15:07

Das Formularaddon X-Form ist wirklich unglaublich mächtig.

Ich habe folgendenes Problem:
Es gibt eine Infoseite auf der ein Angebot vorgestellt wird. Dort befindet sich ein Link über den ein Formular aufgerufen wird. An den Link sind zwei Variablen des Angebots angehängt per

Code: Alles auswählen

URL&a=wert1&b=wert2
Diese lese ich in der Formularseite per

Code: Alles auswählen

$variable = $_GET['a']
aus.

Doch leider gelingt es mir nicht, die Variable in das X-Form zu übergeben. Gibt ja an sich die Zeile

Code: Alles auswählen

php|<?php ... ?> 
Das funktioniert hierfür aber anscheinend nicht.

Gibt es eine Lösung und eine bessere Lösungsidee. Es soll halt ein dynamisches Formular rauskommen, dass mit Informationen des Produktes gefüllt wird. Damit der Mail-Empfänger weiß worauf sich bezogen wird.
Zuletzt geändert von benny0903 am 5. Jul 2008, 09:52, insgesamt 3-mal geändert.

benny0903
Beiträge: 17
Registriert: 5. Jun 2006, 22:20

So soll es funktionieren:

1. Jul 2008, 12:43

Um mein Problem noch einmal zu verdeutlichen - so soll das Formular aussehen:
[ externes Bild ]


Die drei mit GET gekennzeichneten Informationen sollen in Formular intergriert werden und auch später versendet werden.

Auch eine Info ob es überhaupt mit den zur Verfügung stehenden Mitteln möglich ist wäre sehr nett.

benny0903
Beiträge: 17
Registriert: 5. Jun 2006, 22:20

Übertragung

1. Jul 2008, 23:08

Ok. Aufgegeben bekomme ich meine Daten an der gewünschten Stellen im Formular jetzt:

Code: Alles auswählen

php|<?php  echo $_GET['a']; ?>

Doch wie bekomme ich es nun noch an die E-Mail übergeben?

Direkt angelegen geht wohl nicht, da ich keine PHP-Variable zuweisen kann. Hatte mir jetzt überlegt mit den von x-Form bereit gestellten Möglichkeiten ein Hidden-Feld zu puzzeln:

Code: Alles auswählen

html|<input type="hidden" name="wert1" value="
php|<?php  echo $_GET['a']; ?> 
html|" />
Im Formualar wird das Hidden-Feld auch eingefügt, z.B.:

Code: Alles auswählen

<input type="hidden" name="wert1" value="Villa Vineta, W203" />
Doch wie schaffe ich nun noch den finalen Schritt und versende den Wert per E-Mail. Ist das machbar?

Bitte gebt mir einen Tipp oder Lösungsansatz!
Zuletzt geändert von benny0903 am 5. Jul 2008, 09:54, insgesamt 1-mal geändert.

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

2. Jul 2008, 11:32

Hi benny,

Die X-Form sind Jans Baby. Der ist leider im Urlaub, daher musst du wohl auf die Hilfe der anderen Forenbesucher hofffen ;)

Gruß,
Markus

benny0903
Beiträge: 17
Registriert: 5. Jun 2006, 22:20

Lösung

5. Jul 2008, 09:33

Wäre schon schön wenn jemand eine Lösung fände.

Bzw. wenn Jan sich der noch einmal annehmen könnte, wenn er aus seinem wohlverdienten Urlaub kommt. Sind unter Umständen ja nur ein, zwei Kniffe nötig.

Das wäre natürlich für viele Formularanwendungen ein riesiger Fortschritt, wenn XForm diese Funktionalität auch noch bieten würde!

marry
Beiträge: 51
Registriert: 17. Mai 2008, 19:15

14. Jul 2008, 17:39

gibts für dieses Problem schon eine Lösung?

benny0903
Beiträge: 17
Registriert: 5. Jun 2006, 22:20

15. Jul 2008, 08:03

Leider noch nicht. Hoffe Jan kann nach seinem wohlverdienten Urlaub einen Kommentar/Tipp geben.

Benutzeravatar
Peter.Bickel
Beiträge: 1856
Registriert: 25. Jan 2005, 21:17
Wohnort: Schleswig-Holstein
Kontaktdaten: Website

15. Jul 2008, 08:52

Vielleicht mal ein Denkansatz in ganz anderer Richtung: Du könntest die Werte im ersten Schritt auch in die Datenbank speichern und im zweiten Schritt wieder auslesen. Ich glaube, das Xform ist eher für diese Art der Weiterverarbeitung konzipiert.

Peter.

benny0903
Beiträge: 17
Registriert: 5. Jun 2006, 22:20

18. Jul 2008, 09:41

Hallo Peter,

auch ein interessanter Ansatz denke ich. Allerdings muss ich zugeben, dass mir der Einstieg in deine Lösungidee etwas schwer fällt. Ich muss den Wert schließlich zunächst in die Datenbank übergeben. Das ist mir noch nicht ganz klar, wie das am schlausten anstelle.


Ansonsten noch einmal zurück zu meinem ursprünglichen Ansatz. Da ich ja gerne eine Variable im Formular mitgeben will, habe ich überlegt, wie ich auf PHP zugreifen kann. Dabei ist mir aufgefallen, dass ich einen Wert auch über folgende Definition mitgeben kann:

Code: Alles auswählen

$email_elements["feldname"] = "feldwert";
Ansprechbar im Mail-Template dann über ###feldname###.
Leider gelingt es jedoch weiterhin nicht hierbei einen variablen Wert zu verwenden, z.B. so:

Code: Alles auswählen

php|<?php $email_elements["wohnung"] = $_GET['w']; ?>
Der Platzhalter im Mailtemplate bleibt leer.
Ich muss noch einen Denkfehler haben.

Benutzeravatar
Peter.Bickel
Beiträge: 1856
Registriert: 25. Jan 2005, 21:17
Wohnort: Schleswig-Holstein
Kontaktdaten: Website

18. Jul 2008, 09:49

Meine Idee mit dem Eintragen in die DB kam mir nur deshalb, weil ich mit Thomas gerade an einer Website baue, wo wir einen relativ komplexen mehrstufigen Bezahlvorgang machen und uns entzschlossen haben, die Parameter auf diese Weise zu übergeben. Ich denke, dass das Xform auch eher dafür konzipiert ist.

Aber zu Deinem Weg: Du kannst ein Hidden Field ja auch folgendermaßen definieren:
hidden|irgendeine_id|default_value|REQUEST|[no_db]
Hast Du das mal probiert? Vielleichtr ist sie dann auch mittels Email auszuwerten.

Grüße,
Peter.

benny0903
Beiträge: 17
Registriert: 5. Jun 2006, 22:20

18. Jul 2008, 10:51

Habe mir die Funktion noch einmal angeschaut.
Gute Idee!

Das Formular wird über folgenden Beispeillink aufgerufen:
/index.php?article_id=200&zeit=10.05.2008-18.05.2008

Folgende Zeile schreibe ich ins Formular:
hidden|zeit|nicht festgelegt|REQUEST|[no_db]

Und in den Mail-Body:
###zeit###

Gibt es keine Variable "zeit" so wird kein Hidden-Feld in Formular geschrieben und in der E-Mail steht anschließt der der Standard-Wert "nicht festgelegt". So soll es ja auch sein.
Gibt es die "zeit" so steht steht sie auch als Hidden-Feld im Quelltext des Formulars. Das ist prima. Aber warum wird der Platzhalter im Mail-Body nicht ersetzt. Es steht dort dann halt nur "###zeit###". Ein Bug? Wir stehen kurz vor dem Ziel. Meine ganzen anderen Überlegungen mit PHP sind eigentlich hinfällig, weil es diese value-Funktion lösen sollte. Wenn es nur in der Mail stehen würde.

Ich tippe auf einen Fehler in der class.xform.hidden.inc:

Code: Alles auswählen

function enterObject(&$email_elements,&$sql_elements,&$warning,&$form_output,$send = 0)
	{
		if (isset($this->elements[3]) && $this->elements[3]=="REQUEST" && isset($_REQUEST[$this->elements[1]]))
		{
			$this->value = $_REQUEST[$this->elements[1]];
			$form_output[] = '<input type="hidden" name="'.$this->elements[1].'" value="'.$this->value.'" />';
		}else
		{
			$this->value = $this->elements[2];
			$email_elements[$this->elements[1]] = $this->value;
			if (!isset($this->elements[4]) || $this->elements[4] != "no_db") $sql_elements[$this->elements[1]] = $this->value;
		}
Fehlt in der "Request-Schleife" nicht schlicht weg die folgende Festlegung:
$email_elements[$this->elements[1]] = $this->value;

Benutzeravatar
Peter.Bickel
Beiträge: 1856
Registriert: 25. Jan 2005, 21:17
Wohnort: Schleswig-Holstein
Kontaktdaten: Website

18. Jul 2008, 11:03

Probier's doch einfach mal aus, was dann passiert? ;-)

benny0903
Beiträge: 17
Registriert: 5. Jun 2006, 22:20

LÖSUNG

18. Jul 2008, 11:42

Ja. War ein Bug.
Eigentlich eine einfache Lösung.
Meine ganzen Umwege hätte ich mir uch sparen können.

Einfach die Schleife gegen diese austauschen:

Code: Alles auswählen

if (isset($this->elements[3]) && $this->elements[3]=="REQUEST" && isset($_REQUEST[$this->elements[1]]))
		{
			$this->value = $_REQUEST[$this->elements[1]];
			$form_output[] = '<input type="hidden" name="'.$this->elements[1].'" value="'.$this->value.'" />';
			$email_elements[$this->elements[1]] = $this->value;
		}
Ab jetzt wissen alle bescheid wie es geht!

Dios87
Beiträge: 50
Registriert: 14. Mär 2008, 17:04

29. Jul 2008, 13:52

Hallo benny0903,

Jedesmal wenn ich ein X-Form erstelle und versuche eine Variable über

Code: Alles auswählen

php|<?php  echo $_GET['a']; ?>
auszugeben bekomm ich eine Fehlermeldung nach dem speichern des Formulars. Kannst du mal beschreiben wie du's gemacht hast?

EDIT: Hat sich erledigt.

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

31. Jul 2008, 17:30

Hi,
... danke@benny hat schon was geholfen...

nur steh ich grad wieder aufm Schlauch.
Wie könnte man dem

Code: Alles auswählen

article|article_id
nun den Wert aus dem hiddenField

Code: Alles auswählen

hidden|kaufid|default_value|REQUEST|[no_db]
geben?

bzw. einen Artikel der email mitgeben?

article|18 .. so kann man sich ja eine Artikel anzeigen lassen...
den wert(id) würde ich der URL mitgeben (&kaufid=18)
und per HiddenField ins Formular einbauen.. nur wie?

Jemand eine Idee.
Danke schonmal. gruß Chris

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

1. Aug 2008, 13:31

ich hab mal die class.xform.article.inc.php
etwas erweitert:

Code: Alles auswählen

<?php

class rex_xform_article extends rex_xform_abstract
{

	function enterObject(&$email_elements,&$sql_elements,&$warning,&$form_output,$send = 0)
	{
		$artikel = new rex_article;
		$artikel->setArticleId($this->elements[1]);
		$form_output[] = '<div class="article">' . $artikel->getArticle() . '</div>';
	
		if (isset($this->elements[2]) && $this->elements[2]=="REQUEST" && isset($_REQUEST[$this->elements[1]]))
		{
			$this->value = $_REQUEST[$this->elements[1]];
			$artikel = new rex_article;
			$artikel->setArticleId($this->value);
			$form_output[] = '<div class="article">' . $artikel->getArticle() . '</div>';
			
		}
	}
	
	function getDescription()
	{
		return "
				article -> Beispiel: article|article_id
		<br />	article -> Beispiel: article|job_id|REQUEST
		";
	}

}

?>
somit kann man jetzt auch eine article(id) in die xForm per
URL-Übergabe einsetzten (oder so ;))

article|article_id (article_id fester Wert)
article|job_id|REQUEST (article|url_var|REQUEST)

Jetzt ist noch das Problem mit der Email.
Wie bekomm ich nun bestimmte $slice->getValue() des Artikels
in die email? ...

Code: Alles auswählen

if (isset($this->elements[2]) && $this->elements[2]=="REQUEST" && isset($_REQUEST[$this->elements[1]]))
		{
			$this->value = $_REQUEST[$this->elements[1]];
			$artikel = new rex_article;
			$artikel->setArticleId($this->value);
			$form_output[] = '<div class="article">' . $artikel->getArticle() . '</div>';
			
		}else
		
		{
			$this->value = $_REQUEST[$this->elements[1]];
			$slice = OOArticleSlice::getFirstSliceForArticle($this->value);
			$email_elements[$this->elements[1]] = $slice->getValue(1);
		}
funktioniert leider nicht ... :oops:

Danke schonmal. gruß Chris

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

1. Aug 2008, 14:14

hmm..
noch nicht ganz das Wahre:

Code: Alles auswählen

if (isset($this->elements[2]) && $this->elements[2]=="REQUEST" && isset($_REQUEST[$this->elements[1]]))
		{
			$this->value = $_REQUEST[$this->elements[1]];
			$artikel = new rex_article;
			$artikel->setArticleId($this->value);
			$form_output[] = '<div class="article">' . $artikel->getArticle() . '</div>';
			$form_output[] = '<input type="hidden" name="'.$this->elements[1].'" value="'.$this->value.'" />';
			//
			$email_elements[$this->elements[1]] = strip_tags($artikel->getArticle());
		}
soweit würde es schon funktionieren...

grz. Chris

ssurfer
Beiträge: 170
Registriert: 21. Nov 2007, 10:36

5. Aug 2008, 17:28

Hi,

hab habe das ganze so geregelt und danach hast du es auch im Mail-Body drinnen.

Modulausgabe:

Code: Alles auswählen

//REX_VALUE[3] ist hierbei die Formularbeschreibung
$form_data =<<< EOT
REX_VALUE[3]
EOT;
Übergeben tue ich es in der Formularbeschreibung so:

Code: Alles auswählen

hidden|test|$title
Die Variabel $title habe ich in der Modulausgabe gefüllt. Wenn du aber REQUEST-Parameter nutzt und diese vor der Anzeige des Formular bereits vorhanden sind, sollte auch diese ersetzt werden.

Gruß

ssurfer

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

26. Aug 2008, 17:15

Hi ssurfer,

sorry, aber deinen Ansatz versteh ich nicht ganz.
Könntest du das evtl. noch ein wenig genauer beschreiben wei wo was .. :oops:

Danke. grz. Chris

nowjeremy
Beiträge: 1
Registriert: 1. Apr 2009, 21:06

Varialbe wird nur in quelltext angelegt

1. Apr 2009, 21:14

Hey,

ich habe den Thread "X-Form Variable übergeben" wirklich genau studiert:) und die entsprechende Ergänzung in der class.xform.hidden.inc.php gemacht.
Leider wird trotzdem lediglich nur ein hidden feld im quelltext angelegt. wenn ich aber z.b. durch die mail oder text funktion zugreifen will, dann wird nur ###test### ausgegeben. Hat jemand vielleicht noch eine Idee, bzw wie habt ihr das Problem gelöst?

Zurück zu „Allgemeines [R4]“