Seite 5 von 24

Verfasst: Mi 20. Okt 2004, 08:01
von kummer
du musst nur im output-code folgende zeile...

Code: Alles auswählen

$formular->addEmailAdress($_POST['kontaktperson']); 
durch folgende ersetzen:

Code: Alles auswählen

$formular->addEmailAdress($_POST['kundenemail']); 
dann sollte es auch schon funktionieren.

gruss,
andreas

Verfasst: Mi 20. Okt 2004, 08:49
von MaikS
Eine E-Mail wird dann auch verschickt, wobei aber der Absender und der Adressat gleich sind. Der Empfänger ist immer die E-Mail-Adresse, die man dann dort eingetragen hat. Soweit eigentlich auch logisch, da dás Feld kundenemail im Formular eingetragen ist.

Damit komme ich echt nicht weiter. Kann man es irgendwie hinbekomme, dass man per Checkbox die Email-Adresse(n) des Empfängers wählt?

Eine andere Sache noch. Zwei neue Felder von mir darf ich nicht ausfüllen (Code siehe vorletzter Beitrag):

- Firma
- Betreff

Sobald ich dort etwas eintrage, wird das Feld beim Senden rot hinterlegt. Die Validitätsprüfung ist auf text gestellt, so dass es daran nicht liegen kann. Kann es sein, dass man die Felder noch irgendwo hinterlegen muss? Nach dem Beispiel mit gleichem Empfänger und Absender werden die Feldername aber übermittelt - nur eintragen darf ich da nichts.

Verfasst: Mi 20. Okt 2004, 09:01
von kummer
zuerst einmal das problem mit den checkboxen.

du musst folgendes machen: anstelle der zeile...

Code: Alles auswählen

$formular->addEmailAdress($_POST['kontaktperson']); 
fügst du folgenden block ein...

Code: Alles auswählen

if (!empty($_POST['kontaktperson'])) foreach ($_POST['kontaktperson'] as $kontaktperson) {
	$formular->addEmailAdress($kontaktperson);
}
kannst du das mal ausprobieren?

gruss,
andreas

Verfasst: Mi 20. Okt 2004, 09:58
von MaikS
Damit sind wir dann schon einen ganzen Schritt weiter - danke schon einmal. Jetzt fehlt nur noch ein Semikolon als Trennzeichen für die Email-Adressen. Kann man dieses auch noch eintragen? Ich frage aus dem Grund, da das Semikolon im PHP-Script als Endzeichen genommen wird.

Hast du eine Idee, warum die beiden neuen Felder jeweils rot hinterlegt werden, wenn das Formular abgeschickt wird?

Code: Alles auswählen

Firma: ###name:firma; type:text; valid:text; size:40### 

...

Betreff: ###name:betreff; type:text; valid:text; size:40### 
Gruß Maik

Verfasst: Mi 20. Okt 2004, 10:05
von kummer
MaikS hat geschrieben:Jetzt fehlt nur noch ein Semikolon als Trennzeichen für die Email-Adressen. Kann man dieses auch noch eintragen? Ich frage aus dem Grund, da das Semikolon im PHP-Script als Endzeichen genommen wird.
das ist innerhalb von hochkomma, respektive anführungszeichen kein problem.
MaikS hat geschrieben:Hast du eine Idee, warum die beiden neuen Felder jeweils rot hinterlegt werden, wenn das Formular abgeschickt wird?

Code: Alles auswählen

Firma: ###name:firma; type:text; valid:text; size:40### 

...

Betreff: ###name:betreff; type:text; valid:text; size:40### 
offengestanden: keine ahnung! :oops:

kann man sich das irgendwo anschauen?

Verfasst: Mi 20. Okt 2004, 10:10
von MaikS
Danke,

ich probiere es gleich mal. Die Daten habe ich dir per PM zugeschickt.

Gruß Maik

Verfasst: Mi 20. Okt 2004, 11:17
von MaikS
Nachdem mit Andreas sehr gut weiterhelfen konnte, möchte ich den neuen Output des Moduls posten:

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'] == '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; 
      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(); 
   if (!empty($_POST['kontaktperson'])) foreach ($_POST['kontaktperson'] as $kontaktperson) { 
   $formular->addEmailAdress($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(); 
} 
?>
Beste Grüße Maik

Versionen

Verfasst: Do 21. Okt 2004, 14:27
von kypta
Habe heute dieses Modul gefunden und diesen Thread gelesen.

Fakt: Auf der HP http://w3concepts.net/1/1/51/130.html ist (per heute 21.10.04) nach wie vor die (erste) Version vom 20.08.04 (Outputmodul) zum downloaden bereitgestellt.
Dies ist nicht das selbe Modul wie das von MaikS gepostete. Leider ist aber im von MaikS geposteten Modul das Modified-Datum nicht angepasst.

Frage: Heisst das, dass das ursprünglich gepostete Modul nach wie vor das aktuelle ist und all die neueren Codeschnippsel jeweils individuelle Änderungen für den Eigenbedarf sind (also keine Bug-Fixes)?

Gruss
Thomas

Verfasst: Do 21. Okt 2004, 14:38
von kummer
in diesem fall handelt es sich um eine anpassung für den spezialfall von MaikS. allerdings gab es einen fehler in der regexprüfung 'text' du kannst das modul nehmen, wie es auf der download-seite angeboten wird (oder die modifizierte version, die sich mit übergabewerte vorbesetzen lässt) und ersetzt einfach die zeile:

Code: Alles auswählen

if (!empty($feld['valid']) && $feld['valid'] == 'text' && !eregi("^[ .,;!?()öäüéàèâêîça0-9-z-]*$",$_POST["{$feld['name']}"])) return false;
durch diese...

Code: Alles auswählen

if (!empty($feld['valid']) && $feld['valid'] == 'text' && !eregi("^[ .,;!?()öäüéàèâêîça-z0-9-]*$",$_POST["{$feld['name']}"])) return false;
die begrenzten ressourcen lassen mich halt mitunter den download-bereich unserer seite etwas vernachlässigen. :oops:

gruss,
andreas

Verfasst: Do 21. Okt 2004, 22:27
von Zisco
Guten Abend,,
bin neu in Contenido eingestiegen und schon eine Frage
zum Modul w3concepts.form.v1 ...
ich habe es nach Anleitung eingerichetet und wollte es denn
auch gleich testen aber irgendwie stosse ich auf Schwierigkeiten..
meine Frage-
wie kommt so eine ausgabe zustande, was habe ich falsch gemacht ?
Das ist die Ausgabe die ich im Webbrowser zu sehen bekomme.

Irgendwas ist schief , aber was ?

ich hoffe Ihr könnt mir weiterhelfen ......
Grüsse
Zisco

Code: Alles auswählen

Vorname / Nachname: 	###name:vorname; type:text; valid:simpletext; size:15; mandatory:true### / ###name:nachname; type:text; valid:simpletext; size:15; mandatory:true###
Land: 	###name:land; type:select; valid:integer; size:1; option:bitte auswählen; optionvalue:0; option:Schweiz; optionvalue:1; option:Deutschland; optionvalue:2; option:Oesterreich; optionvalue:3;value:1;minvalue:1###
Anzahl: 	###name:anzahl;type:text;valid:integer;size:3;value:12; minvalue:5; maxvalue:100###
zweites Land: 	###name:land2; type:select; valid:text; size:1; option:bitte auswählen; option:Schweiz; option:Deutschland; option:Oesterreich; value:Deutschland###
Geschlecht: 	###name:geschlecht;type:radio;valid:text; value:männlich; selected:true### männlich
###name:geschlecht; type:radio; valid:text; value:weiblich### weiblich
###name:geschlecht; type:radio; valid:text; value:geschlechtslos### geschlechtslos
Interessen: 	

###name:interesse[0];type:checkbox; valid:text; value:sport### Sport
###name:interesse[1]; type:checkbox; valid:text; value:unterhaltung### Unterhaltung
###name:interesse[2]; type:checkbox; valid:text; value:geschichte### Geschichte
###name:interesse[3]; type:checkbox; valid:text; value:internet; selected:true### Internet
###name:interesse[4]; type:checkbox; valid:text; value:sonstiges### Sonstiges
Bemerkungen: 	###name:bemerkungen; type:textarea; valid:text; rows:6; cols:30###

Verfasst: Fr 22. Okt 2004, 08:41
von kummer
das schnalle ich jetzt nicht genau. wie ist den die ausgabe? so wie das, was du als code angegeben hast?

in der konfiguration ist diese ansicht normal. darin soll man es ja auch bearbeiten können. das formular siehst du dann erst im frontend. am besten du schaust dir den artikel mal im frontend an.

Verfasst: Fr 22. Okt 2004, 09:03
von Zisco
Hiho Kummer,
dank für die schnelle Antwort,
habe das mal getestet aber auch im Frontend ist das die Ausgabe
diese Ausgabe habe ich im Editor in der vorschau sowie auf der fertig generierten Seite.....genau die Ansicht wie der obige dargestellte Code.
Da hab ich das ganze nochmal neu konfiguriert , aber das Problem bleibt

ich vergass zu erwähnen ....der Sende-Button ist zu sehen, als
einziges Formularelement
Grüsse
Zisco

Verfasst: Fr 22. Okt 2004, 09:10
von kummer
ist vielleicht eine dumme frage, aber trotzdem: du hast nicht nur den input-teil des moduls gefüllt, oder? eine solche ausgabe würde es nämlich geben, wenn du den output-teil nicht ausgefüllt hättest.

Verfasst: Fr 22. Okt 2004, 09:27
von Zisco
kummer hat geschrieben:ist vielleicht eine dumme frage, aber trotzdem: du hast nicht nur den input-teil des moduls gefüllt, oder? eine solche ausgabe würde es nämlich geben, wenn du den output-teil nicht ausgefüllt hättest.
joh das sieht so aus, als ob das Modul den Ausgabeteil nicht abarbeitet
ich habe den Input wie den Outputteil gefüllt, habe den Outputcode
spasseshalber mal gelöscht und die Ausgabe ist wie beschrieben ...
jetzt den Outputcode wieder eingesetzt und die Ausgabe bleibt die gleiche.
irgendwas hab ich wohl falsch gemacht ...
Zisco

Verfasst: Fr 22. Okt 2004, 09:54
von kummer
kannst du mir mal per pm die zugangsdaten senden? ich schau's mir dann rasch an. vielleicht - ich hoffe es - ist es nur eine kleinigkeit...