We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 29781
    • 25 Posts
    Until now I used in my website which is at the moment being ported to MODx a php contact form. This form is based on two php-files: formmailer.php with the form itself and global_vars with the variables. The form-script uses a xhtml-template and includes the form-template and after sucessfully submitting the contact message a thank-you-page via php-include. I would like to use this form rather than using eform or SPForm because this form has worked for many months without having let passed any single spam-mail and I think that the concept of the confirmation-step before sending the message to prevent automatic submitting is a simpler and better way to protect the form against spammers than a captcha.

    I tried to put the php-form in a snippet, but was not able to get it to run.
    My problem is that I have little to no knowledge of php and am not able to change the php-variables to MODx.

    I would appreciate it if someone could tell me if it is possible to use this formmailer with MODx and if yes how to change this formmailer to be usable in MODx. Explanation in an easy-to-understand way would be great.


    formmailer.php:

    <?PHP
    
    header('content-type: text/html; charset=utf-8'); 
    
    # Dieses Skript liest eine XHTML-Template Datei ein und generiert den Inhalt aus 
    
    # dem Formulartemplate. Je nach Benutzereingaben werden verschiedenen Fälle unter-
    
    # schieden, denen dann entsprechende Ausgaben zugeordnet werden. Bis alle Angaben
    
    # gemacht wurden, und wenigstens eine Vorschau erfolgte, wird das Formular erneut
    
    # ausgegeben. Bei korrekten Angaben und erfolgter Vorschau erfolgt der Versand der
    
    # e-mail und die Dankesseite wird ausgegeben.
    
    
    
    #  Skriptteil, ändern auf eigene Gefahr!                                          #
    
    $pfad = str_replace($_SERVER['DOCUMENT_ROOT'], "", dirname($_SERVER['SCRIPT_FILENAME']));
    
    require_once ($_SERVER['DOCUMENT_ROOT'].$pfad."/global_vars.php");
    
    $page = get_html_template ();
    
    if (!empty($_POST['falle'])) {
    
      $content = "<h3>Spamfalle wurde ausgefüllt</h3>\n
    
      <p>Bitte die Seite erneut aufrufen</p>";
    
      $page = page_replace_var($page, "content", $content);
    
      show_page();
    
      exit;
    
    }
    
    if (empty($_POST['confirm'])) {
    
      create_form("standard", "standard", "standard", "standard", "standard", "undone");
    
    }
    
    if (empty($_POST['nachname'])) {
    
      $error_msg[] = $kontakt_vars["error_no_nachname"];
    
      $case_nachname = "error";
    
    }  else {
    
      $case_nachname = "standard";
    
    }
    
    if (empty($_POST['telefon'])) {
    
      $error_msg[] = $kontakt_vars["error_no_telefon"];
    
      $case_telefon = "error";
    
    }  else {
    
      $case_telefon = "standard";
    
    }
    
    if (!preg_match("#^[a-zA-Z0-9\.\-_\+]{1,40}@[a-zA-Z0-9\.\-_]{1,40}\.[a-zA-Z0-9\.\-_]{1,6}$#", $_POST['mail_from'])) {
    
      $error_msg[] = $kontakt_vars["error_no_mail_from"];
    
      $case_mail = "error";
    
    }  else {
    
      $case_mail = "standard";
    
    }
    
    if (strlen($_POST['message']) < 10) {
    
      $error_msg[] = $kontakt_vars["error_no_message"];
    
      $case_message = "error";
    
    } else {
    
      $case_message = "standard";
    
    }
    
    if (isset($error_msg)) {
    
      foreach ($error_msg as $f) {
    
        $kontakt_vars["error_legend_text"] .= "\n\t $f <br />";
    
      }
    
      create_form("error", $case_nachname, $case_telefon, $case_mail, $case_message,"error");
    
    }
    
      
    
    if ( $_POST['confirm'] != "done") {
    
      create_form("confirm", "confirm", "confirm", "confirm", "confirm", "done");
    
    }  
    
    #Ab hier sind keine Fehler mehr in den Benutzereingaben -> Mail senden + Dankeseite ausgeben
    
      mail_and_thanks();
    
    
    
    /*##########################################################################
    
    #                      Funktionen                                          #
    
    ##########################################################################*/
    
    
    
    function get_html_template () {         #  Ausgabe des HTML Templates              #
    
      global $html_template_file;
    
      if(!file_exists($html_template_file)){
    
        echo "  <h3>Installationshinweis</h3>
    
        <p>Bevor Sie das Formular einsetzen, legen Sie bitte die HTML Template-Datei 
    
        <strong>$html_template_file</strong> an.</p>";
    
        exit;
    
      } else {
    
        $page = file_get_contents($html_template_file);
    
      }
    
      return ($page);
    
    }
    
    
    
    function create_form($case_form, $case_nachname, $case_telefon, $case_mail, $case_message, $kontakt_confirm) { #  Formularseite erstellen                 #
    
      global $page, $form_file, $kontakt_vars;
    
      if (isset($_POST)) {
    
        encode_postdata();
    
      }
    
      if(!file_exists($form_file)){
    
        $content = "  <h3>Installationshinweis</h3>
    
        <p>Bevor Sie das Formular einsetzen, legen Sie bitte die Form Template-Datei 
    
        <strong>$form_file</strong> an.</p>";
    
      } else {
    
        $content = file_get_contents($form_file);
    
        $content = page_replace_var($content, "title", $kontakt_vars[$case_form."_headline"]);
    
        $content = page_replace_var($content, "headline", $kontakt_vars[$case_form."_headline"]);
    
        $content = page_replace_var($content, "case", $case_form);
    
        $content = page_replace_var($content, "self", $_SERVER['PHP_SELF']);
    
        $content = page_replace_var($content, "legend", $kontakt_vars[$case_form."_legend"]);
    
        $content = page_replace_var($content, "confirm", $kontakt_confirm);
    
        $content = page_replace_var($content, "legend_text", $kontakt_vars[$case_form."_legend_text"]);
    
        $content = page_replace_var($content, "vorname", $_POST['vorname']);
    
        $content = page_replace_var($content, "nachname", $_POST['nachname']);
    
        $content = page_replace_var($content, "telefon", $_POST['telefon']);
    
        $content = page_replace_var($content, "mail_from", $_POST['mail_from']);
    
        $content = page_replace_var($content, "message", $_POST['message']);
    
        $content = page_replace_var($content, "kontakt", $kontakt_vars[$kontakt_confirm."_submit"]);
    
        $content = page_replace_var($content, "case_nachname", $case_nachname);
    
        $content = page_replace_var($content, "case_telefon", $case_telefon);
    
        $content = page_replace_var($content, "case_mail", $case_mail);
    
        $content = page_replace_var($content, "case_message", $case_message);
    
      }
    
      $page = page_replace_var($page, "content", $content);
    
      show_page();
    
      exit;
    
    }
    
    
    
    function mail_and_thanks(){         #  Mail Senden und Dankesseite ausgeben    #
    
      global $page, $kontakt_vars, $danke_file;
    
      decode_postdata();
    
    #                                                                    mail senden
    
      $headers = "From: {$_POST['vorname']} {$_POST['nachname']} ";
    
      $headers .= "<{$_POST['mail_from']}>\n";
    
      $headers .= "Content-Type: text/plain; charset=utf-8 \n";
    
      $headers .= "Content-Transfer-Encoding: 8bit";
    
      mail($kontakt_vars["mailto"], $kontakt_vars["subject"], "Von       : " . ($_POST['vorname']) . " " . ($_POST['nachname']) . "\r\n". "E-Mail    : " . ($_POST['mail_from']) . "\r\n" . "Telefon   : " . ($_POST['telefon']) . "\r\n\r\n" . ($_POST['message']), $headers);
    
    #                                                           Danke Seite Ausgeben
    
      $content = file_get_contents($danke_file);
    
      $page = page_replace_var($page, "title", "Danke");
    
      encode_postdata();
    
      set_br();
    
      $content = page_replace_var($content, "adress", $kontakt_vars['mailto']);
    
      $content = page_replace_var($content, "telefon", $_POST['telefon']);
    
      $content = page_replace_var($content, "mail_from", $_POST['mail_from']);
    
      $content = page_replace_var($content, "message", $_POST['message']);
    
      $page = page_replace_var($page, "content", $content);
    
      show_page();
    
      exit;
    
    }
    
    
    
    function encode_postdata() {            #  Codieren von Code in Benutzereingabe    #
    
      foreach ($_POST as $key => $wert) {
    
        if(get_magic_quotes_gpc()) {  // wenn magic_quotes an, dann strip slashes
    
          $_POST[$key] = stripslashes($_POST[$key]);
    
        }
    
        if ($key != "message") {
    
          $_POST[$key] = trim(strip_tags($_POST[$key]));
    
          $_POST[$key] = str_replace("\n", "", $_POST[$key]);
    
          $_POST[$key] = str_replace("\r", "", $_POST[$key]);
    
          $_POST[$key] = str_replace("\"", "``", $_POST[$key]);
    
          $_POST[$key] = str_replace("'", "`",  $_POST[$key]);
    
        }
    
        $_POST[$key] = trim(preg_replace("@content-type:|bcc:|cc:|to:|from:@im", " # verbotener Inhalt # ", $_POST[$key]));
    
        $_POST[$key] = htmlspecialchars($_POST[$key]);
    
      }
    
    }
    
    
    
    function decode_postdata() {            #  Decodieren von Code in Benutzereingabe  #
    
      foreach ($_POST as $key => $wert) {
    
        $_POST[$key] = (stripslashes(html_entity_decode($_POST[$key])));
    
      }
    
    }
    
    
    
    function set_br() {                     #  Breaklines setzen bei Dankeformular     #
    
       foreach ($_POST as $key => $wert) {
    
        $_POST[$key] = str_replace("\n", "\t<br />\n\t", $_POST[$key]);
    
      }
    
    }
    
    
    
    function page_replace_var($template_content, $name, $value) { #  [%name%] ersetzen #
    
      $pattern = "[%$name%]";
    
      return(str_replace($pattern, $value, $template_content));
    
    }
    
    
    
    function show_page() {                  #  Seite ausgeben                          #
    
      global $page;
    
      echo $page;
    
      exit;
    
    }
    
    
    
    ?>
    
    



    global_vars.php:

    <?PHP
    
    header('content-type: text/html; charset=utf-8'); 
    
    /*
    
    Diese Datei enthält alle nötigen Variablen im Array $kontakt_vars für den Formmailer. 
    
    Es gibt zumeist drei Arten von Schlüsseln in diesem Array:
    
    standard = Ausgaben für den ersten (standard) Fall
    
    error    = Ausgaben im Fall einer nicht erfolgten oder fehlerhaften Eingabe
    
    confirm  = Ausgaben für die Vorschau
    
    Die Ausgaben selbst sind im Arrayschlüssel:
    
    headline     = Überschrift der Seite
    
    legend       = Legendenüberschrift
    
    legend_text  = Text der in der Legende ausgegeben wird
    
    no_message   = Fehlermeldung wenn keine Nachricht eingegeben wurde
    
    no_mail_from = Fehlermeldung wenn keine Absenderadresse eingegeben wurde
    
    submit       = Text auf dem Submitbutton
    
    Daraus ergibt sich z.B. $kontakt_vars['error_legend_text'], welche den Text beinhaltet, 
    
    der im Falle einer fehlerhaften Eingabe in der Legende ausgegeben wird. Diese Texte 
    
    können den eigenen Wünschen angepasst werden. 
    
    Wichtig ist die Variable $kontakt_vars["mailto"]! Hier muss die Adresse angegeben
    
    werden, an die die E-Mail gesendet werden soll.
    
    */
    
    
    
    #  Konfigurations Teil                                                            #
    
    $kontakt_vars = array();
    
    $kontakt_vars["mailto"]            = "[email protected]";    # E_mail Empfänger
    
    $kontakt_vars["subject"]           = "Nachricht vom Homepage-Kontaktformular";      # Den gewünschten Betreff für die Mail eingeben
    
    $kontakt_vars["standard_headline"] = "Kontaktformular";
    
    $kontakt_vars["confirm_headline"]  = "Vorschau";
    
    $kontakt_vars["error_headline"]    = "Datenkorrektur";
    
    $kontakt_vars["standard_legend"]   = "Hinweis:";
    
    $kontakt_vars["confirm_legend"]    = "Datenbestätigung:";
    
    $kontakt_vars["error_legend"]      = "Eingabefehler:";
    
    $kontakt_vars["standard_legend_text"] = "Bitte alle mit <sup>*</sup> gekennzeichneten Felder ausfüllen.";
    
    $kontakt_vars["confirm_legend_text"]  = "Die Nachricht kann nun gesendet werden. Bitte 
    
      die Eingaben noch einmal überprüfen.<br />\n";
    
    $kontakt_vars["error_legend_text"]    = "Die Nachricht wurde aus folgendem Grund nicht gesendet:<br />";
    
    $kontakt_vars["error_no_nachname"]  = "Es wurde kein Nachname eingegeben.";
    
    $kontakt_vars["error_no_telefon"]   = "Es wurde keine Telefonnummer eingegeben.";
    
    $kontakt_vars["error_no_mail_from"] = "Es wurde keine gültige E-Mail Adresse eingegeben.";
    
    $kontakt_vars["error_no_message"]   = "Der Nachrichtentext ist leer oder zu kurz.";
    
    $kontakt_vars["undone_submit"]      = "Weiter";
    
    $kontakt_vars["done_submit"]        = "Senden";
    
    $kontakt_vars["error_submit"]       = "Weiter";
    
    
    
    # Include Pfade - !nicht ändern!                                                   #
    
    $pfad                = str_replace($_SERVER['DOCUMENT_ROOT'], "", dirname($_SERVER['SCRIPT_FILENAME']));
    
    $html_template_file  = $_SERVER['DOCUMENT_ROOT'].$pfad."/templates/page.html";
    
    $form_file           = $_SERVER['DOCUMENT_ROOT'].$pfad."/templates/feedback.inc";
    
    $danke_file          = $_SERVER['DOCUMENT_ROOT'].$pfad."/templates/danke.inc";
    
    ?>



    feedback.inc:

    <h2 class="[%case%]">[%headline%]</h2>
    
    <form class="yform" action="" method="post">
    
    	<fieldset>
    
    		<legend class="[%case%]">[%legend%]</legend>
    
    		<p class="message [%case%]">[%legend_text%]</p>
    
    		<input type="hidden" name="confirm" value="[%confirm%]" />
    
    		<p style="position:absolute; top:-5000px; color:#F00;">
    
    		<label for="falle"><strong>Spamfalle! Nichts eintragen! </strong></label>
    
    		<input id="falle" type="text" title="FREILASSEN!" style="width:0.5em;" name="falle" value="" /></p>
    
    		<div class="type-text">
    
    			<label for="vorname">Vorname </label>
    
    			<input type="text" size="20" id="vorname" name="vorname" value="[%vorname%]" maxlength="30" />
    
    		</div>
    
    		<div class="type-text [%case_nachname%]">
    
    			<label for="nachname">Nachname <sup title="Pflichtfeld">*</sup></label>
    
    			<input type="text" size="20" id="nachname" name="nachname" value="[%nachname%]" maxlength="30" />
    
    		</div>
    
    		<div class="type-text [%case_telefon%]">
    
    			<label for="telefon">Telefon <sup title="Pflichtfeld">*</sup></label>
    
    			<input type="text" size="20" id="telefon" name="telefon" value="[%telefon%]" maxlength="20" />
    
    		</div>
    
    		<div class="type-text [%case_mail%]">
    
    			<label for="mail_from">E-Mail <sup title="Pflichtfeld">*</sup></label>
    
    			<input type="text" size="20" id="mail_from" name="mail_from" value="[%mail_from%]" maxlength="60"/>
    
    		</div>
    
    		<div class="type-text [%case_message%]">
    
    			<label for="message">Nachricht <sup title="Pflichtfeld">*</sup></label>
    
    			<textarea rows="7" cols="30" id="message" name="message">[%message%]</textarea>
    
    		</div>
    
    	</fieldset>
    
    	<div class="type-button">
    
    		<input type="submit" name="kontakt" id="kontakt" value="[%kontakt%]"/>
    
    	</div>
    
    </form>
    
    


    danke.inc:

        <h2>Danke</h2>
    
        <p>Ihre Nachricht mit dem Inhalt: </p><blockquote>[%message%]</blockquote><p> wurde erfolgreich gesendet.
    
        Wir werden uns über die genannte Adresse </p><blockquote>[%mail_from%]</blockquote><p> bzw. Telefon Nr.</p>
    
        <blockquote> [%telefon%]</blockquote><p> schnellstmöglich mit Ihnen in Verbindung setzen.</p>