neues formularmodul :: w3concepts.form.v1

#ayshe
Beiträge: 445
Registriert: Do 25. Mär 2004, 10:04
Kontaktdaten:

Gelöst: Problem mit Entities

Beitrag von #ayshe » Mi 13. Sep 2006, 11:26

So, ich kann mir jetzt selber antworten. (Benutze nun übrigens Enigmas Mod.)
Die Ursache dafür, dass Entities nicht dargestellt wurden, lag am Attributtrenner. Den findet ihr im Modul in der Funktion FormularInterpretation(&$formular). Dort heißt es

Code: Alles auswählen

$attributes = split(';', $tempField);
Dadurch wird jedes Semikolon als Attributtrenner interpretiert und somit auch das abschließende Semikolon von Entities.
Das habe ich also einfach geändert in

Code: Alles auswählen

$attributes = split(',', $tempField);
und das Formular entsprechend angepasst, schon klappt es mit
Wasser & Brot
Noch eine Ergänzung:
In der Funktion function sendEmail() fehlt der Typ 'reset', dadurch lassen sich die Felder in Formularen nicht löschen. Einfach ergänzen und schon geht's.

Gruß,
Ayshe

willy3
Beiträge: 125
Registriert: Fr 5. Mär 2004, 00:14
Wohnort: ehem. Kanzler-Stadt
Kontaktdaten:

Beitrag von willy3 » Do 2. Nov 2006, 21:48

Hallo,
Nachdem ich nun das Modul entsprechend eingebaut habe und im Backend auch sehen kann ;-) *freu* kann ich allerdings im Frontend nichts erkennen... (weisse seite)
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 "<TABLE class=text border=0>
<TBODY>
<TR>
<TD>&nbsp;</TD>
<TD><STRONG>Absender:</STRONG></TD>
<TD>&nbsp;</TD></TR>
<TR>
<TD>&nbsp;</TD>
<TD>
<P>Anrede:</P></TD>
<TD>
<P>###name:anrede; type:select; valid:integer; size:1; option:bitte auswaehlen; optionvalue:0; option:Frau; optionvalue:1; option:Herr; optionvalue:2;option:Firma; optionvalue:3; value:0;minvalue:1###</P></TD></TR>
<TR>
<TD>&nbsp;</TD>
<TD>Vorname:</TD>
<TD>
<P>###name:vorname; type:text; valid:simpletext; size:30; mandatory:true###</P></TD></TR>
<TR>
<TD>&nbsp;</TD>
<TD>Nachname:</TD>
<TD>###name:nachname; type:text; valid:simpletext; size:30; mandatory:true###</TD></TR>
<TR>
<TD>&nbsp;</TD>
<TD>E-Mailadressse:</TD>
<TD>###name:e-mailadresse; type:text; valid:e-mail; size:30; mandatory:true### </TD></TR>
<TR>
<TD>&nbsp;</TD>
<TD>Land:</TD>
<TD>###name:land; type:select; valid:integer; size:1; option:bitte auswaehlen; optionvalue:0; option:Deutschland; optionvalue:1; option:Oesterreich; optionvalue:2;option:Schweiz; optionvalue:3;option:andere; optionvalue:4; value:1;minvalue:1###</TD></TR>
<TR>
<TD>&nbsp;</TD>
<TD vAlign=top>Ansprechpartner:</TD>
<TD>
<P>###name:Ansprechpartner; type:select; valid:text; size:1; option:bitte auswaehlen; option:Sekretariat; option:online-support; option:Buchhaltung; value:Sekretariat###</P></TD></TR>
<TR>
<TD>&nbsp;</TD>
<TD>Interessen:</TD>
<TD>
<P>###name:interesse[0]; type:checkbox; valid:text; value:Steuern; selected:true### Steuern<BR>###name:interesse[1]; type:checkbox; valid:text; value:Wirtschaft### Wirtschaft<BR>###name:interesse[2]; type:checkbox; valid:text; value:Treuhand### Treuhand<BR>###name:interesse[3]; type:checkbox; valid:text; value:Service; ### Service<BR>###name:interesse[4]; type:checkbox; valid:text; value:sonstiges### Sonstiges</P></TD></TR>
<TR>
<TD>&nbsp;</TD>
<TD>Ihre Nachricht:</TD>
<TD>&nbsp;###name:bemerkungen; type:textarea;size:30; valid:text; rows:6; cols:30###</TD></TR>
<TR>
<TD colSpan=3>
<P align=center><INPUT type=submit value=senden></P></TD></TR></TBODY></TABLE>";	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();
}

?>
Folgendes sehe ich Editor-/Backend-Bereich:
Absender:
Anrede:
###name:anrede; type:select; valid:integer; size:1; option:bitte auswaehlen; optionvalue:0; option:Frau; optionvalue:1; option:Herr; optionvalue:2;option:Firma; optionvalue:3; value:0;minvalue:1###

Vorname: ###name:vorname; type:text; valid:simpletext; size:30; mandatory:true###

Nachname: ###name:nachname; type:text; valid:simpletext; size:30; mandatory:true###
E-Mailadressse: ###name:e-mailadresse; type:text; valid:e-mail; size:30; mandatory:true###
Land: ###name:land; type:select; valid:integer; size:1; option:bitte auswaehlen; optionvalue:0; option:Deutschland; optionvalue:1; option:Oesterreich; optionvalue:2;option:Schweiz; optionvalue:3;option:andere; optionvalue:4; value:1;minvalue:1###
Ansprechpartner: ###name:Ansprechpartner; type:select; valid:text; size:1; option:bitte auswaehlen; option:Sekretariat; option:online-support; option:Buchhaltung; value:Sekretariat###

Interessen: ###name:interesse[0]; type:checkbox; valid:text; value:Steuern; selected:true### Steuern
###name:interesse[1]; type:checkbox; valid:text; value:Wirtschaft### Wirtschaft
###name:interesse[2]; type:checkbox; valid:text; value:Treuhand### Treuhand
###name:interesse[3]; type:checkbox; valid:text; value:Service; ### Service
###name:interesse[4]; type:checkbox; valid:text; value:sonstiges### Sonstiges

Ihre Nachricht: ###name:bemerkungen; type:textarea;size:30; valid:text; rows:6; cols:30###
Errorlog ist leer, diverse Browser probiert... nüscht.
Woran mag das man liegen
Danke schon jetzt.
Viele Grüße und Danke
willy3

---
Sys-Config:
Contenido-Version 4.6.15
Browser: Firefox2.0.0.3 // MSIE 6.0.2
Windows XP pro SP2 MSIE6.0.2900
Serverbetriebssystem Apache/1.3.27 (Linux/SuSE)
MySQL Serverversion 4.0.23-Max-log
Installierte PHP-Version 4.4.1

wosch

Beitrag von wosch » Sa 4. Nov 2006, 17:21

willy3,

hm, kann es sein das du das hier falsch verstanden hast:

Code: Alles auswählen

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>"; 
Im Modul selber wird nicht eingegeben, dieser Text erscheint beim Editieren des Artikel, und alles was du im Modul stehen hast wird im Editior als Artikelinhalt eingegeben.

Exportiere das Modul nochmals als xml-Datei, ruf den Artikel (mit dem Modul auf) und gibt das was jetzt im Modul steht im Artikel ein.
Viel Erfolg, ist ein Klasse Modul wenn man die dahinterstehende Logik erfaßt hat. :wink:

willy3
Beiträge: 125
Registriert: Fr 5. Mär 2004, 00:14
Wohnort: ehem. Kanzler-Stadt
Kontaktdaten:

Beitrag von willy3 » Sa 4. Nov 2006, 17:35

Oh mein Gott, das ist ja geil ! juppieeee!

Das muss man mir ja dann auch noch sagen oder vielmehr schriftlich mitgeben ;-)
Also: zum Beispiel: 1.Container: Modul
2.Container dann einen Text-Copntainer (in diesen dann einfach die Tabellen einfügen) und schwupp... ;-)
Viele Grüße und Danke
willy3

---
Sys-Config:
Contenido-Version 4.6.15
Browser: Firefox2.0.0.3 // MSIE 6.0.2
Windows XP pro SP2 MSIE6.0.2900
Serverbetriebssystem Apache/1.3.27 (Linux/SuSE)
MySQL Serverversion 4.0.23-Max-log
Installierte PHP-Version 4.4.1

wosch

Beitrag von wosch » Sa 4. Nov 2006, 18:04

willy3 hat geschrieben: Also: zum Beispiel: 1.Container: Modul
2.Container dann einen Text-Copntainer (in diesen dann einfach die Tabellen einfügen) und schwupp... ;-)
Nur ein Container mit dem Modul und nur dort im Editor gibst du die Formular-Daten (wie in der Tabelle) ein. :wink:

Hagbard
Beiträge: 66
Registriert: Sa 18. Okt 2003, 23:52
Kontaktdaten:

Beitrag von Hagbard » Fr 17. Nov 2006, 09:53

Ich habe den gesamten Post durch, komme aber nicht zu einer lauffähigen Version.

Ich würde gerne das ursprüngliche Formular mit zwei Ergänzungen nutzen. Und zwar:

- Soll das ausgefüllte Formular (bzw. die Ausgabe) an die Emailadresse des Besuchers (Formfeld "email") gesendet werden UND an die im Template definierte Adresse (z.B. meine).
- Zusätzlich sollten die Daten in eine CSV-Datei gespeichert werden.

Also bekommt der Besucher eine Bestätigung seines ausgefüllten Formulars, ich die gleiche Email CC und zuletzt werden die Daten in eine CSV-Datei geschrieben.
Kann mir da bitte jemand helfen? Bei meinem jetztigen Script bekomme ich ÜBERHAUPT KEINE MAIL! Die Daten werden in die CSV geschrieben und das wars :/

Hier mein momentaner 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();
      
// ZWEI MAILS WERDEN VERSCHICKT. AN DEN BESUCHER UND AN MICH

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());
      mail($this->email['from']['email'],$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("^[ .,;!?()öäüéàèâêîç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);
      }
   }

}

// AUSGABE IN DATEI UND VERSAND PER MAIL (siehe ganz oben).

class delimitedFile extends w3form {

   function success() {
      $daten = fopen ("datei.csv", "a");
      fwrite($daten,"{$_POST['vorname']},{$_POST['nachname']}\n");
      fclose ($daten);
      echo $this->form['answer'];
   }

}

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 delimitedFile();
   $formular->setBackgroundError("CMS_VALUE[4]");
   $formular->setForm("CMS_HTML[0]");
   $formular->setAnswer("CMS_HTML[1]");
   $formular->process();
}

?>

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

Beitrag von kummer » Fr 17. Nov 2006, 11:25

hallo hagbard

ich kann dir die anpassung vornehmen. allerdings nicht kostenlos. falls du interesse hast, meldest du dich am besten bei mir per email (kummer@w3concepts.ch).

hinsichtlich des versandes von emails an adressen, die du per formular erhälst, kann ich dir allerdings nur dringend abraten. damit öffnest du spammern tür und tor und es wird nicht lange dauern, bis sie das verwenden werden.

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

#ayshe
Beiträge: 445
Registriert: Do 25. Mär 2004, 10:04
Kontaktdaten:

Beitrag von #ayshe » Mo 5. Feb 2007, 12:56

Hallo,

ist es richtig, dass ich mehrere Empfänger einfach dadurch definiere, dass ich die Email-Adressen, durch Kommata getrennt, in der Vorkonfiguration eintrage?

Gruß,
Ayshe

EDIT:
Es funktioniert wie beschrieben. Allerdings kann man keine Empfänger-Adresse als CC oder BCC definieren. Das wäre noch ein Feature, das ich sinnvoll finde.

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Beitrag von derSteffen » Do 22. Feb 2007, 15:50

Hallo,

ich habe ein Problem mit der Überprüfung der "phone" Eigenschaft in diesem Modul!

Wen ich 012345 / 10234 eingebe sagt mir das Modul "Bitte geben Sie eine gültig Telefonnummer an! Wenn ich allerding 01234 / 123456 eingebe, funktioniert die Sache!

Kann mir jemand bei meinem Probelm helfen?

Anbei die Passage vom Output!

Code: Alles auswählen

 if (!empty($feld['valid']) && $feld['valid'] == 'phone' && !eregi("^([+][ ]?[1-9][0-9][ ]?[-]?[ ]?[/]?[ ]?|[(]?[0][ ]?)[0-9]{2,4}[ ]?[-)/]?[ ]?[1-9][-0-9 ]{3,16}$", $_POST["{$feld['name']}"])) {
        $this->form['actualErrorMessage'] = mi18n("Please you enter a valid telephone number!");
        return false;
      }
Vielen Dank

jcf
Beiträge: 44
Registriert: Fr 22. Dez 2006, 17:30
Kontaktdaten:

SMTP

Beitrag von jcf » Sa 24. Feb 2007, 15:48

Hallo Zusammen,

ich versuche gerade das Formular so abzuwandeln, dass ich es über den SMTP verschicken kann. Habe hierzu noch keinen Beitrag gefunden. DER SMTP ist über localhost und ohne Authentifizierung erreichbar (mit dem normalen Kontaktformular funktioniert es. :-()

Hier mein Code:

Code: Alles auswählen

	function sendEmail() {
		$this->aufdroeseln($this->suppress('sent'));
		$this->generateEmailMessage();
		$mail->IsSMTP();
		$host = "localhost";
		//$user = "";
		//$password = "";
		$mail->$SMTPAuth = false;
		$mail->Host = $host;
		//$mail->Username = $user;
		//$mail->Password = $password;
		$mail->From = $this->email['from']['email'];
		$mail->FromName = $this->email['from']['name'];
		$mail->AddAddress($this->email['adresses']);
		$mail->Subject = $this->email['subject'];
		$mail->Body = $this->email['message'];
		$mail->WordWrap = 1000;
		$mail->Send();

	}
Allerdings bekomme ich folgende Fehlermeldung:
Fatal error: Call to a member function on a non-object in c:\contenido\htdocs\cms\front_content.php(1021) : eval()'d code on line 469
Hat jemand eine Idee, was ich falsch gemacht haben könnte?

Danke für eure Hilfe!

jcf

jcf
Beiträge: 44
Registriert: Fr 22. Dez 2006, 17:30
Kontaktdaten:

Beitrag von jcf » Sa 24. Feb 2007, 16:07

Alles klar,
so ist es richtig:
cInclude("classes", "class.phpmailer.php");
function sendEmail() {
$this->aufdroeseln($this->suppress('sent'));
$this->generateEmailMessage();
$mail = new phpmailer;
$mail->IsSMTP();
$mail->Host = "localhost";
//$user = "";
//$password = "";
//$mail->$SMTPAuth = false;
//$mail->Username = $user;
//$mail->Password = $password;
$mail->From = $this->email['from']['email'];
$mail->FromName = $this->email['from']['name'];
$mail->AddAddress($this->email['adresses']);
$mail->Subject = $this->email['subject'];
$mail->Body = $this->email['message'];
$mail->WordWrap = 1000;
$mail->Send();

}
Gruß

jcf

Louis
Beiträge: 206
Registriert: Mo 27. Okt 2003, 12:28
Kontaktdaten:

Beitrag von Louis » So 25. Feb 2007, 18:10

Zur Frage nach den verschiedenen Mailempfängern hier mal meine Lösung.

Persönlich finde ich es immer schön, wenn ich von ausgefüllten Web-Formularen auch eine Kopie per Mail bekomme; die Kollegen im Büro freuen sich immer, wenn sie diese automatischen Mails einfach per Klick auf "Antworten" beantworten können (ohne sich damit selbst eine Mail zu schicken).

Einfach im Output die Funktion sendEmail() ein klein wenig anpassen:

Code: Alles auswählen

   function sendEmail() {
      // hier die Namen der Formularfelder eintragen, die nicht mit in die eMail
      // aufgenommen werden sollen (z. B. Submit-Button, versteckte Formularfelder, die
      // nur internen Zwecken dienen etc.)
      $this->aufdroeseln($this->suppress('sent', 'send', 'submit', 'submit_form', 'form_submit', 'submit_button', 'button_submit'));
      $this->generateEmailMessage();
                 
      $header .= "From: {$this->email['from']['name']} <{$this->email['from']['email']}>\r\n";
      $header .= "Return-Path: {$this->email['from']['email']}\r\n";
      if ($_POST['eMail']) {
	      $header .= "CC: " . $_POST['eMail'] . "\r\n";
	      $header .= "Reply-To: " . $_POST['Vorname'] . " " . $_POST['Nachname'] . " <" . $_POST['eMail'] . ">\r\n";
      }
      $header .= "X-Mailer: PHP".phpversion();
      
      // to prevent spamming, let's trace the sender
      $now = date("d. M Y \u\m H:i:s T"); // Datum formatiert als: 03. Feb 2004 um 15:51:38 EST
      $ip = getenv('REMOTE_ADDR');
      $kommentar = "\n\n(Der Absender dieser Mail benutzte die IP-Adresse ".$ip." am ".$now.")";
      
      mail($this->email['adresses'],$this->email['subject'], this->form['mailText1'].$this->email['message'].$this->form['mailText2'].$kommentar, $header);
   }
Natürlich müssen im Formular selbst auch die folgenden Felder definiert sein

Code: Alles auswählen

###name:Nachname; type:text; valid:text; size:30; maxlength:50; mandatory:true###*
###name:Vorname; type:text; valid:text; size:30; maxlength:50; mandatory:true###*
###name:eMail; type:text; valid:email; size:30; maxlength:50###
Zuletzt geändert von Louis am Fr 2. Mär 2007, 13:37, insgesamt 1-mal geändert.
Wir können den Wind nicht ändern, aber die Segel anders setzen
(Aristoteles)

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Beitrag von derSteffen » Mo 26. Feb 2007, 09:25

Hallo, also noch mal zu meinem Problem!

Ich habe es wie folgt gelöst, dass ich die "4" von "{2,4}" in eine 5, also in "{2,5}" geändert habe!

Also so.....

Code: Alles auswählen

 if (!empty($feld['valid']) && $feld['valid'] == 'phone' && !eregi("^([+][ ]?[1-9][0-9][ ]?[-]?[ ]?[/]?[ ]?|[(]?[0][ ]?)[0-9]{2,5}[ ]?[-)/]?[ ]?[1-9][-0-9 ]{3,16}$", $_POST["{$feld['name']}"])) {
        $this->form['actualErrorMessage'] = mi18n("Please you enter a valid telephone number!");
        return false;
      }

erikawiese
Beiträge: 118
Registriert: Fr 23. Feb 2007, 22:06
Kontaktdaten:

Beitrag von erikawiese » Mo 5. Mär 2007, 18:45

Bin ich der Erste, der das Formular mit 4.6.15 betreiben will? Oder läuft es einfach so gut, dass es hier keine Einträge gibt ;-)
Ich habe das Problem, dass meine Hauptnavigation falsch dargestellt wird. Es wird nun auch die Kategoriewurzel mit angezeigt. Also so:

Code: Alles auswählen

Hauptnavigation
Punkt1
Punkt2
Punkt3
Richtig wäre:

Code: Alles auswählen

Punkt1
Punkt2
Punkt3

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Mo 5. Mär 2007, 19:37

erikawiese hat geschrieben:Ich habe das Problem, dass meine Hauptnavigation falsch dargestellt wird.
Und das soll etwas mit dem Modul zu tun haben?!? Evtl. ist in der entsprechenden Kategorie einfach die Konfiguration nicht richtig durchgeführt worden.

Gesperrt