wheez
Beiträge: 33
Registriert: 21. Jan 2008, 18:01

xForm PHP Variable mitgeben

17. Dez 2009, 18:31

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?

wheez
Beiträge: 33
Registriert: 21. Jan 2008, 18:01

18. Dez 2009, 14:40

Ok - habs jetzt mit einem kleinen Workarround gelöst. Wenns Einfacher geht - lasst es mich wissen....

in die xForm Formularbeschreibung:

Code: Alles auswählen

hidden|user_id|{user_id}| 
und in die xForm Modulausgabe folgendes nach $form_data = 'REX_VALUE[3]'; eingefügt:

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);
der Platzhalter {user_id} wird also in der Modulausgabe mit dem eigentlichen Wert ersetzt.

tarnschaf
Beiträge: 8
Registriert: 13. Aug 2009, 02:31

Re: xForm PHP Variable mitgeben

11. Sep 2011, 18:05

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..

Benutzeravatar
alexplus
Beiträge: 204
Registriert: 13. Feb 2007, 15:03
Wohnort: Heilbronn
Kontaktdaten: Website

Re: xForm PHP Variable mitgeben

28. Feb 2014, 21:00

Gibt's eigentlich (inzwischen) eine offizielle Lösung, ohne diesen Workaround?

Edit: Hab da mal einen Vorschlag auf Github....

VG

Benutzeravatar
pingback
Beiträge: 4
Registriert: 26. Jun 2009, 13:25
Wohnort: Jena

Re: xForm PHP Variable mitgeben

17. Mär 2018, 16:20

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

Code: Alles auswählen

class rex_xform_php extends rex_xform_abstract
in

Code: Alles auswählen

class rex_xform_php2form extends rex_xform_abstract
Die Ausgabe in Zeile 18

Code: Alles auswählen

$this->params['form_output'][$this->getId()] = $out;
kommentieren wir bei Bedarf aus und fügen danach folgenden Code ein:

Code: Alles auswählen

$this->params['value_pool']['email'][$this->getName()] = stripslashes($out);
Das wars.

Nun wird wie in der Beschreibung der neuen Klasse

Code: Alles auswählen

php2form -> Beispiel: php2form|name|<?php echo date("mdY"); ?>
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:

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
        );
    }
}
Ich hoffe, es haben sich keine Fehler eingschlichen! :)

VG, Markus

Zurück zu „AddOns [R4]“