neues formularmodul :: w3concepts.form.v1

smeusel
Beiträge: 53
Registriert: Do 18. Mär 2004, 11:27
Kontaktdaten:

Beitrag von smeusel » Sa 9. Okt 2004, 18:02

ja, ich habe mir den code auch schon x-mal angeschaut. ich begreife nur nicht, wo letztlich deffiniert wird, das die values ausgegeben werden. wenn ich das gefunden hätte, würde ich einfach mal versuchen das in options zu ändern. d.h. das die values ganz normal ihrer bestimmung weitergehen und halt stattdessen nur die options ausgegeben werden.

die values haben für mich halt zur zeit nur den zweck der pflichtangabenauswahl, da man damit hier einfach und schnell arbeiten kann.

wenn du mir einen hinweis auf die stelle im code geben kannst, dann setzte ich mich hin und probiere weiter. ich hänge da halt nur gerade (wie in einem guten adventure :-) )

danke,
stephan

OAA
Beiträge: 134
Registriert: Sa 15. Nov 2003, 15:54
Wohnort: Regensburg
Kontaktdaten:

Beitrag von OAA » So 10. Okt 2004, 13:47

So jetzt habe ich alles in den Griff gebracht, bis auf eins:

wenn jemand einen Text, oder Bemrkung schreiben möchte, und dabei Absätze verwendet, wird das formular nicht verschickt.

bei diesem Text geht es:

Code: Alles auswählen

Hallo Frau Müller, wie geht es Ihnen? ich wünsche Ihnen gute Besserung. MfG Herr Maier
Und das hier geht nicht:

Code: Alles auswählen

Hallo Frau Müller, 

wie geht es Ihnen? 
ich wünsche Ihnen gute Besserung. 

MfG Herr Maier
Hat da jemand eine Lösung?

smeusel
Beiträge: 53
Registriert: Do 18. Mär 2004, 11:27
Kontaktdaten:

Beitrag von smeusel » So 10. Okt 2004, 23:30

kummer hat geschrieben: wenn es ein pflichtfeld sein soll, muss du ohnehin noch eine dritte option angeben, die ursprünglich ausgewählt ist. also z.b. 'bitte wählen...' (oder auch einfach ein leerzeichen). und diese option hat dann wieder mehr (oder auch weniger) als vier buchstaben. dann sollte es auch wieder funktionieren (auch ohne values).
Hi kummer,

ich habe das jetzt mal in allen varianten ausprobiert. sobald ich ein dropdown menu habe und die values weglasse und dafür ein min und maxlength einsetzte, dann wird nichts mehr weggeschickt. er prüft und wartet auf eine korrekte eingabe. er kann scheinbar mit "lenght" in diesem fall nichts anfangen.
sobald ich wieder values einsetze, dann geht es wieder. aber dann bin ich wieder bei meinem alten problem, dass auch nur bei den dropdown menüs auftaucht.

:-)
stephan

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Mo 11. Okt 2004, 09:59

smeusel hat geschrieben:er kann scheinbar mit "lenght" in diesem fall nichts anfangen.
könnte es sein, dass nur ein schreibfehler besteht? weil es müsste length heissen und nicht lenght. :wink:
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

smeusel
Beiträge: 53
Registriert: Do 18. Mär 2004, 11:27
Kontaktdaten:

Beitrag von smeusel » Mo 11. Okt 2004, 13:08

:D

ich habe nochmal geschaut, aber im code habe ich es schon richtig geschrieben. nur hier im forum falsch...

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Mo 11. Okt 2004, 13:11

kannst du es hier mal publizieren? ich meine nicht das modul, sondern das formular selber, so wie du es in der konfiguration angibst.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Mo 11. Okt 2004, 13:35

zeilenumbruchproblem behoben

das problem bei zeilenumbrüchen in textfeldern habe ich lösen können. dazu muss in der methode 'formularFeldKorrekt()' folgende zeile zusätzlich eingefügt werden:

Code: Alles auswählen

if (!empty($feld['valid']) && $feld['valid'] == 'textmitumbruch' && !eregi("^[ \n\r.,;!?()öäüéàèâêîça-z0-9-]*$",$_POST["{$feld['name']}"])) return false;
in der konfiguration muss dann einfach anstatt 'valid:text' 'valid:textmitumbruch' verwendet werden.

man kann selbstverständlich auch einfach die bestehende zeile 'text' durch 'textmitumbruch' ersetzten und dann in 'text' umbenennen. allerdings dürfte es nie schaden, eine vielfalt an regex-prüfungen zur verfügung zu haben. es könnte ja sein, dass in einem einzelfall genau der ausschluss von zeilenumbrüchen gefragt sein könnte.

gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

smeusel
Beiträge: 53
Registriert: Do 18. Mär 2004, 11:27
Kontaktdaten:

Beitrag von smeusel » Mo 11. Okt 2004, 14:05

kummer hat geschrieben:kannst du es hier mal publizieren? ich meine nicht das modul, sondern das formular selber, so wie du es in der konfiguration angibst.
so schaut er mit values aus, wo halt leider nur die nummer, aber nicht der text in die mail geschrieben wird:

Code: Alles auswählen

###name:anrede; type:select; valid:integer; size:1; option:bitte auswählen; optionvalue:0; option:Frau; optionvalue:1; option:Herr; optionvalue:2; value:0;minvalue:1###
so schaut er ohne values aus mit dem problem, dass hier das formular nicht weitermacht. es prüft aber erkennt keine eingabe als richtig an:

Code: Alles auswählen

###name:anrede; type:select; valid:integer; size:1; option:?; option:Frau; option:Herr; minlength:2###
:-)
is

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Mo 11. Okt 2004, 14:09

na ja, die prüfung auf integer ist natürlich dann nicht mehr zutreffend. also musst du...

Code: Alles auswählen

valid:integer
durch

Code: Alles auswählen

valid:text
ersetzen. dann sollte es auch funktionieren.

gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

smeusel
Beiträge: 53
Registriert: Do 18. Mär 2004, 11:27
Kontaktdaten:

Beitrag von smeusel » Mo 11. Okt 2004, 15:49

stimmt. daran hat es gelegen...
wer liest ist klar im vorteil....
:oops:

danke,
stephan

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 15. Okt 2004, 09:14

auf anregung von m.hoffmann habe ich das output-script so abgeändert, dass jetzt dynamsich feldvorbelegungen möglich sind. dazu müssen lediglich per post oder get parameter (mit den gleichen bezeichnungen wie im formular) übergeben werden. die entsprechenden felder werden dann mit den übergebenen werten vorbelegt.

hier der output-code (input bleibt unverändert):

Code: Alles auswählen

<?php

/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     w3concepts.form.mod2.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     15-10-2004
* Modified    :     15-10-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($_REQUEST["{$attribute['name']}"])) $value = $_REQUEST["{$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($_REQUEST["{$attribute['name']}"]) && $_REQUEST["{$attribute['name']}"] == $attribute['optionvalue'][$i]) {
							echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n";
						} else {
							if (empty($_REQUEST["{$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($_REQUEST["{$attribute['name']}"]) && $_REQUEST["{$attribute['name']}"] == $attribute['option'][$i]) {
							echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n";
						} else {
							if (empty($_REQUEST["{$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 ($_REQUEST["{$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($_REQUEST["{$attribute['name']}"])) {
					if ($_REQUEST["{$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-z0-9-]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'text' && !eregi("^[ .,;!?()öäüéàèâêîça-z0-9-]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'textmitumbruch' && !eregi("^[ \n\r.,;!?()öäüéàèâêîça-z0-9-]*$",$_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();
}

?>
gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

Jeannette
Beiträge: 3
Registriert: Mo 2. Aug 2004, 14:51
Kontaktdaten:

Mein Formular sendet nicht

Beitrag von Jeannette » So 17. Okt 2004, 17:34

Hallo,

ich habe alles laut Anleitung gemacht. Wenn ich das Formular ausfülle, und etwas falsch oder gar nicht ausgefüllt ist, dann unterlegt er das natürlich in der von mir bestimmten Farbe. Wenn ich dann alles korrigiert habe, dann erscheint natürlich kein feld mehr in der unterlegten Farbe, aber er verschickt auch nichts. Er öffnet einfach wieder das Formular und zwar mit den werten die ich gerade eingetragen hatte.

Hat jemand ne Ahnung woran das liegen könnte?

Mein Formular sieht so aus:

Code: Alles auswählen

<TABLE style="WIDTH: 100%" width="100%" bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD width="37%">Vor-/Nachname:*</TD>
<TD width="63%">###name:vorname; type:text; valid:simpletext; size:15; mandatory:true### / ###name:nachname; type:text; valid:simpletext; size:15; mandatory:true###</TD></TR>
<TR>
<TD>Straße & Nr.*</TD>
<TD>###name:strasse; type:text; valid:text; size:20; mandatory:true###&nbsp;/ ###name:nr; type:text;&nbsp; valid:integer; size:4; mandatory:true###</TD></TR>
<TR>
<TD>PLZ/Ort:*</TD>
<TD>###name:plz ;type:text;valid:integer;size:5;mandatory:true### / ###name:ort;type:text;valid:text;size:15;mandatory:true###</TD></TR>
<TR>
<TD>Land:*</TD>
<TD>###name:land2; type:select; valid:text; size:1; option:bitte auswählen; option:Schweiz; option:Deutschland; option:Oesterreich; value:bitte auswählen###</TD></TR>
<TR>
<TD class="" vAlign=top>Geburtsdatum:* (TT.MM.JJ)</TD>
<TD>###name:gebdatum;type:text;valid:date; mandatory:true### </TD></TR>
<TR>
<TD class="" vAlign=top>Telefon:*</TD>
<TD>###name:telefon;type:text;valid:integer;size:15;mandatory:true###</TD></TR>
<TR>
<TD>Handy-Nr.:</TD>
<TD>###name:handy;type:text;valid:integer;size:17###</TD></TR>
<TR>
<TD>Emailadresse:*</TD>
<TD>###name:email;type:text;valid:email;size:25;mandatory:true###</TD></TR>
<TR>
<TD></TD>
<TD></TD></TR>
<TR>
<TD></TD>
<TD></TD></TR>
<TR>
<TD></TD>
<TD><FONT size=2>Einzugsermächtigung:</FONT></TD></TR>
<TR>
<TD>Bank:*</TD>
<TD>###name:bank; type:text;valid:text; size:20; mandatory:true### </TD></TR>
<TR>
<TD>BLZ:*</TD>
<TD>###name:blz;type:text;valid:integer;size:9;mandatory:true###</TD></TR>
<TR>
<TD>Kontonummer:*</TD>
<TD>###name:konto;type:text;valid:integer;size:8;mandatory:true###</TD></TR>
<TR>
<TD>Bemerkungen:</TD>
<TD>
<P>###name:bemerkungen; type:textarea; valid:text; rows:6; cols:30###</P></TD></TR>
<TR>
<TD></TD>
<TD></TD></TR>
<TR>
<TD height=40>
<P>###name:inhaber; type:checkbox;mandatory:true###</P></TD>
<TD>Der Antragsteller ist auch Kontoinhaber.</TD></TR>
<TR>
<TD>###name:inhaber; type:checkbox;mandatory:true###</TD>
<TD>
<P class=legal>&nbsp;</P>
<P class=legal>Hiermit ermächtige ich WIWOin International, den Betrag von 19.95 EUR (plus 2,50 Euro Bearbeitungs- und Versandkosten) für meine persönliche Shopping Card für das erste Jahr und im Folgejahr zum gleichen Zeitpunkt von meinem o.g. Konto per Lastschrift einzuziehen.</P></TD></TR>
<TR>
<TD>
<P>###name:inhaber; type:checkbox;mandatory:true###</P></TD>
<TD>
<P><SPAN class=legal></SPAN>&nbsp;</P>
<P><SPAN class=legal>Die Allgemeinen Geschäftsbedingungen sowie die Bestimmungen zur Datenerhebung sind mir bekannt<BR>und werden hiermit akzeptiert.</SPAN></P></TD></TR>
<TR>
<TD colSpan=2>
<P align=center><INPUT type=submit value=senden><INPUT type=reset value=löschen></P></TD></TR></TBODY></TABLE>
Danke für Eure Hilfe..

Jeannette

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Mo 18. Okt 2004, 15:21

hallo jeannette

du hast zwei fehler in deinem formular:

(1) zum einen fehlen bei den drei checkboxen unten der value-parameter. dem formular muss bekannt sein, welchen werte das feld annimmt, wenn die checkbox selektiert ist. leider funktioniert die vergabe der hintergrundfarbe über css für diesen feldtyp nicht. da lässt sich leider vorerst auch nichts machen.

(2) zum anderen heissen die drei checkboxen alle gleich. das wäre auch kein problem, wenn nicht alle pflichtfelder wären. in diesem fall muss die bezeichnung für jede checkbox allerdings eindeutig sein.

sobald du diese beiden änderungen vornimmst, wird dein formular auch funktionieren.

gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

MaikS
Beiträge: 10
Registriert: Mo 13. Sep 2004, 10:01
Kontaktdaten:

Beitrag von MaikS » Di 19. Okt 2004, 22:34

Hallo,

gibt es bei diesem Script die Möglichkeit, die Adressaten erst über das Formular auszuwählen? Ich weiß nicht, wie ich da anfangen soll. Der CMS_VALUE[0] muss dafür ja in dem Formular erst angegeben werden. Evenetuell bin ich aber einfach noch zu neu, was PHP angeht. Hat dazu jemand eine Idee?

Beste Grüße
Maik

MaikS
Beiträge: 10
Registriert: Mo 13. Sep 2004, 10:01
Kontaktdaten:

Beitrag von MaikS » Di 19. Okt 2004, 23:26

Damit man sich das besser vorstellen kann:

Input:

Code: Alles auswählen

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


echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\"><tr valign=\"top\">";

echo "<tr><td>Betreff:</td>"; 
echo "<td><input type=\"text\" name=\"CMS_VAR[1]\" value=\"CMS_VALUE[1]\" size=\"30\" /></td></tr>"; 

echo "<tr><td>Hintergrundfarbe bei Fehlern (z.B. red):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[4]\" value=\"CMS_VALUE[4]\" size=\"30\" /></td></tr>";

echo "</table>";
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-z0-9-]*$",$_POST["{$feld['name']}"])) return false; 
      if (!empty($feld['valid']) && $feld['valid'] == 'text' && !eregi("^[ .,;!?()öäüéàèâêîça0-9-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; 
	  if (!empty($feld['valid']) && $feld['valid'] == 'textmitumbruch' && !eregi("^[ \n\r.,;!?()öäüéàèâêîç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($_POST['kontaktperson']); 
   $formular->setEmailSubject("CMS_VALUE[1]"); 
   $formular->setEmailFrom($_POST['kundenemail'],$_POST['kundenname'].", ".$_POST['kundenvorname']);   $formular->setBackgroundError("CMS_VALUE[4]"); 
   $formular->setForm("CMS_HTML[0]"); 
   $formular->setAnswer("CMS_HTML[1]"); 
   $formular->process(); 
} 
?>
Formular:

Code: Alles auswählen

<table style="WIDTH: 100%" width="100%" border="0">
  <tr>
    <td>Vorname / Nachname:</td>
    <td>###name:vorname; type:text; valid:simpletext; size:20; mandatory:true### / ###name:nachname; type:text; valid:simpletext; size:20; mandatory:true###</td>
  </tr>
  <tr>
    <td>Firma:</td>
    <td>###name:firma; type:text; valid:text;size:40###</td>
  </tr>
  <tr>
  <TD>Email-Adresse:</TD> 
  <TD>###name:kundenemail; type:text; valid:email; size:40; mandatory:true###</TD>
  </tr>
  <tr>
    <td class vAlign="top">An:</td>
    <td>###name:kontaktperson[0]; type:checkbox; valid:text; value:'em@il.de'### Person<br>
    ###name:kontaktperson[1]; type:checkbox; valid:text; value:'em@il.de'### Person<br>
    ###name:kontaktperson[2]; type:checkbox; valid:text; value:'em@il.de'### Person<br>
    ###name:kontaktperson[3]; type:checkbox; valid:text; value:'em@il.de'### Person<br>
    ###name:kontaktperson[4]; type:checkbox; valid:text; value:'em@il.de'### Person<br>
    ###name:kontaktperson[5]; type:checkbox; valid:text; value:'em@il.de'; selected:true### Person</td>
  </tr>
  <tr>
    <td>Betreff:</td>
    <td>###name:betreff; type:text; valid:text; rows:6; cols:30###</td>
  </tr>
  <tr>
    <td>Nachricht:</td>
    <td>###name:bemerkungen; type:textarea; valid:textmitumbruch; rows:10; cols:40###</td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td colSpan="2">
    <p align="center"><input type="submit" value="senden"></td>
  </tr>
</table>

Gesperrt