Seite 3 von 24

Verfasst: Sa 18. Sep 2004, 14:46
von kummer
haben andere das problem auch? weil bei mir funktioniert's eigentlich.

Verfasst: So 19. Sep 2004, 14:56
von 2Code
Hi andreas,

Vielen Dank!
Sehr schöner, sauber code , respekt :)

Mehrsprachig?

Verfasst: Mi 22. Sep 2004, 13:32
von Johannes W.
Hallo, ich erstelle gerade eine viersprachige Seite und suche nach einem code, der es erlaubt, unterschideliche Bezeichnungen für die Eingabefelder in den jeweiligen Sprachen zu vergeben. Also z.B.

Straße: (Hier steht Eingabefeld)
Street: (Hier steht Eingabefeld)

weiß jemand von euch, ob das geht?

Gruß Johannes

Verfasst: Mi 22. Sep 2004, 13:46
von kummer
das geht schon, jedoch nicht ohne erhebliche anpassungen. insbesondere bei pulldowns sind dann ja auch die optionen mehrsprachig einzugeben.

ich kann dir das modul anpassen. allerdings würde das schon was kosten. (ich muss ja davon leben)

Mehrsprachiges Kontaktformular

Verfasst: Do 23. Sep 2004, 09:04
von Johannes W.
Danke für das Angebot, jedoch konnte ich mittlerweile selbst eine Lösung finden. Für alle die das selbe Problem haben und gerne mehrere Sprachversionen wünschen gilt folgender Tip:

1. Modul kopieren für die verschidenen Versionen
2. Template für die verschiedenen versionen erstellen.
3. Artikel das neue Template zuweisen
4. Template konfigurieren

Fertig!

MFG Johannes

Verfasst: Sa 9. Okt 2004, 00:08
von smeusel
hi :-)

wie bekomme ich es denn in diesem formular hin, dass bei der e-mail ausgabe, auch wenn ich "values" verwende, dennoch die dazugehörige "option" im mail ausgegeben wird und nicht die "value"?

beispiel:
ich habe ein pulldownmenü mit den werten "frau" und "mann". die haben die values 1 = frau und 2 = mann. in meinem mail, das ich nun bekomme steht statt "frau" nur "1".
der tipp einfach die values wegzulassen und mit maxlength zu arbeiten (z.B. wegen der pflichtfelder) klappt hier aber nicht, da beide worte gleich viele buchstaben haben.

ich komme nicht weiter. kann mir jemand helfen?


danke,
smeusel

Verfasst: Sa 9. Okt 2004, 08:30
von OAA
Ich habe das Demo von Kummer installiert.

Jetz habe ich ein Problem:

ich würde gerne es gerne so haben:

Derjenige der das Formular auf der Homepage ausfüllt, soll seinen Namen und seine Email-Adresse ins Formular eingeben können.

Wenn ich die Nachricht zugestellt bekomme, möchte ich gerne über den Antwort Button des Mail-Programms direkt an den Absender schreiben können.

Habe schon rumprobiert, aber krieg es nicht gebacken.

Verfasst: Sa 9. Okt 2004, 11:48
von kummer
hallo oaa

das sollte keine grosse sache sein. wenn du als feldname für die email-adresse z.b. kundenemail verwendest, für den namen kundenname sowie für den vornamen kundenvorname, dann brauchst du nur im output-script (ziemlich unten im script) folgende zeile:

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']);
hope it works!

gruss,
andreas

Verfasst: Sa 9. Okt 2004, 12:18
von smeusel
Hilfee!!

hat für mein problem keiner eine lösung? (siehe über OAA) :cry:

stephan

Verfasst: Sa 9. Okt 2004, 14:18
von OAA
Hallo,

Output sieht jetzt so aus:

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($_POST['kundenemail'],$_POST['kundenname'].", ".$_POST['kundenvorname']);   $formular->setBackgroundError("CMS_VALUE[4]"); 
   $formular->setForm("CMS_HTML[0]"); 
   $formular->setAnswer("CMS_HTML[1]"); 
   $formular->process(); 
} 
?>
Das Formular habe ich auch an die Variablen angepasst:

Code: Alles auswählen

<TABLE style="WIDTH: 100%" width="100%" border=0>
<TBODY>
<TR>
<TD>Vorname / Nachname:</TD>
<TD>###name:kundenvorname; type:text; valid:simpletext; size:15; mandatory:true### / ###name:kundenname; type:text; valid:simpletext; size:15; mandatory:true###</TD></TR>
<TR>
<TD>Land:</TD>
<TD>###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###</TD></TR>
<TR>
<TD>Email-Adresse:</TD>
<TD>###name:kundenemail; type:text; valid:simpletext; size:15; mandatory:true###</TD></TR>
<TR>
<TD>Fach:</TD>
<TD>###name:land; type:select; valid:integer; size:1; option:bitte auswählen; optionvalue:0; option:Informatik I; optionvalue:1; option:Wirtschaftsinformatik I; optionvalue:2; value:0;minvalue:1###</TD></TR>
<TR>
<TD class="" vAlign=top>Geschlecht:</TD>
<TD>###name:geschlecht;type:radio;valid:text; value:männlich; selected:true### männlich<BR>###name:geschlecht; type:radio; valid:text; value:weiblich### weiblich<BR>###name:geschlecht; type:radio; valid:text; value:geschlechtslos### geschlechtslos</TD></TR>
<TR>
<TD class="" vAlign=top>Interessen:</TD>
<TD>
<P>###name:interesse[0];type:checkbox; valid:text; value:sport### Sport<BR>###name:interesse[1]; type:checkbox; valid:text; value:unterhaltung### Unterhaltung<BR>###name:interesse[2]; type:checkbox; valid:text; value:geschichte### Geschichte<BR>###name:interesse[3]; type:checkbox; valid:text; value:internet; selected:true### Internet<BR>###name:interesse[4]; type:checkbox; valid:text; value:sonstiges### Sonstiges</P></TD></TR>
<TR>
<TD>Bemerkungen:</TD>
<TD>###name:bemerkungen; type:textarea; valid:text; rows:6; cols:30###</TD></TR>
<TR>
<TD></TD>
<TD></TD></TR>
<TR>
<TD colSpan=2>
<P align=center><INPUT type=submit value=senden></P></TD></TR></TBODY></TABLE>
Jetzt wenn ich auf "absenden" klicke wird das formular neu geladen und es passiert nix!!1

Eine Idee???

Verfasst: Sa 9. Okt 2004, 14:28
von OAA
Das erst Problem habe ich gelöst!

Code: Alles auswählen

valid:email;
Aber jetzt ist folgendes:

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

kundenname@rss1.rz.uni-regensburg.de

Was kann man da tun???

Verfasst: Sa 9. Okt 2004, 14:49
von kummer
smeusel hat geschrieben:hi :-)

wie bekomme ich es denn in diesem formular hin, dass bei der e-mail ausgabe, auch wenn ich "values" verwende, dennoch die dazugehörige "option" im mail ausgegeben wird und nicht die "value"?

beispiel:
ich habe ein pulldownmenü mit den werten "frau" und "mann". die haben die values 1 = frau und 2 = mann. in meinem mail, das ich nun bekomme steht statt "frau" nur "1".
der tipp einfach die values wegzulassen und mit maxlength zu arbeiten (z.B. wegen der pflichtfelder) klappt hier aber nicht, da beide worte gleich viele buchstaben haben.
wenn es ein pflichtfeld sein soll, muss du ohnehin noch eine dritte option angeben, die ursprünglich ausgewählt ist. also z.b. 'bitte wählen...' (oder auch einfach ein leerzeichen). und diese option hat dann wieder mehr (oder auch weniger) als vier buchstaben. dann sollte es auch wieder funktionieren (auch ohne values).

Verfasst: Sa 9. Okt 2004, 14:50
von kummer
OAA hat geschrieben:Das erst Problem habe ich gelöst!

Code: Alles auswählen

valid:email;
Aber jetzt ist folgendes:

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

kundenname@rss1.rz.uni-regensburg.de

Was kann man da tun???
ich sehe das problem nicht ganz. du hast einen vornamen und einen nachnamen in deinem formular? und diese übergibst du der entsprechenden methode?

Verfasst: Sa 9. Okt 2004, 16:21
von smeusel
wenn es ein pflichtfeld sein soll, muss du ohnehin noch eine dritte option angeben, die ursprünglich ausgewählt ist. also z.b. 'bitte wählen...' (oder auch einfach ein leerzeichen). und diese option hat dann wieder mehr (oder auch weniger) als vier buchstaben. dann sollte es auch wieder funktionieren (auch ohne values).
Ja, wenn man viel bastelt, dann kann man sich da schon weiterhelfen. Das mit den Nummern, also den Values, ist aber eine wirklich kompfortable und übersichtliche Möglichkeit. Ist wirklich mit so viel Aufwand verbunden statt der Values die Options ins E-Mail schreiben zu lassen?

Vielleicht stelle ich mir ja das viel zu einfach vor. Liegt daran, das ich nicht sehr viel Ahnung von PHP habe, ausser ein paar Grundkenntnisse.

Ich stelle mir das so vor:
Schaue wie optionwert von value ist und schreibe option statt value in e-mail :D
ist das zu einfach gedacht?

:-)
stephan[/quote]

Verfasst: Sa 9. Okt 2004, 17:24
von kummer
nein, das geht tatsächlich. das ist nicht ein grundsätzliches problem. allerdings will man das ja typischerweise nicht. man hat ja die values, um sie auszugben.

aber wie gesagt, das lässt sich machen. am besten du schraubst mal daran herum. weil ich habe leider zurzeit zuviel um die ohren, um es für dich machen zu können.

tut mir leid. :?

gruss,
andreas