[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • xForm PHP Variable mitgeben
Seite 1 von 1

xForm PHP Variable mitgeben

Verfasst: 17. Dez 2009, 18:31
von wheez
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?

Verfasst: 18. Dez 2009, 14:40
von wheez
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.

Re: xForm PHP Variable mitgeben

Verfasst: 11. Sep 2011, 18:05
von tarnschaf
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..

Re: xForm PHP Variable mitgeben

Verfasst: 28. Feb 2014, 21:00
von alexplus
Gibt's eigentlich (inzwischen) eine offizielle Lösung, ohne diesen Workaround?

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

VG

Re: xForm PHP Variable mitgeben

Verfasst: 17. Mär 2018, 16:20
von pingback
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