Hallo,
ich hab das Forum schon rauf und runter durchsucht und noch keine einfache Lösung gefunden...
Wie kann man bei einem xForm Formular eine PHP Variable mitgeben um sie z.B. in die Datenbak zu schreiben? In meinem Fall ist das die $user_id aus dem Community Addon. User können Artikel schreiben die in eine eigene Tabelle kommen. Diese Einträge brauchen natürlich auch die ensprechende User ID.
So in der Art:
php|<?php $user_id = $REX["COM_USER"]->getValue("id"); ?>
hidden|user_id|$user_id|
...
klappt natürlich nicht - aber man sieht so wie ich das meine.
Geht das?
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/
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/
Ok - habs jetzt mit einem kleinen Workarround gelöst. Wenns Einfacher geht - lasst es mich wissen....
in die xForm Formularbeschreibung:
und in die xForm Modulausgabe folgendes nach $form_data = 'REX_VALUE[3]'; eingefügt:
der Platzhalter {user_id} wird also in der Modulausgabe mit dem eigentlichen Wert ersetzt.
in die xForm Formularbeschreibung:
Code: Alles auswählen
hidden|user_id|{user_id}|
Code: Alles auswählen
$user_id = 0;
if (isset($REX['COM_USER']) && is_object($REX['COM_USER'])){
$user_id = $REX["COM_USER"]->getValue("id");
}
$form_data = str_replace('{user_id}',$user_id,$form_data);
Re: xForm PHP Variable mitgeben
Oh, schon etwas älter, aber ich hab gerade das selbe Problem.
Ins main_where kann man die user id laden, aber wie komm ich durch die user id an die Mitgliedsdaten um sie z.B. in einer eMail zu verwenden?
Ich nehme auch mal diesen Workaroudn..
Ins main_where kann man die user id laden, aber wie komm ich durch die user id an die Mitgliedsdaten um sie z.B. in einer eMail zu verwenden?
Ich nehme auch mal diesen Workaroudn..
Re: xForm PHP Variable mitgeben
Gibt's eigentlich (inzwischen) eine offizielle Lösung, ohne diesen Workaround?
Edit: Hab da mal einen Vorschlag auf Github....
VG
Edit: Hab da mal einen Vorschlag auf Github....
VG
Re: xForm PHP Variable mitgeben
Hallo zusammen,
ich wollte ebenfalls den Inhalt einer PHP-Session-Variable mit ins Formular "schießen", um sie dort zu verwenden. Lösung wie folgt (für R4):
Achtung dieses Vorgehen ist nicht ganz ungefährlich und man sollte sich der Angriffsvektoren bewusst sein, die man unter Umständen aufreißt!
Ich lege mir für diesen Zweck eine Value-Feld-Klasse an. Als Basis dient die bereits existierende "php"-Klasse, diese wird dahingehend abgeändert, dass die PHP-Code nicht nur ausgewertet und ausgegeben wird, sondern wie in den anderen Klassen auch mit dem Formular transportiert.
Wir kopieren unter /redaxo/include/addons/xform/classes/value die Datei class.xform.php.inc.php und benennen diese in class.xform.php2form.inc.php.
Die neue Datei class.xform.php2form.inc.php wird nun wie folgt angepasst:
Den Klassennamen in Zeile 9 ändern wir von
in
Die Ausgabe in Zeile 18
kommentieren wir bei Bedarf aus und fügen danach folgenden Code ein:
Das wars.
Nun wird wie in der Beschreibung der neuen Klasse
das ausgegeben Datum via "name" verfügbar und kann ganz normal per E-Mail-Template versendet werden.
Achtung: "name" wird nicht in die Datenbank geschrieben.
Sollte das gewünscht sein, sieht die Klassendatei wie folgt aus:
Ich hoffe, es haben sich keine Fehler eingschlichen!
VG, Markus
ich wollte ebenfalls den Inhalt einer PHP-Session-Variable mit ins Formular "schießen", um sie dort zu verwenden. Lösung wie folgt (für R4):
Achtung dieses Vorgehen ist nicht ganz ungefährlich und man sollte sich der Angriffsvektoren bewusst sein, die man unter Umständen aufreißt!
Ich lege mir für diesen Zweck eine Value-Feld-Klasse an. Als Basis dient die bereits existierende "php"-Klasse, diese wird dahingehend abgeändert, dass die PHP-Code nicht nur ausgewertet und ausgegeben wird, sondern wie in den anderen Klassen auch mit dem Formular transportiert.
Wir kopieren unter /redaxo/include/addons/xform/classes/value die Datei class.xform.php.inc.php und benennen diese in class.xform.php2form.inc.php.
Die neue Datei class.xform.php2form.inc.php wird nun wie folgt angepasst:
Den Klassennamen in Zeile 9 ändern wir von
Code: Alles auswählen
class rex_xform_php extends rex_xform_abstract
Code: Alles auswählen
class rex_xform_php2form extends rex_xform_abstract
Code: Alles auswählen
$this->params['form_output'][$this->getId()] = $out;
Code: Alles auswählen
$this->params['value_pool']['email'][$this->getName()] = stripslashes($out);
Nun wird wie in der Beschreibung der neuen Klasse
Code: Alles auswählen
php2form -> Beispiel: php2form|name|<?php echo date("mdY"); ?>
Achtung: "name" wird nicht in die Datenbank geschrieben.
Sollte das gewünscht sein, sieht die Klassendatei wie folgt aus:
Code: Alles auswählen
<?php
/**
* XForm
* @author jan.kristinus[at]redaxo[dot]org Jan Kristinus
* @author <a href="http://www.yakamara.de">www.yakamara.de</a>
*/
class rex_xform_php2form extends rex_xform_abstract
{
function enterObject()
{
ob_start();
eval('?>' . $this->getElement(2));
$out = ob_get_contents();
ob_end_clean();
//Keine Ausgabe innerhalb des Formulares benötigt.
//$this->params['form_output'][$this->getId()] = $out;
$this->params['value_pool']['email'][$this->getName()] = stripslashes($out);
if ($this->getElement(4) != 'no_db') {
$this->params['value_pool']['sql'][$this->getName()] = $this->getValue();
}
}
function getDescription()
{
return htmlspecialchars(stripslashes('php2form -> Beispiel: php2form|name|<?php echo date("mdY"); ?>|[no_db]'));
}
function getDefinitions()
{
return array(
'type' => 'value',
'name' => 'php2form',
'values' => array(
'name' => array( 'type' => 'name', 'label' => 'Feld' ),
'label' => array( 'type' => 'textarea', 'label' => 'PHP Code'),
'no_db' => array( 'type' => 'no_db', 'label' => 'Datenbank', 'default' => 0),
),
'description' => 'Ein PHP Code',
'dbtype' => 'text',
'famous' => false
);
}
}
VG, Markus