[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
XForm Formular direkt per PHP bauen :) - Seite 3 - 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/
summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen - select_sql

25. Mai 2015, 14:29

Und hier die Lösung

Code: Alles auswählen

// get cities list for form select

$sql = rex_sql::factory();

$sql->setQuery("SELECT name FROM rex_schoolcinemamanager_locations ORDER BY name ASC");

 for($i=0; $i<$sql->getRows(); $i++) {
    $locations[] = $sql->getValue('name');
   $sql->next();
 }

$locationlist = implode(',', $locations);

$xform = new rex_xform();
$xform->setValueField('select', array('location', 'Locations'), $locationlist));

etc.


Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: XForm Formular direkt per PHP bauen :)

26. Mai 2015, 08:33

Hej,

dein erster Ansatz sollte funktionieren.

Code: Alles auswählen

$xform->setValueField('select_sql', array("location","Locations","SELECT name as id, name AS name FROM rex_schoolcinemamanager_locations ORDER BY name","","","1","bitte wählen"),"0"));
vg Thomas

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen - select_sql

26. Mai 2015, 09:54

Ne geht eben nicht, auch nicht in der Pipe. Ist eigentlich ein XForm-Klassiker, der mir schon viele Stunden geraubt hat :)

Und es geht übrigens auch nicht mit CONCAT() und auch nicht in Table Manager Tabellen (was ein ziemliches Problem darstellt bei Exporten dann und ich auch noch irgendwie lösen sollte...)

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: XForm Formular direkt per PHP bauen :)

27. Mai 2015, 08:54

Hej,

also ich verwende das des öfteren und glaub mir das klappt. Die Variante mit CONCAT geht übrigens auch.

vg Thomas

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen :)

27. Mai 2015, 09:21

Du siehst,dass es mir um die "Value=" geht? Ich habe den Code direkt aus dem Quellcode kopiert. Kann ich mal Deinen Quellcode anschauen? Würd mich echt interessieren. Und ich spreche nicht vom normalen select, sondern select_sql.

Code: Alles auswählen

<select class="select " id="xform-formular-field-2" name="location" size="1">
        <option value="0" selected="selected">bitte wählen</option>
        <option value="3">Chur</option>
        <option value="2">Horgen</option>
        <option value="1">Winterthur</option>
        <option value="4">Zürich</option>
 </select>

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: XForm Formular direkt per PHP bauen :)

27. Mai 2015, 09:51

Ich weiß jetzt nicht was du dir da ansehen willst

Bsp.:

Code: Alles auswählen

select_sql|label|Bezeichnung:|SELECT title AS id, title AS name FROM rex_table ORDER BY title
Ergibt

Code: Alles auswählen

<select class="select " name="label" size="1">
        <option value="" selected="selected">bitte wählen</option>
        <option value="Titel A">Titel A</option>
        <option value="Titel B">Titel B</option>
        <option value="Titel C">Titel C</option>
        <option value="Titel D">Titel D</option>
</select>
vg Thomas

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen :)

27. Mai 2015, 09:56

Wenn das so funktioniert, ist es genau das, was ich egsucht habe. Du hast da eine andere Syntax als die, welche ich fand. Merci.

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: XForm Formular direkt per PHP bauen :)

27. Mai 2015, 10:04

Inwiefern eine andere Syntax?

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen - select_sql

27. Mai 2015, 13:22

Im XForm (Page Beschreibung) steht folgendes

Code: Alles auswählen

select_sql -> Beispiel: select_sql|label|Bezeichnung:|select id,name from table order by name|[defaultvalue]|[no_db]|1/0 Leeroption|Leeroptionstext|1/0 Multiple Feld|selectsize
Aus dem XForm Table Manager (Felder editieren -> Formular) entnahm ich diese

Code: Alles auswählen

$xform->setValueField('select_sql', array("partner","Sponsoren","SELECT id, CONCAT(firma, ', ', vorname, ' ', nachname, ', ', tel_g) AS name FROM rex_crm_contacts WHERE stkh_sponsor LIKE "ja" ORDER BY firma ","","","1","bitte wählen","0"));
Beide führen zu Zahlen im Wert von value. Ich hatte keine Ahnung und konnte auch nicht herleiten, wie man es machen muss.

Korrekt ist also

Code: Alles auswählen

.... SELECT title AS id, title AS name FROM rex_table ..... 

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: XForm Formular direkt per PHP bauen - select_sql

28. Mai 2015, 11:03

summselbrumm!media hat geschrieben:Beide führen zu Zahlen im Wert von value. Ich hatte keine Ahnung und konnte auch nicht herleiten, wie man es machen muss.
richtig, weil du die ID Spalte für das value angegeben hast.

Richtig wäre

Code: Alles auswählen

SELECT CONCAT(firma, ', ', vorname, ' ', nachname, ', ', tel_g) AS id, CONCAT(firma, ', ', vorname, ' ', nachname, ', ', tel_g) AS name FROM rex_crm_contacts WHERE stkh_sponsor LIKE "ja" ORDER BY firma 
vg Thomas

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen - select_sql

30. Mai 2015, 12:24

Für die Addon-Entwicklung wollte ich noch wissen, wie den die Syntax von XForm in der Erstellung eines Backend-Formulars heisst. Das ist zwar nicht mehr XForm; trotzdem brauchts mans bei Erstellung eines Addons mit formularbefüllter Tabelle im Frontend, das vom Redaktor dann aber editierbar sein soll (z.B. für Kommentare, Mitgliederanmeldungen, Eventagendas etc.). Hier was ich zum Laufen gebracht habe als select_sql

Pipe:

Code: Alles auswählen

select_sql|label|Bezeichnung:|SELECT row1 AS id, row1 AS name FROM rex_table ORDER BY row1
im Frontend/Modul direkt via PHP:

Code: Alles auswählen

$xform->setValueField('select_sql', array("label","Bezeichnung","SELECT row1 AS id, row1 AS name FROM rex_table ORDER BY row1","","","1","bitte wählen","0"));
im Backend, z.B. für Formular-Ausgabe in einer Addon-Page:

Code: Alles auswählen

$field = &$form->addSelectField('label');
  $field->setLabel($I18N->msg('prefix_label'));
  $select = &$field->getSelect();
  select->setSize(1);
  $select->addOption($I18N->msg('prefix_pleasechoose'),0);
  $query = 'SELECT row1 AS label, row1 as id FROM rex_table ORDER BY row1';
  $select->addSqlOptions($query);
  $select->setAttribute('style','width: 150px');
Bzw. mit Concat, wenn man gleich mehrere Werte braucht, um Z.B. einen Serienbrief-Export vorzubereiten oder ähnliches:

Code: Alles auswählen

$field = &$form->addSelectField('label');
  $field->setLabel($I18N->msg('prefix_label'));
  $select = &$field->getSelect();
  select->setSize(1);
  $select->addOption($I18N->msg('prefix_pleasechoose'),0);
  $query = 'SELECT CONCAT(row1, ", ", row2) AS label, CONCAT(row1, ", ", row2) as id FROM rex_table ORDER BY row1';
  $select->addSqlOptions($query);
  $select->setAttribute('style','width: 150px');
Achtung: doppelte Anführungszeichen sind entscheidend.

Hinweis: redaxo/include/classes/class.rex_form.inc.php kann Hinweise geben.

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen - checkbox

30. Mai 2015, 14:35

Ich hoff, das führt nicht zu weit; aber die nächste Herausforderung ist eine Checkbox

Dies hier speichert nicht ab, ob checked oder nicht. Zeile 3 ist mir völlig unklar.

Code: Alles auswählen

$field = &$form->addCheckboxField('label'); 
    $field->setLabel($I18N->msg('prefix_label'));
    $field->addOption('','','nein,ja');
Alle Addon-Entwickler scheinen die eigentlich tolle form-Klasse zu umgehen und die Formulare direkt als html zu schreiben, wahrscheinlich weil radios und checkboxes nicht möglich sind? Weiss jm. Rat? Es bruacht dringend eine Dokumentation dazu, die Lernkurve hier ist viel zu steil.

Eine Möglichkeit ist auch eine checkbox mit select zu umgehen.

steri
Beiträge: 364
Registriert: 12. Jul 2007, 14:59

Re: XForm Formular direkt per PHP bauen :)

13. Dez 2015, 20:06

Hallo ich steh irgendwie grad an:
ich möchte dass bei einem Abo-Bestellformular die alternative Rechnungsadresse nur dann validiert wird wenn auch die checkbox "alternative Rechnungsadresse" angehackt ist.
Mein Aufbau sieht so aus:

Code: Alles auswählen

$xform = new rex_xform();
$xform->setObjectparams('form_skin', 'default');
$xform->setObjectparams('form_showformafterupdate', 0);
$xform->setObjectparams('real_field_names', true);
$xform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));
$xform->setObjectparams('form_anchor','abo_form');
$xform->setObjectparams('form_id','abo_formular');
$xform->setObjectparams('form_name','abo_formular');

$xform->setValueField('text', array("adresse","#placeholder:Adresse, Straße, Hausnummer *"));

$xform->setValueField('checkbox', array("andere_rechnungsadresse","Andere Rechnungsadresse","nein,ja","0"));

$xform->setValueField('text', array("rechnung_adresse","#placeholder:Adresse, Straße, Hausnummer *"));

$xform->setValueField('submit', array('senden', 'Bestellen'));

$xform->setValidateField('empty', array('adresse', 'Bitte Adresse eintragen!'));

$formData = $xform->objparams['value_pool']['email'];
if ($formData['andere_rechnungsadresse'] == 'ja') {
$xform->setValidateField('empty', array('rechnung_adresse', 'Bitte Rechnungs-Adresse eintragen!'));
}

$xform->setRedaxoVars($REX['ARTICLE_ID'], $REX['CUR_CLANG']);
$xform->setValueField('hidden', array('artikel_id', $REX['ARTICLE_ID']));

if (($form = $xform->getForm()) == '') {
	$formData = $xform->objparams['value_pool']['email'];
	
	
	
	print_r($formData);


} else {
    // show form
    echo $form;
}	 

Aber das funktioniert leider nicht weil das erste $formData oben leer bleibt - hat jemand eine idee wie ich da machen könnte?
danke!

Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

Re: XForm Formular direkt per PHP bauen :)

13. Dez 2015, 20:12

warum hast du 2 $formData's? normalerweise macht man nur 1 innerhalb if (($form = $xform->getForm()) == '') {.

steri
Beiträge: 364
Registriert: 12. Jul 2007, 14:59

Re: XForm Formular direkt per PHP bauen :)

13. Dez 2015, 20:39

ja das stimmt schon - aber wie bekomme ich sonst den wert für die

Code: Alles auswählen

if ($formData['andere_rechnungsadresse'] == 'ja') 
abfrage?
wenn ich vor der if abfrage $xform->objparams['value_pool']['email']; ausgebe enthält das irgendwie keine werte und ist ein leere array

steri
Beiträge: 364
Registriert: 12. Jul 2007, 14:59

Re: XForm Formular direkt per PHP bauen :)

13. Dez 2015, 21:35

habs nun mit
if (rex_request('andere_rechnungsadresse') == 'ja')
hinbekommen.

Code: Alles auswählen

<?php

$xform = new rex_xform();
$xform->setObjectparams('form_skin', 'default');
$xform->setObjectparams('form_showformafterupdate', 0);
$xform->setObjectparams('real_field_names', true);
$xform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));
$xform->setObjectparams('form_anchor','abo_form');
$xform->setObjectparams('form_id','abo_formular');
$xform->setObjectparams('form_name','abo_formular');

$xform->setValueField('text', array("adresse","#placeholder:Adresse, Straße, Hausnummer *"));

$xform->setValueField('checkbox', array("andere_rechnungsadresse","Andere Rechnungsadresse","nein,ja","0"));

$xform->setValueField('text', array("rechnung_adresse","#placeholder:Adresse, Straße, Hausnummer *"));

$xform->setValueField('submit', array('senden', 'Bestellen'));

$xform->setValidateField('empty', array('adresse', 'Bitte Adresse eintragen!'));

if (rex_request('andere_rechnungsadresse') == 'ja') {
$xform->setValidateField('empty', array('rechnung_adresse', 'Bitte Rechnungs-Adresse eintragen!'));
}

$xform->setRedaxoVars($REX['ARTICLE_ID'], $REX['CUR_CLANG']);
$xform->setValueField('hidden', array('artikel_id', $REX['ARTICLE_ID']));

if (($form = $xform->getForm()) == '') {
	$formData = $xform->objparams['value_pool']['email'];
	
	
	
	print_r($formData);


} else {
    // show form
    echo $form;
}	 

?>


steri
Beiträge: 364
Registriert: 12. Jul 2007, 14:59

Re: XForm Formular direkt per PHP bauen :)

15. Dez 2015, 15:04

jetzt hab ich noch ein anderes Problem was eher xform allgemein betreffen dürfte:
ich hab auf einer seite 2 Formulare - obwohl beide eine unterschiedliche id und namen haben springt beim ausfüllen des ersten formualrs nach absenden die seite zum zweiten unteren formular. und bei beiden formularen werden die warning messages ausgegeben obwohl eben nur das erste abgeschickt wurde. hab ich was übersehen?

form1

Code: Alles auswählen

$xform = new rex_xform();
$xform->setObjectparams('form_skin', 'default');
$xform->setObjectparams('form_showformafterupdate', 0);
$xform->setObjectparams('real_field_names', true);
$xform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));
$xform->setObjectparams('form_anchor','aboform');
$xform->setObjectparams('form_id','aboform');
$xform->setObjectparams('form_name','abo_formular');
$xform->setRedaxoVars($REX['ARTICLE_ID'], $REX['CUR_CLANG']);
$xform->setValueField('hidden', array('artikel_id', $REX['ARTICLE_ID']));
form2

Code: Alles auswählen

$xform = new rex_xform();
$xform->setObjectparams('form_skin', 'default');
$xform->setObjectparams('form_showformafterupdate', 0);
$xform->setObjectparams('real_field_names', true);
$xform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));
$xform->setObjectparams('form_anchor','koform');
$xform->setObjectparams('form_id','koform');
$xform->setObjectparams('form_name','kontakt_formular');
$xform->setRedaxoVars($REX['ARTICLE_ID'], $REX['CUR_CLANG']);
$xform->setValueField('hidden', array('artikel_id', $REX['ARTICLE_ID']));

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

Re: XForm Formular direkt per PHP bauen :)

15. Dez 2015, 15:32

Wenn ich das richtig sehe, wird die erste $xform-Variable vom durch das Formular überschrieben (Hat also nix mit Redaxo/xform zu tun, sondern PHP). Der Parameter form_id ist eher für die HTML-Ausgabe und Zuordnung innerhalb von xform gedacht. Versuchs mal so: (es allerdings nicht überprüft.)

form1

Code: Alles auswählen

$aboform = new rex_xform();
$aboform->setObjectparams('form_skin', 'default');
$aboform->setObjectparams('form_showformafterupdate', 0);
$aboform->setObjectparams('real_field_names', true);
$aboform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));
$aboform->setObjectparams('form_anchor','aboform');
$aboform->setObjectparams('form_id','aboform');
$aboform->setObjectparams('form_name','abo_formular');
$aboform->setRedaxoVars($REX['ARTICLE_ID'], $REX['CUR_CLANG']);
$aboform->setValueField('hidden', array('artikel_id', $REX['ARTICLE_ID']));
form2

Code: Alles auswählen

$koform = new rex_xform();
$koform->setObjectparams('form_skin', 'default');
$koform->setObjectparams('form_showformafterupdate', 0);
$koform->setObjectparams('real_field_names', true);
$koform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));
$koform->setObjectparams('form_anchor','koform');
$koform->setObjectparams('form_id','koform');
$koform->setObjectparams('form_name','kontakt_formular');
$koform->setRedaxoVars($REX['ARTICLE_ID'], $REX['CUR_CLANG']);
$koform->setValueField('hidden', array('artikel_id', $REX['ARTICLE_ID']));

steri
Beiträge: 364
Registriert: 12. Jul 2007, 14:59

Re: XForm Formular direkt per PHP bauen :)

15. Dez 2015, 15:54

danke - das hatte ich auch schon ausprobiert bzw. gedacht - ist leider trotzdem immer noch so

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

Re: XForm Formular direkt per PHP bauen :)

7. Jan 2016, 18:01

Hi,
jemand eine Idee wie man via PHP / xForm die URL manipulieren kann...

# bei error
if(error) dann mach url: "http://meine-domain.tld/#test

# bei success
if(send) dann url: "http://meine-domain.tld/#test

um damit auf einen id-Anker im HTML zu springen.

Danke schonmal.
grz. Chris

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

Re: XForm Formular direkt per PHP bauen :)

8. Jan 2016, 09:30

[erledigt] ...

Code: Alles auswählen

$xform->setObjectparams('form_anchor', 'meinAnker');
:oops: grz. Chris

Benutzeravatar
die su
Beiträge: 44
Registriert: 19. Jun 2008, 09:23
Wohnort: Heilbronn
Kontaktdaten: Website

Re: XForm Formular direkt per PHP bauen :)

29. Jun 2017, 00:41

Ich habe hierzu auch einen Hänger:
Das Formular soll nicht nur an den Empfänger geschickt werden, sondern auch an den Absender, der dieses Formular ausgefüllt hat.
Kann mir jemand da ---> weiterhelfen?

Code: Alles auswählen

// send email
    $mailTo = $emailTo;
   --->    $mailTo2 = $formData['email'];
    $mailFrom = 'buchungsformular@' . preg_replace('#^www\.(.+\.)#i', '$1', seo42::getServer());
    $mailSubject = 'Neue Buchung von ' . seo42::getServer();

    // mail body
    $mailBody = 'Neue Buchung von Internetseite <br />'.PHP_EOL;

Benutzeravatar
anita
Beiträge: 711
Registriert: 25. Jan 2007, 10:25
Wohnort: Finsterwalde

Re: XForm Formular direkt per PHP bauen :)

29. Jun 2017, 11:03

warum nimmst Du nicht db2email

hab nochmal nachgesehen z.B.

Code: Alles auswählen

 $xform->setActionField('db2email', array('booking_copy', 'emaillabel', 'info@dtp-stuttgart.de'));
            $xform->setActionField('db2email', array('booking', 'emaillabel', 'contact@javanita.com'));
e-mail-adressen anpassen; nachzulesen im Modul bookingform
Gruß Anita

javanita engineering, immer eine zündende Idee
http://www.javanita.com

Zurück zu „Allgemeines [R4]“