neues formularmodul :: w3concepts.form.v1

Haue
Beiträge: 43
Registriert: Mi 27. Okt 2004, 20:25
Wohnort: Emsland
Kontaktdaten:

Beitrag von Haue »

Sorry für die dumme Frage aber:
Ich habe mir das Beispielformular eingebaut. Wie oder wo ändere ich denn jetzt die Andresse, an die die Mail geschickt wird? Ist das in dem Input-Teil?
Auch die Färbung der nicht ausgefüllten Felder mir ROT (wie im Beispiel) funktioniert bei mir nicht...

PS: Ich kann den Container 7 (Bei mir mit dem Formularmodul belegt) auch in der Konfiguration nicht bearbeiten. Er wird nicht angezeigt!?!
noway
Beiträge: 10
Registriert: Do 7. Aug 2003, 15:30
Kontaktdaten:

Style CSS

Beitrag von noway »

Hallo erstmal und danke für eine coole Erweiterrung in COntenido !!

Ich habe bisher die Formulare immer über Templates eingebunden.

Kann ich der Anweisung von CSS Klassen machen, über zb style:top1; ?
um daraus dann style="top1" zu bekommen ?
Ich habe im queltext die Variable $style zwar gesehen.
Aber wo wird sie defeniert ?

Gruß Klaus
cardman
Beiträge: 61
Registriert: Mi 11. Jun 2003, 09:34
Kontaktdaten:

Beitrag von cardman »

Hallo,

Ich hab leider ein kleines Problem mit dem Modul.

Nachdem ich es komplett wie beschrieben engebunden hatte, wollte ich es anhand des Besispielformulars testen. Leider bekomme ich das Formular nicht angezeigt.

Worann kann das den liegen?

gruß cardman
saschar
Beiträge: 141
Registriert: Mo 21. Okt 2002, 14:37
Wohnort: Dornbirn, A
Kontaktdaten:

Habe da auch ein kleines Problem...

Beitrag von saschar »

Hallo.
Wäre ja echt ein tolles Modul, bloss funktioniert es bei mir leider nicht.
Ich habe zuerst das aus dem Forum, dann das von w3concepts-Website und
dann die modifizierten Modul-Varinaten probiert und ich bekomme bei der Vorschau oder auch wenn ich den Artikel freischalte nur die Fehlermeldung:

echo "No code available.";

oder auch einfach nur ein weisses Fenster.

Ich verwende Mac OS X und Firefox als Browser.

Hat hier jemand einen Tipp?

Schöne Grüße
Sascha
Haue
Beiträge: 43
Registriert: Mi 27. Okt 2004, 20:25
Wohnort: Emsland
Kontaktdaten:

Beitrag von Haue »

Hi, wie kann ich bei der Sendebestätigung das ausgeben, was der Kunde mir per email geschickt hat?

Also etwa so:
Sie haben folgendes gesendet:
Name: Harry Müller
Email: Harry@mueller.de
usw...
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

die daten werden per post übergeben und sind folglich als superglobale variablen über $_POST ansprechbar. du musst allerdings das ganze direkt im modul lösen; das geht leider nicht einfach über den bestätigungsteil der konfiguration.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
Haue
Beiträge: 43
Registriert: Mi 27. Okt 2004, 20:25
Wohnort: Emsland
Kontaktdaten:

Beitrag von Haue »

Wie würde das denn beispielhaft aussehen?
Hier mein output:

Code: Alles auswählen

<?php

/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     w3concepts.form.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     20-08-2004
* Modified    :     20-08-2004
************************************************/

class w3form {

	var $email, $aufgedroeselt, $form, $formularFeld;

	function w3form() {
	}

	// PRIVATE
	function sendEmail() {
		$this->aufdroeseln($this->suppress('sent'));
		$this->generateEmailMessage();
		mail($this->email['adresses'],$this->email['subject'],$this->email['message'],"From: {$this->email['from']['name']} <{$this->email['from']['email']}>\nReply-To: {$this->email['from']['email']}\nX-Mailer: PHP/" . phpversion());
	}

	// PRIVATE
	function aufdroeseln($aufzudroeseln,$prefix = '') {
		foreach ($aufzudroeseln as $key => $value) {
			if (is_array($value)) {
				$this->aufdroeseln($value,$key." ");
			} else {
				$this->aufgedroeselt["{$prefix}{$key}"] = $value;
			}
		}
	}

	// PRIVATE
	function add2Message($key,$value) {
		if (strlen($key) > 25 OR strlen($value) > 54) {
			$this->email['message'] .= "$key\n$value\n";
		} else {
		$this->email['message'] .= $key;
		$this->email['message'] .= str_repeat(' ',25-strlen($key));
		$this->email['message'] .= "$value\n";
		}
	}

	// PRIVATE
	function generateEmailMessage() {
		if ($this->aufgedroeselt) foreach ($this->aufgedroeselt as $key => $value) {
			$this->add2Message($key,$value);
		}
	}

	// PRIVATE
	function suppress() {
		$suppress = func_get_args();
		foreach ($_POST as $key => $value) {
			if (array_search($key,$suppress) === false) $fields[$key] = $value;
		}
		return $fields;
	}



	// PUBLIC
	function addEmailAdress($email) {
		if (empty($this->emailAdresses)) {
			$this->email['adresses'] .= "$email";
		} else {
			$this->email['adresses'] .= ", $email";
		}
	}

	// PUBLIC
	function setEmailSubject($subject) {
		$this->email['subject'] = $subject;
	}

	// PUBLIC
	function setEmailFrom($email,$name) {
		$this->email['from']['email'] = $email;
		$this->email['from']['name'] = $name;
	}

	// PUBLIC
	function setForm($form) {
		$this->form['form'] = $form;
	}

	// PUBLIC
	function setAnswer($answer) {
		$this->form['answer'] = $answer;
	}

	// PUBLIC
	function setBackgroundError($color) {
		$this->form['colorError'] = $color;
	}

	// PRIVATE
	function formularInterpretation(&$formular) {
		$felder = split('###',$formular);
		for ($i=1;$i<count($felder);$i=$i+2) {
			$attributte = split(';',trim($felder[$i]));
			foreach ($attributte as $attribut) {
				$namewert = split(':',trim($attribut));
				if ($namewert[0] != 'option' && $namewert[0] != 'optionvalue') {
					$feld["{$felder[$i]}"]["{$namewert[0]}"] = $namewert[1];
				} else {
					$feld["{$felder[$i]}"]["{$namewert[0]}"][] = $namewert[1];
				}
			}
		}
		return $feld;
	}

	// PRIVATE
	function formularAusgabe($sent = false) {
		echo '<form action="" method="POST">';
		echo '<input type="hidden" name="sent" value="true" />';
		$formular = $this->form['form'];
		$formulardaten = $this->formularInterpretation(&$formular);
		$formular = split('###',$formular);
		foreach ($formular as $formularteil) {
			if (!empty($formulardaten["{$formularteil}"])) {
				$this->formularFeld($formulardaten["{$formularteil}"],$sent);
			} else {
				echo $formularteil;
			}
		}
		echo '</form>';
	}

	// PRIVATE
	function formularFeld($attribute,$sent) {
		$parameter = "name=\"{$attribute['name']}\"";
		if ($sent && !$this->formularFeldKorrekt(&$attribute)) $style ="style=\"background-color:{$this->form['colorError']};\"";
		switch ($attribute['type']) {
			case 'select':
			case 'password':
			case 'text':
				if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\"";
				break;
		}
		switch ($attribute['type']) {
			case 'textarea':
			case 'text':
				if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\"";
				if (!empty($attribute['value'])) $value = $attribute['value'];
				if (!empty($_POST["{$attribute['name']}"])) $value = $_POST["{$attribute['name']}"];
				break;
		}
		switch ($attribute['type']) {
			case 'text':
				echo "<input type=\"text\" $parameter value=\"$value\" $style />";
				break;
			case 'password':
				echo "<input type=\"password\" $parameter value=\"$value\" $style />";
				break;
			case 'textarea':
				echo "<textarea name=\"{$attribute['name']}\" cols=\"";
				echo (empty($attribute['cols']))?('20'):($attribute['cols']);
				echo "\" rows=\"";
				echo (empty($attribute['rows']))?('2'):($attribute['rows']);
				echo "\" wrap=\"virtual\" $style>$value</textarea>";
				break;
			case 'select':
				echo "<select $parameter $style>";
				for ($i=0;$i<count($attribute['option']);$i++) {
					if (!empty($attribute['optionvalue'][$i])) {
						if (!empty($_POST["{$attribute['name']}"]) && $_POST["{$attribute['name']}"] == $attribute['optionvalue'][$i]) {
							echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n";
						} else {
							if (empty($_POST["{$attribute['name']}"]) && !empty($attribute['optionvalue'][$i]) && $attribute['optionvalue'][$i] == $attribute['value']) {
								echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n";
							} else {
								echo "<option value=\"{$attribute['optionvalue'][$i]}\">{$attribute['option'][$i]}</option>\n";
							}
						}
					} else {
						if (!empty($_POST["{$attribute['name']}"]) && $_POST["{$attribute['name']}"] == $attribute['option'][$i]) {
							echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n";
						} else {
							if (empty($_POST["{$attribute['name']}"]) && $attribute['option'][$i] == $attribute['value']) {
								echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n";
							} else {
								echo "<option>{$attribute['option'][$i]}</option>\n";
							}
						}
					}
				}
				echo "</select>";
				break;
			case 'checkbox':
				$formularbezeichner = preg_split('[\[|\]]',$attribute['name']);
				if ($sent) {
					if ($_POST["{$formularbezeichner[0]}"]["{$formularbezeichner[1]}"] == $attribute['value']) {
						echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
					} else {
						echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\"/>";
					}
				} else {
					if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
						echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
					} else {
						echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\"/>";
					}
				}
				break;
			case 'radio':
				if (!empty($_POST["{$attribute['name']}"])) {
					if ($_POST["{$attribute['name']}"] == $attribute['value']) {
						echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
					} else {
						echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" />";
					}
				} else {
					if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
						echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
					} else {
						echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\"/>";
					}
				}
				break;
		}
	}

	// PRIVATE
	function formularVollstaendig() {

		$formular = $this->form['form'];

		$felder = $this->formularInterpretation(&$formular);

		foreach ($felder as $feld) {
			if (!$this->formularFeldKorrekt(&$feld)) return false;
		}

		return true;
	}

	// PRIVATE
	function success() {
		$this->sendEmail();
		echo $this->form['answer'];
	}

	// PRIVATE
	function formularFeldKorrekt(&$feld) {

		// prüfung, ob pflichtfeld vorhanden
		if (!empty($feld['mandatory']) && $feld['mandatory'] == 'true' && empty($_POST["{$feld['name']}"])) return false;

		// wenn das formularfeld kein pflichtfeld und nicht vorhanden ist, true zurück geben
		if (empty($_POST["{$feld['name']}"])) return true;

		// regular expression prüfungen
		if (!empty($feld['valid']) && $feld['valid'] == 'simpletext' && !eregi("^[öäüéàèâêîça-z-]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'text' && !eregi("^[ .,;!?()öäüéàèâêîça-z-]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'integer' && !eregi("^[0-9]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'float' && !eregi("^[0-9]*[.]{0,1}[0-9]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'date' && !eregi("^[0-9]{1,2}.[0-9]{1,2}.[0-9]{2}$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'email' && !eregi("^[öäüéàèâêîç_a-z0-9-]+(\.[öäüéàèâêîç_a-z0-9-]+)*@[öäüéàèâêîça-z0-9-]+(\.[öäüéàèâêîça-z0-9-]+)*$",$_POST["{$feld['name']}"])) return false;

		// grössenbereich bei integer und float prüfen
		if (!empty($feld['minvalue']) && $_POST["{$feld['name']}"] < $feld['minvalue']) return false;
		if (!empty($feld['maxvalue']) && $_POST["{$feld['name']}"] > $feld['maxvalue']) return false;

		// längenbereich bei allen typen prüfen
		if (!empty($feld['minlength']) && strlen($_POST["{$feld['name']}"]) < $feld['minlength']) return false;
		if (!empty($feld['maxlength']) && strlen($_POST["{$feld['name']}"]) > $feld['maxlength']) return false;

		return true;
	}

	//PUBLIC
	function process() {
		if (!isset($_POST['sent'])) {
			$this->formularAusgabe();
		} elseif ($this->formularVollstaendig()) {
			$this->success();
		} else {
			$this->formularAusgabe(true);
		}
	}

}

if ($edit) {
	echo "<h1>Formularkonfiguration</h1>";
	echo "<p>Hier ist das Formular sowie der Text einzugeben, der zusammen mit dem Formular ausgegeben werden soll:</p>";
	echo "CMS_HTML[0]";
	echo "<p>Hier ist die Ausgabe einzugeben, die erscheint, wenn das Formular erfolgreich prozessiert worden ist:</p>";
	echo "CMS_HTML[1]";
} else {
	$formular = new w3form();
	$formular->addEmailAdress("CMS_VALUE[0]");
	$formular->setEmailSubject("CMS_VALUE[1]");
	$formular->setEmailFrom("CMS_VALUE[2]","CMS_VALUE[3]");
	$formular->setBackgroundError("CMS_VALUE[4]");
	$formular->setForm("CMS_HTML[0]");
	$formular->setAnswer("CMS_HTML[1]");
	$formular->process();
}

?>
cardman
Beiträge: 61
Registriert: Mi 11. Jun 2003, 09:34
Kontaktdaten:

Beitrag von cardman »

Hallo,

Ich würde dieses Modul auch gerne benutzen, allerdings funktioniert es nicht wirklich bei mir. Ich bekomme leider das Fomular, das ich im Editor erstellt habe nicht angezeigt im frontend.

Ich nutze Contenido 4.4.4.

Für eine schnelle antwort bin ich dankbar.
bru
Beiträge: 7
Registriert: Do 29. Apr 2004, 15:58
Kontaktdaten:

Zusätzlicher Text im Mail mitsenden

Beitrag von bru »

Hi

erst mal danke für dieses Top-Modul!

Ich würde gerne im Mail mit den Formulardaten noch einen "Standardtext mitsenden" welchen ich in der Konfiguration eingeben kann.
Ähnlich dem Betreff, aber der Text soll im Mail selbst erscheinen

Hab schon ein bisschen rumgedocktert, aber leider krieg ich's nicht hin...

Greets
bru
grossy
Beiträge: 57
Registriert: Mi 28. Apr 2004, 12:56
Wohnort: downunder
Kontaktdaten:

Beitrag von grossy »

folgendes problem besteht noch und ist jetzt auch bei mir aufgetreten:

[quote]
Das Skript läuft auf dem Server der Universität Regensburg.
Als Absendername steht nur eine Email-Adresse da,
und die setzt sich aus dem Kundennamen und dem Servernamen zusammen,
also

kundenname@rss1.rz.uni-regensburg.de

Was kann man da tun???
[/quote]

als kundenname wäre es schön wirklich nur den kundenname zu bekommen nicht noch den anhang "@irgendeinserver.de"...

hat jemand ne idee?[/quote]
grossy
Beiträge: 57
Registriert: Mi 28. Apr 2004, 12:56
Wohnort: downunder
Kontaktdaten:

Beitrag von grossy »

folgendes problem besteht noch und ist jetzt auch bei mir aufgetreten. hab kundenname und emailadresse jetzt übergeben, sodass man problemlos auf die kundenmail antworten kann (daten stehen jetzt im "from:"). problem ist das der kundename einen unschönen anhang hat...
Das Skript läuft auf dem Server der Universität Regensburg.
Als Absendername steht nur eine Email-Adresse da,
und die setzt sich aus dem Kundennamen und dem Servernamen zusammen,
also

kundenname@rss1.rz.uni-regensburg.de

Was kann man da tun???
als kundenname wäre es schön wirklich nur den kundenname zu bekommen nicht noch den anhang "@irgendeinserver.de"...

hat jemand ne idee?[/quote]
toipan
Beiträge: 6
Registriert: So 17. Okt 2004, 20:11
Kontaktdaten:

Beitrag von toipan »

Komme irgendwie mit dem Formular nicht so ganz klar. Habe jetzt einfach mal versucht das Beispielformular von kummer (danke ;)) zu übernehmen. Ich setze das Output Script bei Output rein, das Input Script bei Input und das Table Script im Formularartikel. Wenn ich mir nun die Seite anschaue, erhalte ich immer nur Text mit ###......###;###....### aber keine Formularfelder. Aber eigentlich sollten diese doch automatisch erkannt werden? Irgendwie hakt es bei mir da.

Kann mir da vielleicht jemand helfen ?

Nutze Contenido 4.4 bei all-inkl.com, falls das von Bedeutung sein sollte.

Gruß & Dank

Alex
Hoax
Beiträge: 2
Registriert: Mi 5. Jan 2005, 23:52
Kontaktdaten:

Re: neues formularmodul :: w3concepts.form.v1

Beitrag von Hoax »

kummer hat geschrieben:name:feldbezeichnung (pflicht)
type:text (pflicht; zur auswahl stehen: text, textarea, password, select, radio, checkbox)
valid:integer (optional; zur auswahl stehen: simpletext, text, integer, date, email, float)
mandatory:true (optional; zur auswahl stehen: true, false)
value:wert (optional; wert bezeichnet der vorgabewert)
size:12 (optional; breite des feldes)
cols:30 (optional; breite eines textarea-feldes)
rows:5 (optional; höhe eines textarea-feldes)
option:anzeigewert (pflicht bei select; wert, welcher im browser angezeigt wird)
optionvalue:speicherwert (optional; wert welcher bei selects übertragen wird)
minvalue:1 (optional; mindestwert, der einzugeben ist)
maxvalue:100 (optional; maximalwert, der eingegeben werden darf)
minlength:3 (optional; minimale anzahl zeichen, die eingegeben werden müssen)
maxlength:8 (optional; maximale anzahl zeichen, die eingegeben werden dürfen)
Ein Feld für "id" wäre sehr wichtig, da bei barrierefreien Layouts Formulare mit

Code: Alles auswählen

<label for="vorname"></label><input type="text" name="vorname" id="vorname"/>
ausgezeichnet werden müssen.
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

und dürfte dabei die id identisch mit den feldnamen sein? oder müsste man dafür eine weitere variable einführen?
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
i-fekt
Beiträge: 1520
Registriert: Mo 3. Jan 2005, 02:15
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von i-fekt »

Ist im Prinzip egal, das Feld "id" hat nur für den Textbrowser eine Bedeutung und kann im Script selber ignoriert werden.

Das was bei <label for="xx">...</label> steht muss nur hinten bei id="xx" in dem Input Feld stehen.

Man könnte also auch den Feldname nehmen.
Gesperrt