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.
<?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;
}
?>