Formulargenerator

Alles rund um Module und Plugins in CONTENIDO 4.9.
McHubi
Beiträge: 959
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Formulargenerator

Beitrag von McHubi » Do 14. Aug 2014, 08:54

Hallo allerseits,

da mir das händische Erstellen aller möglichen Formulare irgendwann zuviel wurde und mir der - an sich aussichtsreiche aber in punkto Versandmethode, Mailformat und Gestaltbarkeit noch nicht wirklich gute - PIFA auch nicht die "Erlösung" brachte, habe ich einen eigenen Formulareditor entwickelt.

Wichtig: Alle "Jobs" der Folgepostings sind in den Quelltexten dieses Eröffnungsposts bereits berücksichtigt!

Features:
# Versand an mehrere eMail-Adressen möglich
# Editierbarer Betreff
# Spamschutz
# Festlegung der Formularfelder über den Artikelreiter Konfiguration, das sind bisher folgende Typen:
- Text
- Textarea
- eMail (inkl. Prüfung auf korrekte Mailadresse)
- Passwort (inkl. Prüfung auf bestimmte Konventionen. Da Passwortkonventionen immer recht individuell sind, ist hier z.Zt. lediglich eine Mindestanzahl Zeichen vorgegeben. Lässt sich aber ohne weiteres per reg-ex anpassen)
- Datum (inkl. Prüfung auf Datumseingabe)
- Zahl (inkl. Prüfung auf numerische Eingabe), Wertebereich definierbar
- Radio
- Checkbox
- Select single
- Select Multi
- File
- Trenner
# Dateianhang in Größe und Dateityp beschränkbar, derzeit auf einen Anhang beschränkt.
# komplett individualisierbar
# responsive
# Fehlerhinweise mit Markierung im Formular
# Versand als HTML und plain text über die "normale" php-Mailfunktion, Modulausgabe kann aber auf Versand per smtp angepasst werden (http://forum.contenido.org/viewtopic.ph ... 15#p169083)
# Zusammenfassung der eingetragenen Daten nach Versand

Installation
# Normales Anlegen eines neuen Moduls mit den weiter unten stehenden Inhalten
# Hinterlegen der - noch selbst zu erstellenden - drei Spamschutzsymbolen
# ggf. Anpassen der Modulausgabe am Anfang im Bereich ***** settings *****
# ggf. Umstellung von mail() auf smtp im Bereich ***** sending mail and displaying mailed data begin ***** der Modul-Ausgabe

Definition von Formularfeldern:
Gut, es gibt kein "schickes Drag'n'drop" - die Formularfelder werden pragmatisch zeilenweise im Reiter Konfiguration in einer Textarea festgelegt und an die Modul-Ausgabe übermittelt. Dort wird der Inhalt in Arrays gesplittet, die dann für den Aufbau des Formulars, der Fehlerprüfung, Bestätigungsseite und den Mailbody genutzt werden. Eine Erläuterung ist in der Modul-Eingabe vorhanden, ebenso ein fertiges Beispiel. Mag am Anfang etwas nach "Hä?!" aussehen, ist aber letztlich simpel. :wink:
form_generator_sd_be-001.jpg
(175.04 KiB) Noch nie heruntergeladen
form_generator_sd_fe-001.jpg
form_generator_sd_fe-001.jpg (116.29 KiB) 727 mal betrachtet

Modul-Eingabe

Code: Alles auswählen

/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname   :     form_generator_sd
* Author(s)   :     Seamless-Design Markus Hübner
* Copyright   :     Markus Hübner
* Created     :     08/2014
* modified    :     03/2016: added separator
* modified    :     07/2016: added variables to subject
************************************************/

echo '<table>';
echo '<tr><td>'.mi18n("input recipients").'</td><td><input size="100" type="text" name="CMS_VAR[100]" value="CMS_VALUE[100]"><br/>
<small>'.mi18n("input recipients hint").' -> //test@test.de</small></td></tr>';
echo '<tr><td>'.mi18n("input email subject").'</td><td><input size="100" type="text" name="CMS_VAR[200]" value="CMS_VALUE[200]"><br/>
      <small>'.mi18n("input email subject hint").'</small></td></tr>';
echo '<tr><td>'.mi18n("input email subject variables").'</td><td><input size="100" type="text" name="CMS_VAR[210]" value="CMS_VALUE[210]"><br/>
      <small>'.mi18n("input email subject variables hint").': gender###prename###name</small></td></tr>';
echo '<tr><td>'.mi18n("input attachment allowed").'</td><td>';
      if ("CMS_VALUE[300]" != "true") {
        echo '<input type="radio" name="CMS_VAR[300]" value="true"> '.mi18n("yes");
        } else {
        echo '<input type="radio" name="CMS_VAR[300]" value="true" checked>  '.mi18n("yes");
        }
      if ("CMS_VALUE[300]" != "false") {
        echo '<input type="radio" name="CMS_VAR[300]" value="false">  '.mi18n("no");
        } else {
        echo '<input type="radio" name="CMS_VAR[300]" value="false" checked>  '.mi18n("no");
        }
echo '</td></tr>';
echo '<tr><td>'.mi18n("input filesize max").'</td><td><input size="8" type="text" name="CMS_VAR[400]" value="CMS_VALUE[400]">'.mi18n("input filesize max hint").'</td></tr>';
echo '<tr><td>'.mi18n("input anti_spam active").'</td><td>';
      if ("CMS_VALUE[500]" != "true") {
        echo '<input type="radio" name="CMS_VAR[500]" value="true"> '.mi18n("yes");
        } else {
        echo '<input type="radio" name="CMS_VAR[500]" value="true" checked> '.mi18n("yes");
        }
      if ("CMS_VALUE[500]" != "false") {
        echo '<input type="radio" name="CMS_VAR[500]" value="false"> '.mi18n("no");
        } else {
        echo '<input type="radio" name="CMS_VAR[500]" value="false" checked> '.mi18n("no");
        }
echo '</td></tr>';
echo '<tr><td colspan="2"><b>'.mi18n("input form fields").'</b></td></tr>';
echo '<tr><td colspan="2"><textarea style="font-size: 12px;font-family: arial,helvetica,sans-serif;" cols="200" rows="20" name="CMS_VAR[600]">CMS_VALUE[600]</textarea><br/>
     '.mi18n("input please save content in case of accidentally deleting it").'</td></tr>';
echo '<tr><td colspan="2">
      <b>'.mi18n("input explanations").':</b><br/>
      ###type***fieldname***mandatory***name***class***value***size***description***additional***error message<br/>
     <u>1. type:</u> type_radio, type_checkbox, type_text, type_date, type_number, type_email, type_password, type_textarea, type_select_single, type_select_multi, type_file, type_separator<br/>
     <u>2. fieldname:</u> name of the field which has to be filled<br/>
     <u>3. mandatory:</u> "true" or "false"<br/>
     <u>4. name:</u> in general: some name of variable, but it has to be unique - exception: type_file - name has to be attachment<br/>
     <u>5. class:</u> in general: name of css-class or "none" - exception: type_separator - no class possible<br/>
     <u>6. value:</u> needed for type_radio, type_checkbox, type_select_single, type_select_multi (all others "none"). "please choose" for type_select_single and type_select_multi has to be "--- ? ---"<br/>
     <u>7. size:</u> type_textarea: rows x width in percentage (e.g 20x90)/ type_select_single and type_select_multi: rows (e.g. 5)/ type_text, type_number, type_date, type_email, type_password: percentage (e.g. 50)<br/>
     <u>8. description:</u> explaining words, which appear above input-field, or "none"<br/>
     <u>9. additional:</u> type_radio and type_checkbox: "horizontal" or "vertical", type_number: min-max (e.g. 1000-2000) or "none", all others "none"<br/>
     <u>10. error message:</u> what is mentioned if mandatory is not regarded or entered data is wrong. language is currently selected backend-language<br/>
     <br/>
     <u>###:</u> separates fields<br/>
     <u>***:</u> separates data defining field<br/>
     <u>+++:</u> separates field data (only type_radio, type_checkbox, type_select_single, type_select_multi)<br/>
     <br/>
     <u>type_file:</u> at the moment there is just one file possible!<br/>
     <br/>
     <b>'.mi18n("input examples").'</b>
     <div style="background-color: #f2f2f2;">
###type_radio***Anrede***true***gender***none***Herr***none***Herr***vertical***Bitte teilen Sie Ihre Anrede mit.<br/>
+++type_radio***Anrede***true***gender***none***Frau***none***Frau***vertical***Bitte teilen Sie Ihre Anrede mit.<br/>
###type_checkbox***Wetter***true***sonne***none***Sonne scheint***none***Sonne scheint***vertical***Bitte sagen Sie, dass die Sonne scheint.<br/>
+++type_checkbox***Wetter***false***wind***none***Wind weht ein wenig***none***Wind weht ein wenig***vertical***Bitte sagen Sie, dass der Wind weht.<br/>
###type_text***Name***true***name***text***none***none***none***none***Bitte tragen Sie Ihren Namen ein.<br/>
###type_date***Datum***true***datum***text***none***20***none***none***Bitte tragen Sie ein korrektes Datum ein.<br/>
###type_email***E-Mail***true***email***text***none***none***none***none***Bitte tragen Sie eine korrekte E-Mail Adresse ein.<br/>
###type_password***Passwort***true***password***text***none***none***none***none***Bitte tragen Sie ein korrektes Passwort, dass den Kriterien ... entspricht ein.<br/>
###type_number***Postleitzahl***false***plz***text***none***30***none***1000-99999***Bitte geben Sie eine korrekte Postleitzahl ein.<br/>
###type_textarea***Nachricht***true***message***textarea***none***10x90***Lorem ipsum dolor...***none***Bitte tragen Sie eine Nachricht ein.<br/>
###type_select_single***Essen***true***essen***none***--- ? ---***3***Ihre Auswahl?***none***Bitte wählen Sie ein Essen aus.<br/>
+++type_select_single***Essen***true***essen***none***Pizza***3***Ihre Auswahl?***none***Bitte wählen Sie ein Essen aus.<br/>
+++type_select_single***Essen***true***essen***none***Salat***3***Ihre Auswahl?***none***Bitte wählen Sie ein Essen aus.<br/>
+++type_select_single***Essen***true***essen***none***Nudeln***3***Ihre Auswahl?***none***Bitte wählen Sie ein Essen aus.<br/>
+++type_select_single***Essen***true***essen***none***Schnitzel***3***Ihre Auswahl?***none***Bitte wählen Sie ein Essen aus.<br/>
+++type_select_single***Essen***true***essen***none***Würstchen***3***Ihre Auswahl?***none***Bitte wählen Sie ein Essen aus.<br/>
###type_select_multi***Getränke***true***getraenke***none***--- ? ---***3***Ihre Auswahl?***none***Bitte wählen Sie ein Getränk aus.<br/>
+++type_select_multi***Getränke***true***getraenke***none***Wasser***3***Ihre Auswahl?***none***Bitte wählen Sie ein Getränk aus.<br/>
+++type_select_multi***Getränke***true***getraenke***none***Cola***3***Ihre Auswahl?***none***Bitte wählen Sie ein Getränk aus.<br/>
+++type_select_multi***Getränke***true***getraenke***none***Fanta***3***Ihre Auswahl?***none***Bitte wählen Sie ein Getränk aus.<br/>
+++type_select_multi***Getränke***true***getraenke***none***Wein***3***Ihre Auswahl?***none***Bitte wählen Sie ein Getränk aus.<br/>
###type_file***Dateianhang***false***attachment***none***none***none***(max. 200 kb)***none***Bitte laden Sie eine Datei hoch.<br/>
###type_separator***Text für Trenner***false***none***none***none***none***none***none***none
     </div>
      </td></tr>';
echo '</table>';
Modul-Ausgabe

Code: Alles auswählen

<?php

/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     form_generator_sd
* Author(s)   :     Seamless-Design Markus Hübner
* Copyright   :     Markus Hübner
* Created     :     08/2014
* modified    :     03/2016: added separator
* modified    :     07/2016: added variables to subject
* modified    :     01/2017: added variables send_from_... to counter restrictions of some hosters with sending mails
* modified    :     03/2017: fixed attachment-bug / added plain-text version / improved responsive design
************************************************/

/*
if you want to add new fieldtypes, you will have to look at ########## checking for errors begin ########## and  ########## displaying form begin ##########
Some hosters don't allow sending mails with "from-adresses" that are not located on the same server to provide spam. In this case, make your changes in variable $send_from_name and $send_from_email within settings
*/
/********** settings begin **********/

$send_from_name=""; // if this is set to =""; the original name entered in form by the user will be taken
$send_from_email=""; // if this is set to =""; the original mail-address entered in form by the user will be taken

$attachment_allowed="CMS_VALUE[300]";
/*
jpg: jpg
jpeg: jpeg
bmp: bmp
zip: octet-stream
doc: msword
docx: vnd.openxmlformats-officedocument.wordprocessingml.document
xls: plain
xlsx: vnd.openxmlformats-officedocument.spreadsheetml.sheet
*/
$array_allowed_filetypes=array('jpg','jpeg','gif','png','bmp','pdf','octet-stream','doc','plain');
$array_allowed_filetypes_hint=array('jpg','jpeg','gif','png','bmp','pdf','zip','doc','xls');
$allowed_filetypes_hint_form="";
foreach($array_allowed_filetypes_hint AS $element) $allowed_filetypes_hint_form.='<span class="allowed_filetypes">'.$element.'</span> ';
$filesize_max="CMS_VALUE[400]"*1;
$max_attach_size_hint=$filesize_max/1000000;
$anti_spam="CMS_VALUE[500]";
$amount_countchas=8;
$countcha_1="upload/bullets/countcha_1.png";
$countcha_2="upload/bullets/countcha_2.png";
$countcha_3="upload/bullets/countcha_3.png";
$name_countcha_1=mi18n("output form countcha 1 name");
$name_countcha_2=mi18n("output form countcha 2 name");
$name_countcha_3=mi18n("output form countcha 3 name");
$placeholder_select_something="--- ? ---";
$arr_search=array('ä','ö','ü','Ä','Ö','Ü','ß');
$arr_replace=array('&auml;','&ouml;','&uuml;','&Auml;','&Ouml;','&Uuml;','&szlig;');
/********** settings end **********/ 

/*
###0 type***1 fieldname***2 mandatory***3 name***4 class***5 value***6 size***7 beschreibung***8 additional***9 error message
maximum 1 attachment possible, name hast to be "attachment"
*/
$fields="CMS_VALUE[600]";
 

echo '<a name="startform"></a>';

$form_submitted=htmlspecialchars(strip_tags($_POST['form_submitted']));

$array_fields=explode('###',$fields);
unset($array_fields[0]);
//print_r($array_fields);

$array_field_names=array();
$array_field_names_mail_body_success_info=array();
foreach($array_fields AS $field)
  {
  $array_field_parts=explode('+++',$field);
  foreach($array_field_parts AS $part)
    {
   $array_field_parts_elements=explode('***',$part);
   //0: name / 1: type / 2: mandatory / 3: error message / 4: fieldname / 5: additional
   $array_field_names[]=array($array_field_parts_elements[3],$array_field_parts_elements[0],$array_field_parts_elements[2],$array_field_parts_elements[9],$array_field_parts_elements[1],$array_field_parts_elements[8]);
   $array_field_names_mail_body_success_info[]=$array_field_parts_elements[1];
   }
  }
$array_field_names=array_unique($array_field_names, SORT_REGULAR);
$array_field_names=array_values($array_field_names);
$field_content_counter=1;



if($form_submitted!="")
  {
/*########## checking for errors begin ##########*/
$mail_body='<table>';
$mail_body_plain_text="";
$success_info='<div class="box_success_info">';
$i=1;
$amount_of_fields=count($array_field_names);

foreach($array_field_names AS $field)
  {
/* formatting and adding data for mail_body and success_info after sending form successfully begin */
  if(is_array($_POST[$field[0]]))
    {
    ${'value_'.$field[0]}=$_POST[$field[0]];
    if(${'value_'.$field[0]}[0]==$placeholder_select_something) ${'value_'.$field[0]}="";
    $array_temp=array();
    foreach(${'value_'.$field[0]} AS $element) $array_temp[]=htmlspecialchars(strip_tags($element));
    ${'value_'.$field[0]}=$array_temp;
    }
    else ${'value_'.$field[0]}=htmlspecialchars(strip_tags($_POST[$field[0]]));
  if(${'value_'.$field[0]}==$placeholder_select_something) ${'value_'.$field[0]}="";
  if(is_array(${'value_'.$field[0]}))
    {
    $field_value="";
    foreach(${'value_'.$field[0]} AS $field_value_part) $field_value.="*&nbsp;".$field_value_part.'<br/>';
    }
    else $field_value=str_replace($arr_search,$arr_replace,${'value_'.$field[0]});
  if($field[1]=="type_file")
    {
	$field_value=$_FILES[$field[0]]['name'];
	}
  if(${'value_'.$field[0]}!="" OR $field[1]=="type_file")
    {
    $mail_body.='<tr><td><b>'.str_replace($arr_search,$arr_replace,$field[4]).'</b></td><td>'.nl2br($field_value).'</td></tr>';
	$mail_body_plain_text.=str_replace($arr_search,$arr_replace,$field[4]).': '.nl2br($field_value).'\r\n';
    if($field[1]=="type_password") $field_value='*********';
    $success_info.='<div class="box_success_info_row"><div';
    if($i==1) $success_info.=' class="box_success_info_row_s1_z1_ueb"';
    if($i!=1 AND $i<$amount_of_fields) $success_info.=' class="box_success_info_row_s1_zx_ueb"';
    if($i==$amount_of_fields) $success_info.=' class="box_success_info_row_s1_zende_ueb"';
    $success_info.='>'.str_replace($arr_search,$arr_replace,$field[4]).'</div><div class="box_success_info_data">'.nl2br($field_value).'</div></div>';
    }
  if($field[1]=="type_separator")
    {
    $mail_body.='<tr><td colspan="2"><b>'.str_replace($arr_search,$arr_replace,$field[4]).'</b></td></tr>';
	$mail_body_plain_text.='\r\n'.str_replace($arr_search,$arr_replace,$field[4]).'\r\n';
    $success_info.='<div';
    if($i==1) $success_info.=' class="box_success_info_row_separator"';
    if($i!=1 AND $i<$amount_of_fields) $success_info.=' class="box_success_info_row_separator"';
    if($i==$amount_of_fields) $success_info.=' class="box_success_info_row_separator"';
    $success_info.='>'.str_replace($arr_search,$arr_replace,$field[4]).'</div>';
    }
/* formatting and adding data for mail_body and success_info after sending form successfully end */   

  // RADIO
  if($field[1]=="type_radio" AND $field[2]=="true")
    {
   if(${'value_'.$field[0]}=="")
      {
     $array_errors[]=$field[3];
     $string_error_ids.=$field[0].';';
     }
   }
  // CHECKBOX
  if($field[1]=="type_checkbox" AND $field[2]=="true")
    {
   if(${'value_'.$field[0]}=="")
      {
     $array_errors[]=$field[3];
     $string_error_ids.=$field[0].';';
     }
   }
  // SELECT SINGLE
  if($field[1]=="type_select_single" AND $field[2]=="true")
    {
   if(${'value_'.$field[0]}=="")
      {
     $array_errors[]=$field[3];
     $string_error_ids.=$field[0].';';
     }
   }
  // SELECT MULTI
  if($field[1]=="type_select_multi" AND $field[2]=="true")
    {
   if(${'value_'.$field[0]}=="")
      {
     $array_errors[]=$field[3];
     $string_error_ids.=$field[0].';';
     }
   }
  // TEXT
  if($field[1]=="type_text" AND $field[2]=="true")
    {
   if(${'value_'.$field[0]}=="")
      {
     $array_errors[]=$field[3];
     $string_error_ids.=$field[0].';';
     }
   }
  // NUMBER
  if($field[1]=="type_number")
    {
   if(${'value_'.$field[0]}=="" AND $field[2]=="true")
      {
     $array_errors[]=$field[3];
     $string_error_ids.=$field[0].';';
     }
   if(!empty(${'value_'.$field[0]}))
      {
      if(!is_numeric(${'value_'.$field[0]}))
         {
         $array_errors[]=$field[3];
       $string_error_ids.=$field[0].';';
         }
         else
         {
       if($field[5]!="none")
         {
         $array_min_max=explode('-',$field[5]);
         if(${'value_'.$field[0]}*1<$array_min_max[0] OR ${'value_'.$field[0]}*1>$array_min_max[1])
           {
             $array_errors[]=$field[3];
           $string_error_ids.=$field[0].';';
           }
         }
         }
     }
   }
  // DATE
  if($field[1]=="type_date" AND $field[2]=="true")
    {
   if(${'value_'.$field[0]}=="")
      {
     $array_errors[]=$field[3];
     $string_error_ids.=$field[0].';';
     }
   if(!empty(${'value_'.$field[0]}))
      {
     $timestamp=strtotime(${'value_'.$field[0]});
     if($timestamp=="")
       {
      $array_errors[]=$field[3];
      $string_error_ids.=$field[0].';';
      }
     }
   }
  // EMAIL
  if($field[1]=="type_email")
    {
   if(${'value_'.$field[0]}=="" AND $field[2]=="true")
      {
     $array_errors[]=$field[3];
     $string_error_ids.=$field[0].';';
     }
   if(!empty(${'value_'.$field[0]}))
          {
          $mail_expr = "/^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/";
          if (!preg_match($mail_expr, ${'value_'.$field[0]}) )
             {
             $array_errors[]=$field[3];
          $string_error_ids.=$field[0].';';
             }
          }
   }
  // PASSWORD
  if($field[1]=="type_password" AND $field[2]=="true")
    {
    if(${'value_'.$field[0]}=="")
      {
      $array_errors[]=$field[3];
      $string_error_ids.=$field[0].';';
      }
    }
   if($field[1]=="type_password")
     {
     if(!empty(${'value_'.$field[0]}))
       {
       if(strlen(${'value_'.$field[0]}) < 6)
         {
         $array_errors[]=$field[3];
         $string_error_ids.=$field[0].';';
         }
       }
     }
  // TEXTAREA
  if($field[1]=="type_textarea")
    {
   if(${'value_'.$field[0]}=="" AND $field[2]=="true")
      {
     $array_errors[]=$field[3];
     $string_error_ids.=$field[0].';';
     }
   }
  // FILE   
  if($field[1]=="type_file")
    {
    $array_filetype=explode('/',$_FILES[$field[0]]['type']);
    $filetype=strtolower($array_filetype[1]);
    $filesize=$_FILES[$field[0]]['size'];
   if($filetype=="" AND $field[2]=="true")
     {
     $array_errors[]=$field[3];
     $string_error_ids.=$field[0].';';
     }
   if($filetype!="")
      {
    if(!in_array($filetype,$array_allowed_filetypes))
      {
       $string_allowed_filetypes="";
       foreach($array_allowed_filetypes_hint AS $element) $string_allowed_filetypes.=$element." "; // building error hint from array of allowed filetypes
      $array_errors[]=mi18n("output em filetype not allowed")." ".$string_allowed_filetypes;
     $string_error_ids.="attachment;";
     }
    if($filesize>$filesize_max)
      {
     $array_errors[]=mi18n("output em filesize too big");
     $string_error_ids.="attachment;";
     }
    }
   }
  $i++;
  }
  $mail_body.='</table>';
  $success_info.='</div>';
  // ANTI SPAM
  if($anti_spam=="true")
    {
   if($countcha!=$countcha_to_prove_amount)
     {
     $array_errors[]=mi18n("output em amount of countchas not correct");
     $string_error_ids.="countcha;";
     }
   }
  /* showing error messages begin */
  if(count($array_errors)==0) $no_errors="true";
    else
     {
     $no_errors="false";
     echo '<p class="formular_fehlermeldungen">'.mi18n("output em there are errors");
     echo '<ul class="formular_fehlermeldungen">';
     foreach($array_errors AS $element) echo '<li>'.$element.'</li>';
     echo '</ul></p>';
     }
  /* showing error messages end */
/*########## checking for errors end ##########*/
  }


/*################################*/
/*########## displaying form begin ##########*/
/*################################*/
if($form_submitted=="" OR $no_errors=="false")
{
echo '<form method="post" action="front_content.php?idart='.$idart.'#startform" enctype="multipart/form-data">';
echo '<div class="box_form">';
$row_counter=1;
$rows_overall=count($array_fields);
foreach($array_fields AS $field)
  {
  $class_td_separator="box_form_row_separator";
  if($row_counter==1)
    {
     $class_td_head="box_form_row_s1_z1_ueb nowrap";
     }
    elseif($row_counter<$rows_overall)
       {
       $class_td_head="box_form_row_s1_zx_ueb nowrap";
       }
  if($row_counter==$rows_overall)
    {
    $class_td_head="box_form_row_s1_zende_ueb nowrap";
     }
  //RADIO
  if (strpos($field, 'type_radio***') !== false)
    {
    $array_radios=explode('+++',$field);
   $amount_of_radios=count($array_radios);
   echo '<div class="box_form_row"><div class="'.$class_td_head.'">';
    $i=1;
    foreach($array_radios AS $radio)
      {
     $array_field_to_show=explode('***',$radio);
      if($i==1)
       {
       echo $array_field_to_show[1].' ';
      if($array_field_to_show[2]=="true") echo '*';
        echo '</div><div class="box_form_data" id="'.$array_field_to_show[3].'">';
       }
     echo '<input type="radio" name="'.$array_field_to_show[3].'"';
     if($array_field_to_show[4]!="none") echo ' class="'.$array_field_to_show[4].'"';
     if($array_field_to_show[5]!="none") echo ' value="'.$array_field_to_show[5].'"';
     if(${'value_'.$array_field_to_show[3]}==$array_field_to_show[5]) echo ' checked="checked"';
     echo '/>';
     if($array_field_to_show[7]!="none") echo ' '.$array_field_to_show[7];
     if($i==$amount_of_radios) echo '</div></div>';
       else
        {
        if($array_field_to_show[8]!="horizontal") echo '<br/>';
          else echo '&nbsp;';
        }
     $i++;
     }
    }
  //CHECKBOX
  if (strpos($field, 'type_checkbox***') !== false)
    {
    $array_checkboxes=explode('+++',$field);
   $amount_of_checkboxes=count($array_checkboxes);
   echo '<div class="box_form_row"><div class="'.$class_td_head.'">';
    $i=1;
    foreach($array_checkboxes AS $checkbox)
      {
     $array_field_to_show=explode('***',$checkbox);
      if($i==1)
       {
       echo $array_field_to_show[1].' ';
      if($array_field_to_show[2]=="true") echo '*';
        echo '</div><div class="box_form_data">';
       }
     echo '<input type="checkbox" name="'.$array_field_to_show[3].'"';
     if($array_field_to_show[4]!="none") echo ' class="'.$array_field_to_show[4].'"';
     if($array_field_to_show[5]!="none") echo ' value="'.$array_field_to_show[5].'"';
     if(${'value_'.$array_field_to_show[3]}==$array_field_to_show[5]) echo ' checked="checked"';
     echo '/>';
     if($array_field_to_show[7]!="none") echo ' <span id="'.$array_field_to_show[3].'">'.$array_field_to_show[7].'</span>';
     if($i==$amount_of_checkboxes) echo '</div></div>';
       else
        {
        if($array_field_to_show[8]!="horizontal") echo '<br/>';
          else echo '&nbsp;';
        }
     $i++;
     }
    }
  //SELECT SINGLE
  if (strpos($field, 'type_select_single***') !== false)
    {
    $array_options=explode('+++',$field);
   $amount_of_options=count($array_options);
   echo '<div class="box_form_row"><div class="'.$class_td_head.'">';
    $i=1;
    foreach($array_options AS $option)
      {
     $array_field_to_show=explode('***',$option);
      if($i==1)
       {
       echo $array_field_to_show[1].' ';
      if($array_field_to_show[2]=="true") echo '*';
        echo '</div><div class="box_form_data" id="'.$array_field_to_show[3].'">';
        if($array_field_to_show[7]!="none") echo $array_field_to_show[7].'<br/>';
       echo '<select name="'.$array_field_to_show[3].'"';
       if($array_field_to_show[4]!="none") echo ' class="'.$array_field_to_show[4].'"';
       if($array_field_to_show[6]!="none") echo ' size="'.$array_field_to_show[6].'"';
        echo '/>';
       }
      echo '<option value="'.$array_field_to_show[5].'"';
     if(${'value_'.$array_field_to_show[3]}==$array_field_to_show[5]) echo ' selected';
     echo '>'.$array_field_to_show[5].'</option>';
     if($i==$amount_of_options) echo '</select></div></div>';
     $i++;
     }
    }
  //SELECT MULTI
  if (strpos($field, 'type_select_multi***') !== false)
    {
    $array_options=explode('+++',$field);
   $amount_of_options=count($array_options);
   echo '<div class="box_form_row"><div class="'.$class_td_head.'">';
    $i=1;
    foreach($array_options AS $option)
      {
     $array_field_to_show=explode('***',$option);
      if($i==1)
       {
       echo $array_field_to_show[1].' ';
      if($array_field_to_show[2]=="true") echo '*';
        echo '</div><div class="box_form_data" id="'.$array_field_to_show[3].'">';
        if($array_field_to_show[7]!="none") echo $array_field_to_show[7].'<br/>';
       echo '<select name="'.$array_field_to_show[3].'[]" multiple="multiple"';
       if($array_field_to_show[4]!="none") echo ' class="'.$array_field_to_show[4].'"';
       if($array_field_to_show[6]!="none") echo ' size="'.$array_field_to_show[6].'"';
        echo '/>';
       }
      echo '<option value="'.$array_field_to_show[5].'"';
     if(in_array($array_field_to_show[5],${'value_'.$array_field_to_show[3]})) echo ' selected';
     echo '>'.$array_field_to_show[5].'</option>';
     if($i==$amount_of_options) echo '</select></div></div>';
     $i++;
     }
    }
  //TEXT
  if (strpos($field, 'type_text***') !== false)
    {
    $array_field_to_show=explode('***',$field);
   echo '<div class="box_form_row"><div class="'.$class_td_head.'">';
    echo $array_field_to_show[1].' ';
     if($array_field_to_show[2]=="true") echo '*';
   echo '</div><div class="box_form_data" id="'.$array_field_to_show[3].'">';
    echo '<input type="text" name="'.$array_field_to_show[3].'"';
    if($array_field_to_show[4]!="none") echo ' class="'.$array_field_to_show[4].'"';
   echo ' value="'.${'value_'.$array_field_to_show[3]}.'"';
   if($array_field_to_show[6]!="none") echo ' style="width: '.$array_field_to_show[6].'%;"';
    echo '/>';
    if($array_field_to_show[7]!="none") echo ' '.$array_field_to_show[7];
	echo '</div></div>';
    }
  //NUMBER
  if (strpos($field, 'type_number***') !== false)
    {
    $array_field_to_show=explode('***',$field);
   echo '<div class="box_form_row"><div class="'.$class_td_head.'">';
    echo $array_field_to_show[1].' ';
     if($array_field_to_show[2]=="true") echo '*';
   echo '</div><div class="box_form_data" id="'.$array_field_to_show[3].'">';
    echo '<input type="text" name="'.$array_field_to_show[3].'"';
    if($array_field_to_show[4]!="none") echo ' class="'.$array_field_to_show[4].'"';
   echo ' value="'.${'value_'.$array_field_to_show[3]}.'"';
   if($array_field_to_show[6]!="none") echo ' style="width: '.$array_field_to_show[6].'%;"';
    echo '/>';
    if($array_field_to_show[7]!="none") echo ' '.$array_field_to_show[7];
	echo '</div></div>';
    }
  //DATE
  if (strpos($field, 'type_date***') !== false)
    {
    $array_field_to_show=explode('***',$field);
   echo '<div class="box_form_row"><div class="'.$class_td_head.'">';
    echo $array_field_to_show[1].' ';
     if($array_field_to_show[2]=="true") echo '*';
   echo '</div><div class="box_form_data" id="'.$array_field_to_show[3].'">';
    echo '<input type="text" name="'.$array_field_to_show[3].'"';
    if($array_field_to_show[4]!="none") echo ' class="'.$array_field_to_show[4].'"';
   echo ' value="'.${'value_'.$array_field_to_show[3]}.'"';
   if($array_field_to_show[6]!="none") echo ' style="width: '.$array_field_to_show[6].'%;"';
    echo '/>';
    if($array_field_to_show[7]!="none") echo ' '.$array_field_to_show[7];
	echo '</div></div>';
    }
  //EMAIL
  if (strpos($field, 'type_email***') !== false)
    {
    $array_field_to_show=explode('***',$field);
   echo '<div class="box_form_row"><div class="'.$class_td_head.'">';
    echo $array_field_to_show[1].' ';
     if($array_field_to_show[2]=="true") echo '*';
   echo '</div><div class="box_form_data" id="'.$array_field_to_show[3].'">';
    echo '<input type="email" name="'.$array_field_to_show[3].'"';
    if($array_field_to_show[4]!="none") echo ' class="'.$array_field_to_show[4].'"';
   echo ' value="'.${'value_'.$array_field_to_show[3]}.'"';
   if($array_field_to_show[6]!="none") echo ' style="width: '.$array_field_to_show[6].'%;"';
    echo '/>';
    if($array_field_to_show[7]!="none") echo ' '.$array_field_to_show[7];
	echo '</div></div>';
    }
  //PASSWORD
  if (strpos($field, 'type_password***') !== false)
    {
    $array_field_to_show=explode('***',$field);
   echo '<div class="box_form_row"><div class="'.$class_td_head.'">';
    echo $array_field_to_show[1].' ';
     if($array_field_to_show[2]=="true") echo '*';
   echo '</div><div class="box_form_data" id="'.$array_field_to_show[3].'">';
    echo '<input type="password" name="'.$array_field_to_show[3].'"';
    if($array_field_to_show[4]!="none") echo ' class="'.$array_field_to_show[4].'"';
   echo ' value="'.${'value_'.$array_field_to_show[3]}.'"';
   if($array_field_to_show[6]!="none") echo ' style="width: '.$array_field_to_show[6].'%;"';
    echo '/>';
    if($array_field_to_show[7]!="none") echo ' '.$array_field_to_show[7];
	echo '</div></div>';
    }
  //TEXTAREA
  if (strpos($field, 'type_textarea***') !== false)
    {
    $array_field_to_show=explode('***',$field);
   echo '<div class="box_form_row"><div class="'.$class_td_head.'">';
    echo $array_field_to_show[1].' ';
     if($array_field_to_show[2]=="true") echo '*';
   echo '</div><div class="box_form_data" id="'.$array_field_to_show[3].'">';
   if($array_field_to_show[7]!="none") echo ' '.$array_field_to_show[7].'<br/>';
    echo '<textarea name="'.$array_field_to_show[3].'"';
    if($array_field_to_show[4]!="none") echo ' class="'.$array_field_to_show[4].'"';
   if($array_field_to_show[6]!="none")
     {
     $array_dimensions=explode('x',$array_field_to_show[6]);
     echo ' rows="'.$array_dimensions[0].'" style="width:'.$array_dimensions[1].'%;"';
     }
    echo '/>';
   echo ${'value_'.$array_field_to_show[3]};
   echo '</textarea>';
    echo '</div></div>';
    }
  //FILE
  if (strpos($field, 'type_file***') !== false AND $attachment_allowed=="true")
    {
    $array_field_to_show=explode('***',$field);
   echo '<div class="box_form_row"><div class="'.$class_td_head.'">';
    echo $array_field_to_show[1].' ';
     if($array_field_to_show[2]=="true") echo '*';
   echo '<br/><p class="formular_hinweis">'.$allowed_filetypes_hint_form.'</p>';
   echo '</div><div class="box_form_data" id="'.$array_field_to_show[3].'">';
    echo '<input type="file" name="'.$array_field_to_show[3].'"';
    if($array_field_to_show[4]!="none") echo ' class="'.$array_field_to_show[4].'"';
   if (isset($_FILES[$array_field_to_show[3]]['name'])) echo $_FILES['attachment']['name']; else echo '-';
    echo '/>';
    if($array_field_to_show[7]!="none") echo '<br/>'.$array_field_to_show[7];
	echo '</div></div>';
    }
  //SEPARATOR
  if (strpos($field, 'type_separator***') !== false)
    {
    $array_field_to_show=explode('***',$field);
    echo '<div class="box_form_row"><div class="'.$class_td_separator.'">';
    echo $array_field_to_show[1].' ';
    echo '</div></div>';
    }
   $row_counter++;
  }
echo '</div>';

echo '<p class="hint_mandatory_fields">'.mi18n("output form * fields have to be filled").'</p>';

/********** anti_spam begin **********/
if($anti_spam=="true")
  {
  $amount_countcha_1=rand(1,$amount_countchas);
  $amount_countcha_2=rand(1,$amount_countchas-$amount_countcha_1);
  $amount_countcha_3=rand(1,$amount_countchas-$amount_countcha_1-$amount_countcha_2);
  $countcha_chosen=rand(1,3);
  $countcha_chosen_hint=${'name_countcha_'.$countcha_chosen};
  $countcha_to_prove_amount=${'amount_countcha_'.$countcha_chosen};
  echo '<div class="formular_anti_spam">';
  echo '<input type="hidden" name="countcha_to_prove_amount" value="'.$countcha_to_prove_amount.'"/>';
  $c=1;
  while($c<=3)
    {
    $i=0;
    while($i<${'amount_countcha_'.$c})
      {
     echo '<img class="countcha" src="'.${'countcha_'.$c}.'"/>';
     $i++;
     }
    $c++;
    }
  echo '<br/>'.mi18n("output form anti_spam_hint_1");
  echo ' '.$countcha_chosen_hint.' ';
  echo mi18n("output form anti_spam_hint_2");
   echo ' <input id="countcha" type="text" class="text" style="width: 5em;" name="countcha" value="';
      if (isset($countcha)) echo $countcha; else echo '';
      echo '"/>';
  echo '</div>';
  }
/********** anti_spam end **********/
echo '<input class="submit" type="submit" name="form_submitted" value="'.mi18n("output form send").'"/>';
echo '</form>';
}


/********** marking errors begin **********/
// this part has to run after the form is fully displayed. otherwise the ids would not be present for js
if($form_submitted!="" AND $no_errors=="false")
  {
  ?>
  <script type="text/javascript">
  var var_string_error_ids="<?php echo $string_error_ids;?>";
  var array_error_ids=var_string_error_ids.split(";");
  var a=0;
  while(a!=array_error_ids.length)
    {
    document.getElementById(array_error_ids[a]).style.backgroundColor="#ff0000";
    a=a+1;
    }
  </script>
  <?php
  }
/********** marking errors end **********/

/*###############################*/
/*########## displaying form end ##########*/
/*###############################*/



/*##############################################*/
/*########## sending mail and displaying mailed data begin ##########*/
/*#############################################*/
/********** sending mail begin **********/
if($form_submitted!="" AND $no_errors=="true")
  {
  $ip = htmlspecialchars(strip_tags($_SERVER["REMOTE_ADDR"]));
  if($gender=="female") $gender_mail=mi18n("output email female");
    else $gender_mail=mi18n("output email male");
  //building array with recipients
  $recipients = "CMS_VALUE[100]";
  $array_recipients=array_filter(explode("//",$recipients));
  $recipients_in_array=explode("//",$recipients);
  //formatting subject of email
  $mail_subject="CMS_VALUE[200]";
  $mail_subject_variables="CMS_VALUE[210]";
  if($mail_subject_variables!="")
    {
    $array_mail_subject_variables=explode("###",$mail_subject_variables);
    foreach($array_mail_subject_variables AS $subject_variable) $mail_subject.=utf8_decode(' '.${$subject_variable});
    }
  // mail_body ist build within checking for errors section
  if($send_from_name!="" AND $send_from_email!="")
    {
	$name=$send_from_name;
	$email=$send_from_email;
	}
  if($filetype=="")
  {
$random_hash = md5(date('r', time()));
$headers = "From: ".$send_from_email."\r\nReply-To: ".$send_from_email;
$headers .= "\r\nContent-Type: multipart/alternative; boundary=\"PHP-alt-".$random_hash."\"";
ob_start(); //Turn on output buffering, IMPORTANT: DO NOT REMOVE ANY OF THE FOLLOWING EMPTY LINES OR ADD BLANKSPACES BEFORE THE CODELINES TILL $message = ob_get_clean();!!! OTHERWISE THE CODE WON'T WORK BECAUSE OF WRONG BUFFER-CONTENTS!!!
?>
--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

<?php echo $mail_body_plain_text."\n"; ?>

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

<?php echo nl2br($mail_body)."\n"; ?>

--PHP-alt-<?php echo $random_hash; ?>--
<?php
$message = ob_get_clean();//copy current buffer contents into $message variable and delete current output buffer
  }
  else
    {
$random_hash = md5(date('r', time()));
$headers = "From: ".$send_from_email."\r\nReply-To: ".$send_from_email;
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
$attachment = chunk_split(base64_encode(file_get_contents($_FILES['attachment']['tmp_name'])));
ob_start();  //Turn on output buffering, IMPORTANT: DO NOT REMOVE ANY OF THE FOLLOWING EMPTY LINES OR ADD BLANKSPACES BEFORE THE CODELINES TILL $message = ob_get_clean();!!! OTHERWISE THE CODE WON'T WORK BECAUSE OF WRONG BUFFER-CONTENTS!!!
?>
--PHP-mixed-<?php echo $random_hash; ?> 
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>"

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

<?php echo $mail_body_plain_text."\n"; ?>

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

<?php echo nl2br($mail_body)."\n"; ?>

--PHP-alt-<?php echo $random_hash; ?>--

--PHP-mixed-<?php echo $random_hash; ?> 
Content-Type: <?php echo $_FILES['attachment']['type']; ?>; name="<?php echo $_FILES['attachment']['name']; ?>"
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

<?php echo $attachment; ?>
--PHP-mixed-<?php echo $random_hash; ?>--

<?php
$message = ob_get_clean();//copy current buffer contents into $message variable and delete current output buffer
    }
  foreach($recipients_in_array as $recipient)
    {
    if (@mail($recipient,$mail_subject,$message,$headers)) $sent = true;
      else echo "<br/>keine Verbindung zum Mailserver - bitte nochmal versuchen";
    }
/********** sending mail end **********/
/********** displaying mailed data begin **********/
  echo '<p>'.mi18n("output form following information was mailed").'</p>';
  echo $success_info; // build within checking for errors section
/********** displaying mailed data end **********/
  }
/*############################################*/
/*########## sending mail and displaying mailed data end ##########*/
/*############################################*/
?>
CSS

Code: Alles auswählen

div.box_form {
margin-top: 2em;
clear: both;
}
div.box_form_row {
clear: both;
}
div.box_form_row_s1_z1_ueb {
float: left;
width: 40%;
color: #484903;
font-weight: 900;
}
div.box_form_row_s1_zx_ueb {
float: left;
width: 40%;
border-top: 1px solid #e6e6e6;
color: #484903;
font-weight: 900;
}
div.box_form_row_s1_zende_ueb {
float: left;
width: 40%;
border-top: 1px solid #e6e6e6;
color: #484903;
font-weight: 900;
}
div.box_form_data {
float: left;
width: 60%;
}
div.box_form_row_separator {
width: 100%;
border-top: 1px solid #e6e6e6;
color: #484903;
font-weight: 900;
}
div.box_success_info {
margin-top: 2em;
clear: both;
}
div.box_success_info_row {
clear: both;
}
div.box_success_info_row_s1_z1_ueb {
float: left;
width: 40%;
color: #484903;
font-weight: 900;
}
div.box_success_info_row_s1_zx_ueb {
float: left;
width: 40%;
border-top: 1px solid #e6e6e6;
color: #484903;
font-weight: 900;
}
div.box_success_info_row_s1_zende_ueb {
float: left;
width: 40%;
border-top: 1px solid #e6e6e6;
color: #484903;
font-weight: 900;
}
div.box_success_info_data {
float: left;
width: 60%;
}
div.box_success_info_row_separator {
width: 100%;
border-top: 1px solid #e6e6e6;
color: #484903;
font-weight: 900;
}

img.countcha {
height: 2em;
width: auto;
margin-right: 0.1em;
}
input.text {
width: 90%;
border: 1px solid #e6e6e6;
background-color: #e6e6e6;
}
textarea.textarea {
width: 100%;
border: 1px solid #e6e6e6;
background-color: #e6e6e6;
}
input.submit {
margin-top: 1em;
padding: 0.5em;
border: 1px solid #484903;
background-color: #ffffff;
color: #484903;
text-decoration: none;
transition: 1s;
}
input.submit:hover {
margin-top: 1em;
background-color: #484903;
color: #ffffff;
cursor: pointer;
transition: 1s;
}
div.formular_anti_spam {
}
p.formular_fehlermeldungen,
ul.formular_fehlermeldungen {
color: #ff0000;
}
p.hint_mandatory_fields {
}
span.formular_allowed_filetypes {
padding: 1px;
}
p.formular_hinweis,
span.formular_hinweis {
font-size: 0.9em;
font-weight: normal;
}
.nowrap {
white-space: nowrap;
}
@media only screen and (max-width: 39em) {
div.box_form_row_s1_z1_ueb,
div.box_form_row_s1_zx_ueb,
div.box_form_row_s1_zende_ueb,
div.box_form_data {
width: 100%;
}
}
lang_de_DE.txt

Code: Alles auswählen

input anti_spam active=Spamschutz aktivieren?
input attachment allowed=Dateianhang erlauben?
input email subject=eMail-Betreff
input email subject hint=Betreff
input email subject variables=Variablen im Betreff
input email subject variables hint=Variablen aus Formularfeldern eintragen und mit ### voneinander trennen. Beispiel:
input examples=Komplettes Beispielformular
input explanations=Erläuterungen
input filesize max=Maximale Dateigröße
input filesize max hint=(in Bytes, 1MB\=1000000 Bytes)
input form fields=Formularfelder
input please save content in case of accidentally deleting it=Tipp: Sichern Sie den Inhalt dieses Feldes z. B. in einer Textdatei um im Falle eines unbeabsichtigten Löschens das Formular wieder herstellen zu können.
input recipients=eMail-Adressen Empfänger
input recipients hint=weitere Empfänger
no=nein
output em amount of countchas not correct=Sie haben die Frage zum Spamschutz nicht korrekt beantwortet.
output em filesize too big=Der Dateianhang ist zu groß.
output em filetype not allowed=Das Format des Dateianhangs ist nicht erlaubt.
output em there are errors=Beim Absenden des Formulars sind Fehler aufgetreten:
output email female=Frau
output email male=Herr
output form * fields have to be filled=* Pflichtfelder
output form anti_spam_hint_1=Wie viele
output form anti_spam_hint_2=sehen Sie?
output form countcha 1 name=Punkte
output form countcha 2 name=Quadrate
output form countcha 3 name=Dreiecke
output form following information was mailed=Vielen Dank für Ihre Nachricht.
output form send=Abschicken
yes=ja
:D

EDIT 02.03.2017: Umstellung der Formulardarstellung und Zusammenfassung nach dem Absenden von einer Tabelle auf ein DIV-Konstrukt, was zu einer erheblich besseren Responsivität führt. Anpassungen hierzu sind in der Modul-Ausgabe und der CSS-Datei erfolgt.
EDIT 01.03.2017: Probleme beim Versand von Mais mit Dateianhang per mail() behoben, indem der Aufbau der Mail-Header neu strukturiert und Buffering genutzt wurde. Zusätzlich wird jetzt auch eine reine plain-text Version der Mail erzeugt.
EDIT 01.02.2017: Einige Hoster erlauben den Versand von Mails nur dann, wenn die Absenderadresse auf dem gleichen Server gehostet wird. Sollte beim Versenden von Mails die Info "Keine Verbindung zum Mailserver" erscheinen, kann es hieran liegen. In diesem Fall im Output unter "settings" die entsprechenden Angaben machen, damit die ggf. per Formular vom Seitenbesucher angegebene Mailadresse und der Name ersetzt werden.
EDIT 25.07.2016: Es können jetzt Inhalte von Formularfeldern auch im Betreff eingebunden werden.
EDIT 04.03.2016: Es können jetzt Separatoren bzw. Zwischenüberschriften verwendet werden um das Formular zu unterteilen.
Zuletzt geändert von McHubi am Do 2. Mär 2017, 20:49, insgesamt 18-mal geändert.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Die NEUAUFLAGE des Buchs zur Version 4.9: CONTENIDO für Einsteiger (4.9)

egon2358
Beiträge: 10
Registriert: Do 17. Jan 2013, 00:31
Kontaktdaten:

Re: Formulargenerator

Beitrag von egon2358 » Mi 15. Okt 2014, 16:21

Also ersteinmal ein dickes Lob an dich, ein ziemlich coole Umsetzung die dir da gelungen ist. Mir gehts nämlich genauso. Ich denke es wird noch etwas Zeit brauchen bis PIFA reibungslos funktioniert. Deshalb habe ich deine Variante glattweg probiert aber jedoch nicht zum laufen bekommen (Backend und Frontend funktionieren Einwandfrei - bei der Übertragung hängt es leider :(.

"keine Verbindung zum Mailserver - bitte nochmal versuchen
keine Verbindung zum Mailserver - bitte nochmal versuchen

Vielen Dank für Ihre Nachricht. Folgende Informationen wurden übermittelt."


Ich würde ja sagen es hängt an phpmailer jedoch bekomme ich das nicht zusammen.. wo genau kann ich das umstellen? :

# ggf. Umstellung von mail() auf smtp im Bereich ***** sending mail and displaying mailed data begin ***** der Modul-Ausgabe

Ich weiß momentan nicht weiter.

Vielleicht hast du ja eine Idee bzw ähnliche Fehler bei der Entwicklung gehabt.
Wenn du/mir jemand helfen könnte(st) wäre das super. :)

Viele Grüße und weiter so!

egon2358

McHubi
Beiträge: 959
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Formulargenerator

Beitrag von McHubi » Mi 15. Okt 2014, 17:05

Hallo egon 2358,

Danke für Dein Lob :D
Schau mal in der Konfiguration, ob Du eine E-Mail Adresse für den Empfänger eingetragen hast. Wenn die fehlt, kommt nämlich genau diese Fehlermeldung. Wäre die simpelste Ursache...

VG,

Markus
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Die NEUAUFLAGE des Buchs zur Version 4.9: CONTENIDO für Einsteiger (4.9)

egon2358
Beiträge: 10
Registriert: Do 17. Jan 2013, 00:31
Kontaktdaten:

Re: Formulargenerator

Beitrag von egon2358 » Do 16. Okt 2014, 11:45

Hallo Markus,

danke für deine schnelle Antwort. Ich habe soweit alles korrekt ausgefüllt. Artikelkonfiguration und Kategoriekonfiguration.
Ich habe probehalber die Empfängeremailadresse fix ins Modul geschrieben - hat leider auch nichts bewirkt.

Um zu testen ob es an einer Systemeinstellung liegt habe ich eine Neuinstallation von Contenido mit Beispielmodulen und -inhalten durchgeführt und dein Modul nach Anleitung installiert. Leider das gleiche Ergebnis :-(.

Liegt es eventuell an der Version 4.9.4 bzw in welcher Version hast du das Modul entwickelt?

Fällt dir vielleicht noch etwas ein? Danke für deine Engagement.

Viele Grüße

egon

McHubi
Beiträge: 959
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Formulargenerator

Beitrag von McHubi » Do 16. Okt 2014, 20:28

Habe das Modul in mehreren 4.9.4er am Laufen. Sowohl auf Apache, Windows Server und auch unter xampp. Läuft einwandfrei. Klappen denn andere Kontaktformulare die mail() nutzen bei Dir?
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Die NEUAUFLAGE des Buchs zur Version 4.9: CONTENIDO für Einsteiger (4.9)

egon2358
Beiträge: 10
Registriert: Do 17. Jan 2013, 00:31
Kontaktdaten:

Re: Formulargenerator

Beitrag von egon2358 » Fr 17. Okt 2014, 09:50

Ich habe dieses Modul in der gleichen Vorlage eingebunden und es funktioniert sehr gut:
http://www.dfabig.de/de/download/conten ... enido.html
siehe auch: http://forum.contenido.org/viewtopic.ph ... df_kontakt

hier ein Auszug aus dem df_kontakt modul

Code: Alles auswählen

        $mail_body .= '</table></bo'.'dy></html>';
        $mail->Host = "localhost";
        $mail->IsHTML(true);
                $mail->CharSet = "utf-8";

        #Get mailer from settings
        switch (strtolower("CMS_VALUE[4]")) {
            case "smtp" :
                $mail->IsSMTP();
                $host = "CMS_VALUE[5]";
                $user = "CMS_VALUE[6]";
                $password = "CMS_VALUE[7]";
                if (($host != '') && ($user != '') && ($password != '')) {
                    $mail-> $SMTPAuth = true;
                    $mail->Host = $host;
                    $mail->Username = $user;
                    $mail->Password = $password;
                }
                break;
            case "mail" :
                $mail->IsMail();
                break;
            case "sendmail" :
                $mail->IsSendmail();
                break;
            case "qmail" :
                $mail->IsQmail();
                break;
            default :
                }
        $mail->From = "CMS_VALUE[0]";
        $mail->FromName = "CMS_VALUE[2]";
        $mail->AddAddress("CMS_VALUE[1]", "");
                $mail->AddReplyTo($reply_to, "");
        $mail->Subject = "CMS_VALUE[3]";
        $mail->Body = $mail_body;
        $mail->WordWrap = 50;
        $mail->Send();
Könnte aber auch nur daran liegen das es grundlegend von der 4.8.x stammt und noch die alte class.phpmailer.php verwendet...

Das Standard Kontaktmodul welches mit der Erstinstallation von Contenido 4.9.4 mitgegeben wird funktioniert bei mir nämlich auch nicht.
Ich bekomme folgende Fehlermeldung:

Mandatenmail-Fehler: E-Mail konnte nicht versendet werden
Systemmail-Fehler: E-Mail konnte nicht versendet werden


Ziemlich blöd :? ..

Leider habe ich momentan keine andere Serverumgebung für einen weiteren Test zur Verfügung.

Gruß egon

McHubi
Beiträge: 959
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Formulargenerator

Beitrag von McHubi » Fr 17. Okt 2014, 19:46

Das Standard Kontaktmodul welches mit der Erstinstallation von Contenido 4.9.4 mitgegeben wird funktioniert bei mir nämlich auch nicht.
Hm. Dann scheint irgendwo grundlegend was zu haken. Hast Du Deinen Hoster mal gefragt?
Beim Standardkontaktformular kann es sein, dass Du hierfür unter "Administration -> System" smtp Daten eintragen musst.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Die NEUAUFLAGE des Buchs zur Version 4.9: CONTENIDO für Einsteiger (4.9)

egon2358
Beiträge: 10
Registriert: Do 17. Jan 2013, 00:31
Kontaktdaten:

Re: Formulargenerator

Beitrag von egon2358 » Mo 20. Okt 2014, 11:38

Hey Markus,

smpt ist eingetragen. Artikel- und Kategorieeinstellungen sind eingetragen. Kontaktformular funktioniert.
Im Backend werden Emails auch richtig geloggt inklusive Empfänger, Absender und alles drum und dran.
Auch in der Contenido Administration -> Systemintegrität ist alles im grünen Bereich.

Nach Abesenden der Daten im Formular kommt folgende Meldung im Backend System[Error] Log:

Code: Alles auswählen

[2014-10-20 11:24:30] [   ERR    ] Mandatenmail-Fehler: E-Mail konnte nicht versendet werden<br>Systemmail-Fehler: E-Mail konnte nicht versendet werden
[2014-10-20 11:24:30] [   ERR    ] #0 /is/htdocs/server/www/test/contenido/plugins/form_assistant/classes/class.pifa.abstract_form_processor.php(164): MailedFormProcessor->_processStoredData()
#1 /is/htdocs/server/www/test/contenido/plugins/form_assistant/extensions/class.pifa.default_form_module.php(101): PifaAbstractFormProcessor->process()
#2 /is/htdocs/server/www/test/contenido/plugins/form_assistant/classes/class.pifa.abstract_form_module.php(197): DefaultFormModule->doPost()
#3 /is/htdocs/server/www/test/contenido/plugins/form_assistant/classes/class.content.type.pifa_form.php(742): PifaAbstractFormModule->render(true)
#4 /is/htdocs/server/www/test/contenido/includes/frontend/include.front_content.php(657) : eval()'d code(796): cContentTypePifaForm->buildCode()
#5 /is/htdocs/server/www/test/contenido/includes/frontend/include.front_content.php(657): eval()
#6 /is/htdocs/server/www/test/cms/front_content.php(57): include('/is/htdocs/wp11...')
#7 {main}
[20-Oct-2014 11:24:30 Europe/Berlin] PHP Warning:  in_array() expects parameter 2 to be array, null given in /is/htdocs/server/www/test/contenido/includes/frontend/include.front_content.php(657) : eval()'d code on line 1297
[20-Oct-2014 11:24:30 Europe/Berlin] PHP Warning:  in_array() expects parameter 2 to be array, null given in /is/htdocs/server/www/test/contenido/includes/frontend/include.front_content.php(657) : eval()'d code on line 1297
[20-Oct-2014 11:24:30 Europe/Berlin] PHP Warning:  in_array() expects parameter 2 to be array, null given in /is/htdocs/server/www/test/contenido/includes/frontend/include.front_content.php(657) : eval()'d code on line 1297
[20-Oct-2014 11:24:30 Europe/Berlin] PHP Warning:  in_array() expects parameter 2 to be array, null given in /is/htdocs/server/www/test/contenido/includes/frontend/include.front_content.php(657) : eval()'d code on line 1297
[20-Oct-2014 11:24:30 Europe/Berlin] PHP Warning:  in_array() expects parameter 2 to be array, null given in /is/htdocs/server/www/test/contenido/includes/frontend/include.front_content.php(657) : eval()'d code on line 1297
leider bringt mich das kein Stück weiter..

Hm, es scheint wohl wirklich ein grundlegendes Problem der Serverumgebung zu sein (verwende HostEuropeWebpack)
Vielleicht sollte das Thema in ein anderen Thread verschoben werden? :|

VG egon



*Nachtrag*

Habe gerade mit einer Serverumgebung bei STRATO getestet.. und es funktioniert..

Mögliches Host Europe Problem?:
http://codehelper.de/php-mail-funktioni ... et-from-f/

stiwep
Beiträge: 10
Registriert: Sa 26. Mär 2011, 10:54
Kontaktdaten:

Re: Formulargenerator

Beitrag von stiwep » Fr 9. Jan 2015, 11:10

Leider funktioniert bei mir der Versand nicht wenn "###type_select_multi" in der Vorlage vorhanden ist. Obwohl es nicht als Pflichfeld gekennzeichnet wird und auch eine Auswahl vorhanden ist kommt der Hinweis siehe Bild
Dateianhänge
versenden geht nicht_vorlage.png
(54.64 KiB) Noch nie heruntergeladen
versenden geht nicht_formular.png
(40.46 KiB) Noch nie heruntergeladen

McHubi
Beiträge: 959
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Formulargenerator

Beitrag von McHubi » Fr 9. Jan 2015, 13:29

Hallo stiwep,

ich kann so auf die Schnelle keinen Fehler entdecken. Habe Dein Mulit-Select nachgebaut und bei mir funktiniert das tadellos. Anscheinend wird bei Dir entweder kein Feldinhalt übermittelt oder es hakt bei der Fehlerprüfung. In der Modulkonfiguration findest Du ja ein Komplettbeispiel mit allen Formularfeld-Varianten, u. a. auch Multi-Select. Wenn Du diesen Beispiel-Code verwendest, wird dann das Formular versendet?

Wenn ja, bau Dein Multi-Selectfeld mal Stück für Stück auf. Evtl. ist da in einer Zeile was nicht okay.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Die NEUAUFLAGE des Buchs zur Version 4.9: CONTENIDO für Einsteiger (4.9)

stiwep
Beiträge: 10
Registriert: Sa 26. Mär 2011, 10:54
Kontaktdaten:

Re: Formulargenerator

Beitrag von stiwep » Fr 9. Jan 2015, 15:18

Danke für die schnelle Antwort. Der Fehler liegt im Ausgabemodul das im Downloadbereich zum Buch angeboten wird. Wenn der Ausgabecode von dieser Webseite verwendet wird funktioniert das ganze Modul wunderbar.

stiwep

McHubi
Beiträge: 959
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Formulargenerator

Beitrag von McHubi » So 11. Jan 2015, 15:50

Der Fehler liegt im Ausgabemodul das im Downloadbereich zum Buch angeboten wird.
Hallo stiwep,

Schande auf mein Haupt! :wink: Ja, da gab es einen kleinen, aber feinen Unterschied.
Code-Teil des Outputs hier im Forum:

Code: Alles auswählen

  // PASSWORD
  if($field[1]=="type_password" AND $field[2]=="true")
    {
    if(${'value_'.$field[0]}=="")
      {
      $array_errors[]=$field[3];
      $string_error_ids.=$field[0].';';
      }
   if(!empty(${'value_'.$field[0]}))
          {
        if(strlen(${'value_'.$field[0]}) < 6)
             {
             $array_errors[]=$field[3];
          $string_error_ids.=$field[0].';';
             }
          }
   }
Und bisher im Modul zum Download:

Code: Alles auswählen

  // PASSWORD //
  if($field[1]=="type_password" AND $field[2]=="true")
    {
	if(${'value_'.$field[0]}=="")
      {
	  $array_errors[]=$field[3];
	  $string_error_ids.=$field[0].';';
	  }
	}
  if(!empty(${'value_'.$field[0]}))
    { 
	if(strlen(${'value_'.$field[0]}) < 6)
      { 
      $array_errors[]=$field[3];
	  $string_error_ids.=$field[0].';';
      } 
    }
Die !empty-Bedingung war nicht an das Feld Passwort geknüpft.

Der Code-Teil zum Passwort-Feld im Forum funktionierte zwar, hatte allerdings auch einen kleinen Bug: Die Fehlerprüfung wenn Inhalte eingetragen werden, wurde nur durchgeführt, wenn es ein Pflichtfeld ist. Insofern habe ich den Teil im Output-Code des ersten Post dieses Themas ganz oben ebenfalls angepasst auf:

Code: Alles auswählen

  // PASSWORD
  if($field[1]=="type_password" AND $field[2]=="true")
    {
    if(${'value_'.$field[0]}=="")
      {
      $array_errors[]=$field[3];
      $string_error_ids.=$field[0].';';
      }
	}
   if($field[1]=="type_password")
     {
     if(!empty(${'value_'.$field[0]}))
       {
       if(strlen(${'value_'.$field[0]}) < 6)
         {
         $array_errors[]=$field[3];
         $string_error_ids.=$field[0].';';
         }
       }
     }
Die zip-Datei im Download-Bereich für das Buch ist jetzt natürlich ebenfalls auf dem neuesten Stand. Danke nochmal für den Hinweis. :D
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Die NEUAUFLAGE des Buchs zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Horst1234
Beiträge: 301
Registriert: Sa 25. Okt 2008, 12:45
Wohnort: Bremen
Kontaktdaten:

Re: Formulargenerator

Beitrag von Horst1234 » Do 19. Feb 2015, 11:27

Hallo Markus,
das Modul läuft wunderbar in 4.9.4, merci.
Nur mit den Captchas komme ich nicht klar: das muss ich wohl drei verschiedene png's erstellen,
nur wie zählt denn der Captcha-"Kontrolleur" hinterher zusammen?
Oder magst du ein Beispiel für die drei png's posten?
Grüße aus Bremen,
Horst
Webdesign | Contenido: Templateprogrammierung, Einrichtung und Verwaltung | http://www.w2media.de

McHubi
Beiträge: 959
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Formulargenerator

Beitrag von McHubi » Do 19. Feb 2015, 13:37

Hallo Horst,

Du bekommst einfach drei Symbole eingeblendet in unterschiedlicher - bei jedem Seitenaufbau neu und zufällig zusammengestellter - Anzahl. Dann wird die Frage gestellt, wie oft eines der Symbole vorkommt. Das war es auch schon. Wenn Du keine Symbole verwenden willst - die evtl. irgendwann mal von Spambots erkannt werden könnten - verwendest Du einfach kleine Fotos. Eine "Speicherkarte" oder "Objektiv" sind schwerer zu erkennen - aber nur für Bots, einem Menschen fällt das ebenso leicht wie die Erkennung eines Symbols. :wink:
Dateianhänge
countcha_3.png
countcha_3.png (2.94 KiB) 4895 mal betrachtet
countcha_2.png
countcha_2.png (2.89 KiB) 4895 mal betrachtet
countcha_1.png
countcha_1.png (3.01 KiB) 4895 mal betrachtet
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Die NEUAUFLAGE des Buchs zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Horst1234
Beiträge: 301
Registriert: Sa 25. Okt 2008, 12:45
Wohnort: Bremen
Kontaktdaten:

Re: Formulargenerator

Beitrag von Horst1234 » Do 19. Feb 2015, 15:08

Hallo Markus,
wundebar, hab ich verstanden, danke.
gibt es noch die Möglichkeit, eine weitere Mail (Bestätigungsmail) an die Adresse zu senden, die unter type="email" eingegeben wurde?
Grüße aus Bremen,
Horst
Webdesign | Contenido: Templateprogrammierung, Einrichtung und Verwaltung | http://www.w2media.de

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast