neues formularmodul :: w3concepts.form.v1

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

Beitrag von kummer » Mi 30. Mär 2005, 11:11

das anführungszeichen am ende hast du auch im quellcode? ich würde das mal weglassen und schauen, ob es dann funktioniert.

und zum verständnis: die klassen werden nicht angelegt, sondern nur referenziert. die klassen müssen im css natürlich bereits bestehen.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

ghost
Beiträge: 3
Registriert: Mi 30. Mär 2005, 13:07
Kontaktdaten:

Warning: Invalid argument supplied for foreach......

Beitrag von ghost » Mi 30. Mär 2005, 13:37

Hallo Kummer,

ich habe mit dem Formular folgendes Problem:

Nach dem Absenden kommt folgende Fehlermeldung:

Warning: Invalid argument supplied for foreach() in /mnt/kw2/01/573/00000017/htdocs/bm/cms/front_content.php(567) : eval()'d code on line 504

Mein Script sieht wie folgt aus:

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>Zieladresse (zieladresse@ihre-Domain.de):</td>"; 
echo "<td><input type=\"text\" name=\"CMS_VAR[0]\" value=\"CMS_VALUE[0]\" size=\"30\" /></td></tr>"; 

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>Antwortadresse (antwortadresse@ihre-domain.de):</td>"; 
echo "<td><input type=\"text\" name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\" size=\"30\" /></td></tr>"; 

echo "<tr><td>Emailname (z.B. Vorname Name):</td>"; 
echo "<td><input type=\"text\" name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\" 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-z-]*$",$_POST["{$feld['name']}"])) return false; 
      if (!empty($feld['valid']) && $feld['valid'] == 'text' && !eregi("^[ .,;!?()öäüéàèâêîça-z-]*$",$_POST["{$feld['name']}"])) return false; 
      if (!empty($feld['valid']) && $feld['valid'] == 'integer' && !eregi("^[0-9]*$",$_POST["{$feld['name']}"])) return false; 
      if (!empty($feld['valid']) && $feld['valid'] == 'float' && !eregi("^[0-9]*[.]{0,1}[0-9]*$",$_POST["{$feld['name']}"])) return false; 
      if (!empty($feld['valid']) && $feld['valid'] == 'date' && !eregi("^[0-9]{1,2}.[0-9]{1,2}.[0-9]{2}$",$_POST["{$feld['name']}"])) return false; 
      if (!empty($feld['valid']) && $feld['valid'] == 'email' && !eregi("^[öäüéàèâêîç_a-z0-9-]+(\.[öäüéàèâêîç_a-z0-9-]+)*@[öäüéàèâêîça-z0-9-]+(\.[öäüéàèâêîça-z0-9-]+)*$",$_POST["{$feld['name']}"])) return false; 

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

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

      return true; 
   } 

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

} 

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

?>

Formular:

Code: Alles auswählen

<TABLE style="FEFEFE: 100%" cellPadding=1 width="100%" border=0>
<TBODY>
<TR>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>Firma:</FONT></TD>
<TD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>###name:Firma; type:text; valid:text; size:50;mandatory:false###</FONT></TD></TR>
<TR>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>Anrede:</FONT></TD>
<TD></TD>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>###name:Anrede; type:select; valid:text; size:1; option:bitte auswählen; option:Herr; option:Frau; value:bitte Auswählen###</FONT></TD></TR>
<TR>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>Name:*</FONT></TD>
<TD></TD>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>###name:Name; type:text; valid:text; size:50; mandatory:true###</FONT></TD></TR>
<TR>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>Straße, Nr.:*</FONT></TD>
<TD></TD>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>###name:Strasse; type:text; valid:text; size:40; mandatory:true### ###name:Nr; type:text; valid:integer; size:5; mandatory:true### </FONT></TD></TR>
<TR>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>PLZ, Ort:*</FONT></TD>
<TD></TD>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>###name:PLZ; type:text; valid:integer; size:5; mandatory:true### ###name:Ort; type:text; valid:text; size:40; mandatory:true###</FONT></TD></TR>
<TR>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>Land:</FONT></TD>
<TD></TD>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>###name:Land; type:text; valid:text; size:50;mandatory:false###</FONT></TD></TR>
<TR>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>Telefon:*</FONT></TD>
<TD></TD>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>###name:Telefon; type:text; valid:string; size:50; mandatory:true###</FONT></TD></TR>
<TR>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>E-Mail:*</FONT></TD>
<TD></TD>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>###name:E-Mail; type:text; valid:email; size:50; mandatory:true###</FONT></TD></TR>
<TR>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>Mitteilung:</FONT></TD>
<TD></TD>
<TD><FONT face="Arial, Helvetica, Verdana, Sans Serif" size=2>###name:Mitteilung; type:textarea; valid:string;&nbsp;rows:4; cols:38###</FONT></TD></TR>
<TR>
<TD colSpan=3>
<P align=left><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<INPUT type=submit value=senden></P></TD></TR></TBODY></TABLE>
Ich erhalte zwar eine Mail mit den in der Konfiguration festgelegten Daten, allerdings werden keine der Formulareinträge angezeigt. Ich habe so gut wie keine PHP-Erfahrung, deshalb bitte ich Dich um Hilfe.

Vorab Danke für Deine Mühe.

ghost
Beiträge: 3
Registriert: Mi 30. Mär 2005, 13:07
Kontaktdaten:

siehe oben

Beitrag von ghost » Mi 30. Mär 2005, 17:19

Hallo,

bei dem oben beschrieben Problem handelt es sich um ein Strato Problem. Strato hat auch bei der Installation von Contenido ein paar Probleme gemacht. Welche ich durch diese Forum aber klären konnte. Da die Seite für einen Kunden ist, der bei Strato hostet, bin ich aber auf eine Lösung angewiesen. Ich habe die gesamte Sache nähmlich auf meinem Server ausprobiert und siehe da, es läuft sofort ohne Probleme.

Jetzt habe ich aber ein Problem. Auch nach intensievster suche habe ich keine Lösungsansatz.

Weiß einer von Euch Rat?? Für schnelle Hilfe wäre ich sehr dankbar.

Ich könnte mir gut vorstellen, das die Lösung, die bei den Installationsschwierigkeiten geholfen hat auch hier vielleicht weiter hilft.

Hier der Link:
http://www.contenido.org/forum/viewtopi ... +parameter

Für Eure hilfe schonmal danke.

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

Beitrag von kummer » Mi 30. Mär 2005, 19:15

das formularmodul greift nicht auf die db zu. insofern dürfte das problem woanders zu suchen sein...
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

ghost
Beiträge: 3
Registriert: Mi 30. Mär 2005, 13:07
Kontaktdaten:

Beitrag von ghost » Do 31. Mär 2005, 08:19

Das ist korrekt, das das Formularmodul nicht auf die Datenbank zugreift. Allerdings muss es sich um etwas Strato spezifisches handeln, da es auf anderen Servern sofort korrekt läuft.

Hat jemand eine Idee?

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

Beitrag von kummer » Do 31. Mär 2005, 08:49

welche php-version läuft auf dem server? seit php5 gibt es einige massgebliche änderungen, die man vielleicht berücksichtigen müsste.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

llaron
Beiträge: 133
Registriert: Mi 14. Jul 2004, 12:54
Kontaktdaten:

Beitrag von llaron » Fr 1. Apr 2005, 11:53

@ Kummer
das anführungszeichen am ende hast du auch im quellcode? ich würde das mal weglassen und schauen, ob es dann funktioniert.

und zum verständnis: die klassen werden nicht angelegt, sondern nur referenziert. die klassen müssen im css natürlich bereits bestehen.
so sieht die Zeile aktuell aus:
###name:Firmenname; type:text; class:textfeld; valid:text; size:35###

ausgegeben wird es jedoch so:
<input type="text" name="Firmenname" size="35" value="" />

keine ahnung warum die class fehlt! styles sind natürlich schon angelegt :-)

gruß,
nico

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

Beitrag von kummer » Fr 1. Apr 2005, 11:54

mein fehler. ich bin mir nicht sicher, ob klassen schon integriert sind. das muss ich selber noch nachschauen.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

llaron
Beiträge: 133
Registriert: Mi 14. Jul 2004, 12:54
Kontaktdaten:

Beitrag von llaron » Fr 1. Apr 2005, 11:59

ok.

wäre natürlich super wenn das gehen würde! ;-)

schönes wochenende,
Nico

david78
Beiträge: 28
Registriert: Mi 22. Dez 2004, 15:10
Wohnort: Wiesbaden
Kontaktdaten:

email from: Name, Vorname <name@email.de>

Beitrag von david78 » Do 14. Apr 2005, 14:36

Hallo liebe Community,

ich wollte nochmal das Thema von OAA und grossy aufgreifen, dass in der zu versendenen E-Mail als Absender Name, Vorname erscheinen und man direkt auf "Antworten" klicken kann.

Wenn ich nun die von Andreas beschriebenen Änderungen durchführe:

Code: Alles auswählen

$formular->setEmailFrom("CMS_VALUE[2]","CMS_VALUE[3]");
durch folgende zur ersetzen

Code: Alles auswählen

$formular->setEmailFrom($_POST['kundenemail'],$_POST['kundenname'].", ".$_POST['kundenvorname']);
dann steht in der empfangenen E-Mail als Absender "kundenname@server.de". Wenn ich nun beim 2. Argument von setEmailFrom nur "$_POST['kundenname']" angebe, dann wird der 'kundenname' angezeigt, und die E-Mail-Adresse wird auch mit übergeben, man kann also darauf direkt antworten.

Das ist ja schon super, jetzt würde ich allerdings den Vornamen auch noch gerne anzeigen lassen.

Weiss jemand, woran das liegen kann?

Gruss
David

kypta
Beiträge: 295
Registriert: Di 8. Jul 2003, 13:25
Kontaktdaten:

Beitrag von kypta » Do 14. Apr 2005, 16:25

Bei mir funktioniert das so:

Code: Alles auswählen

$formular->setEmailFrom($_POST['kundenemail'],$_POST['kundenvorname']." ".$_POST['kundenname']);
Gruss Thomas

rzwei
Beiträge: 65
Registriert: Mo 28. Feb 2005, 17:02
Wohnort: Isartal
Kontaktdaten:

w3concepts.form.v1form.v1 kann jetzt mit Attachments umgehe

Beitrag von rzwei » Do 14. Apr 2005, 16:37

Hallo,

nachdem ich dringend die Möglichkeit brauchte, mit form.v1 Anhänge verschicken zu lassen, möchte ich Euch das Ergebnis nicht vorenthalten.
Darüber hinaus habe ich noch die Referenzen in den Funktionsaufrufen gelöscht, da mein Provider damit seine Probleme hatte (scheint aber trotzdem zu funktionieren).

INPUT (unverändert)

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 class=\"text_medium\">Zieladresse (alias@mydomain.com):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[0]\" value=\"CMS_VALUE[0]\" size=\"30\" class=\"text_medium\" /></td></tr>";
echo "<tr class=\"text_medium\"><td>Betreff:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[1]\" value=\"CMS_VALUE[1]\" size=\"30\" /></td></tr>";
echo "<tr class=\"text_medium\"><td>Antwortadresse (alias@mydomain.com):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\" size=\"30\" /></td></tr>";
echo "<tr class=\"text_medium\"><td>Emailname (z.B. Vorname Name):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\" size=\"30\" /></td></tr>";
echo "<tr class=\"text_medium\"><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
* Modified    :     14-04-2005 by Mathias Rauh
*					- Support for attachments added
************************************************/

class w3form {

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

	function w3form() {
	}

	function setAktion($aktion) { // Action-Adresse in Klasse übernehmen
		$this->form['aktion'] = $aktion;
	}	
	
	// PRIVATE
	function sendEmail() {
		$uid = md5(uniqid(rand()));
		$this->aufdroeseln($this->suppress('sent','Submit'));
		$this->generateEmailMessage();
		$header .= "MIME-Version: 1.0\n"; 
		$header .= "X-Mailer: PHP\n";
		$header .= "From: {$this->email['from']['name']} <{$this->email['from']['email']}>\n"; 
		$header .= "Reply-To: {$this->email['from']['email']}\n";
		$header .= "Return-Path: {$this->email['from']['email']}\n";
		if ($_FILES['userfile']['name']) {
			$datei = fread(fopen($_FILES['userfile']['tmp_name'],"r"),filesize($_FILES['userfile']['tmp_name']));
			$datei = chunk_split(base64_encode($datei));
			
			$header .= "Content-Type: multipart/mixed; boundary=$uid\n";
			$header .= "--$uid\n";
			$header .= "Content-Type: text/plain\n";
			$header .= "Content-Transfer-Encoding: 7bit\n";
			$header .= $this->email['message'];
			$header .= "\n\n--$uid\n";

			$header .= "Content-Type: {$_FILES['userfile']['type']}; name=\"{$_FILES['userfile']['name']}\"\n";
			$header .= "Content-Disposition: attachment\n";
			$header .= "Content-Transfer-Encoding: base64\n\n";
			$header .= "$datei\n";
			$header .= "--$uid\n";
			mail($this->email['adresses'],$this->email['subject'],'',$header);
		}
		else {
			$header .= "Content-type: text/plain; charset=iso-8859-1\n"; 
			mail($this->email['adresses'],$this->email['subject'],$this->email['message'],$header);
		}
	}

	// 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) > 15 OR strlen($value) > 34) {
			$this->email['message'] .= "$key\n$value\n";
		} else {
		$this->email['message'] .= $key;
		$this->email['message'] .= str_repeat(' ',15-strlen($key));
		$this->email['message'] .= "$value\n";
		}
	}

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

	// 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="'.$this->form['aktion'].'" method="POST" enctype="multipart/form-data">'."\n";
		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 'file':
				if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\"";
				echo "<input type=\"file\" $parameter class=\"standard\" $style />";
				break;
			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']}"];
				echo "<input type=\"text\" $parameter value=\"$value\" class=\"standard\" $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\" class=\"standard\" $style>$value</textarea>";
				break;
			case 'select':
				echo "<select $parameter class=\"standard\" $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\" class=\"formcheckbox\" />attrval=";
						echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" class=\"formcheckbox\" />attrval=";
					} else {
						echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" class=\"formcheckbox\" />";
					}
				} else {
					if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
						echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\" class=\"formcheckbox\" />attrsel=";
					} else {
						echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" class=\"formcheckbox\" />";
					}
				}
				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;
		}
		if ($sent && !$this->formularFeldKorrekt($attribute)) echo "<span style=\"color:{$this->form['colorError']};\">   Bitte ausfüllen.</span>";
	}

	// 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-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]";
} else {
	$aktion = $auth->url(); // Action-Adresse ist URL	
	$formular = new w3form();
	$formular->setAktion("$aktion"); // Action-Adresse an Klasse übergeben
	$formular->addEmailAdress("CMS_VALUE[0]");
	$formular->setEmailSubject("CMS_VALUE[1]");
	//$formular->setEmailFrom("CMS_VALUE[2]","CMS_VALUE[3]");
	$formular->setEmailFrom($_POST['E-Mail'],"\"".$_POST['Name'].", ".$_POST['Vorname']."\"");
	$formular->setBackgroundError("CMS_VALUE[4]");
	$formular->setForm("CMS_HTML[0]");
	$antwort = "<p>Vielen Dank für Ihr Interesse an der GFU, ".$_POST['Anrede']." ".$_POST['Name'].".<br />\nWir haben Ihre Nachricht erhalten und werden sie umgehend bearbeiten.</p>";
	$formular->setAnswer("$antwort");
	$formular->process();
}

?>
Etwas eleganter könnte man das vielleicht mit der phpmailer-Klasse lösen, aber ich hatte keine Muße, mich da reinzulesen.

Viel Spaß
Mathias
Zuletzt geändert von rzwei am Do 2. Nov 2006, 00:57, insgesamt 1-mal geändert.

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mo 18. Apr 2005, 15:38

ähm mal so nebenbei
was bedeutet denn bitte das wort -> aufdroeseln ??
*** make your own tools (wishlist :: thx)

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Mo 18. Apr 2005, 16:27

emergence hat geschrieben:ähm mal so nebenbei
was bedeutet denn bitte das wort -> aufdroeseln ??
:)
auf|drö|seln <sw. V.; hat> (ugs.): (Zusammengedrehtes o. Ä.) auf etw. mühevolle u. Zeit beanspruchende Weise wieder entwirren: eine Kordel, verhedderte Wolle a.; Ü ein Problem a. (analysieren).

(c) Dudenverlag

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

Beitrag von kummer » Mo 18. Apr 2005, 16:49

und ich dachte, das sei allgemeingut... :wink: so kann man sich täuschen!
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

Gesperrt