[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • Kontaktformular - valide, weitgehend barrierefrei
Seite 1 von 2

Kontaktformular - valide, weitgehend barrierefrei

Verfasst: 15. Jul 2005, 15:48
von blubb
Hi Leute,

hier mal ein Vorschlag für ein Kontaktformular:
  • mit XHTML-validem Code
    ohne Javascript
    tabellenfrei
    Layout komplett über CSS anpassbar
    von einer Blinden mit Screenreader getestet und für gut befunden
    Schutz vor SQL-Injection und Cross-Site-Scripting
    komplett im Modul gekapselt, also unabhängig von Core-Änderungen
    Danke-, Fehlermeldungen und Formular-Beschriftung über Config-Bereich steuerbar
neues Modul erzeugen und in Artikel einbinden:

Nachtrag:
auf Nachrage von Carsten: Code ins Ausgabefeld einfügen

Nachtrag: habe in Redaxo 2.7, 3.0 und 3.1 getestet (jeweils die stable-Version, keine vom svn-Server!): funktioniert einwandfrei!

Nachtrag 08.12.2005: die neueste Version ist ab jetzt in der Modulsammlung zu finden: http://www.redaxo.de/165-Moduldetails.html?module_id=57

Code: Alles auswählen

<?php
	
// ============== Form config ==============
// Daten für die Ausgabe der Fehlermeldung, 
// Überschrift, Legend, Beschreibung, Feldnamen, "Submit"-Button

	$page_info = "";
	$hack_meldung = "Leider konnten wir Ihre Anfrage nicht bearbeiten, weil das Formular nicht korrekt ausgefüllt ist. Bitte überprüfen Sie folgendes Eingabefeld:";
	
	//Formular
	$formular_legend = "";
	$formular_info = "";
	$formular_name = "Name";
	$formular_email = "eMail";
	$formular_meldung = "Ihre Nachricht";
	$submit_value = "Senden";
	$submit_titel = "Zum Absenden bitte nur 1x klicken";
	
	// Danke-Seite
	$danke_meldung = "Vielen Dank für Ihre Nachricht. Sie wurde soeben erfolgreich versendet. Wir werden uns in Kürze bei Ihnen melden.";
	
	// Empfänger E-Mail
	$empfaenger="info@xxx.com";
	$email_titel="Anfrage an xxx";
	
// ============== Ende Form config ==============

// Daten aus Form config konvertieren
    function clean_text($value = "") 
    {
        $value = htmlentities($value);
        return $value;
	}

    $page_info = clean_text($page_info);
	$hack_meldung = clean_text($hack_meldung);
	$formular_legend = clean_text($formular_legend);
	$formular_name = clean_text($formular_name);
	$formular_email = clean_text($formular_email);
	$formular_meldung = clean_text($formular_meldung);
	$submit_value = clean_text($submit_value);
	$submit_titel = clean_text($submit_titel);
	$danke_meldung = clean_text($danke_meldung);
	
// ============== Formularüberprüfung ==============

function cleanup ($string) {
	// falls magic quotes on
	if (get_magic_quotes_gpc()) 
	{
    	$string = stripslashes($string);
    }
	$string = addslashes($string); 
    $string = strip_tags($string);
    // "--","#";";","`","/"	Ausfiltern von SQL-Statements
 	$string = str_replace(array("--","- -","#",";","`","/","<",">","{","}","[","]"),array("","","","","","","","","","","",""),$string);
	// - mit Leerzeichen dazwischen (SQL-Kommentare!)
 	$string = preg_replace('#-\s+-#i',"",$string);
    return $string;
} // end function cleanup

function checkName ($string) {
// $name am Anfang Buchstabe; keine Zahlen und Nicht-Wortzeichen; dann
// beliebig viele Buchstaben, Bindestriche, Leerzeichen und Punkte
    if (preg_match("/^[^\W\d_]([^\W\d_]|[\-\'\s\.\ä\ö\ü\Ä\Ö\Ü\ß])*$/", stripslashes($string)))
    {
	    return true; // OK
	}
	else
	{
	    return false; // falsche Eingabe
	}	
} // end function checkName

function checkNumeric ($string) {
// nur Zahlenr
    if (preg_match("/^\d*$/", stripslashes($string)))
    {
	    return true; // OK
	}
	else
	{
	    return false; // falsche Eingabe
	}	
} // end function checkNumeric

function checkEmail ($string) {
// $email mindestens a@a.aa
    if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([_a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", stripslashes($string)))
    {
	    return true; // OK
	}
	else
	{
	    return false; // falsche Eingabe
	}	
} // end function checkEmail

function checkMessage ($string) {
// 
    if (preg_match("/^[^\d_]([^\W]|[\-\'\s\"\.\!\?\;\,\:\€\%\(\)\+\=\@\*\ä\ö\ü\Ä\Ö\Ü\ß])*$/", stripslashes($string)))
    {
	    return true; // OK
	}
	else
	{
	    return false; // falsche Eingabe
	}	
} // end function checkMessage


	$hack = false;  // Bool'sche Variable zeigt an, ob
                    // ein Hackingversuch vorliegt
                    	
	// Auslesen und Säubern der Daten aus $_POST
	if (sizeof($_POST) == 0) 
	{
        $name = "";
        $email = "";
        $message = "";
        $submit = "";
    }
    else
    {
		$name = $_POST["name"];		
    	$email = $_POST["email"];
    	$message = $_POST["message"];
    	$submit = $_POST["submit"];
    	
    	$name = cleanup($name);
    	$email = cleanup($email);
    	$message = cleanup($message);
    	$submit = cleanup($submit);
	
    	// Verifizieren der Daten

    	if (checkName($name)!=1)
		{
			$hack = true; $feld = $formular_name;
		}

		if (checkEmail($email)!=1)
		{
			$hack = true; $feld = $formular_email;
		}

		if (checkMessage($message)!=1)
		{
			$hack = true; $feld = $formular_meldung;
		}
		
	} // end else

// ============== Ende Formularüberprüfung ==============


// beim ersten Aufruf oder unkorrekten Eingaben Formular ausgeben
if (($submit == "") OR (($submit == $submit_value) AND ($hack == true)))
{
	
	// Bei inkorrekten Eingaben eine Fehlermeldung ausgeben:
	if ($hack) 
	{
?>
<p><?php echo $hack_meldung; ?></p>
<ul>
<li><?php echo $feld; ?></li>
</ul>
<?php
	} // end if ($hack)
	else 
	{
		if ($page_info != "")
		{
			echo "<p>" . $page_info . "</p>\n";
		}

	} // end else
	
?>

<div id="formwrap">
<div id="form">

<form id="kontakt" method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
<fieldset>
<?php
	echo "<legend><strong>" . $formular_legend . "</strong></legend>\n";
?>

<label for="name"><strong><?php echo $formular_name; ?></strong></label><br />
<input class="inpt" type="text" id="name" name="name" size="38" title="<?php echo $formular_name; ?>" value="<?php echo stripslashes($name); ?>" tabindex="1" /><br /><br />

<label for="email"><strong><span lang="en"><?php echo $formular_email; ?></span></strong></label><br />
<input class="inpt" type="text" id="email" name="email" size="38" title="<?php echo $formular_email; ?>" value="<?php echo stripslashes($email); ?>" tabindex="2" /><br /><br />

<label for="message"><strong><?php echo $formular_meldung; ?></strong></label><br />
<textarea class="txt" id="message" name="message" title="<?php echo $formular_meldung; ?>" cols="36" rows="8" tabindex="3"><?php echo stripslashes($message); ?></textarea><br /><br />

<input type="submit" class="senden" name="submit" value="<?php echo $submit_value; ?>" title="<?php echo $submit_titel; ?>" tabindex="4" /><br />

</fieldset>
</form>
</div>
</div>

<?php
} // if (($submit == "") OR (($submit == $submit_value) AND ($hack == true)))

elseif (($submit == $submit_value) AND ($hack == false))
{
	//email abschicken
    $recipient=$empfaenger;
    $subject=$email_titel;
    $header="From: " . $email . "\n";
    $mail_body ="Das Anfrage-Formular wurde am " . date("d.m.Y") . " um " . date("H:i") . "h ausgeführt.\n";
    $mail_body.="Folgende Werte wurden eingetragen:\n\n";
    $mail_body.="Name: " . $name . "\n";
    $mail_body.="E-Mail: " . $email . "\n\n";
    $mail_body.="Message:\n\n";
    $mail_body.=$message . "\n\n ---- Ende der automatisch generierten eMail ----";

    mail($recipient,$subject,$mail_body,$header);
    
	echo "<br /><br /><p class=\"center\"><strong>" . $danke_meldung . "</strong></p>\n";
}  
?>
ins Stylesheet kommt dann Folgendes rein (wobei input/textarea Klassen bekommen, da man im IE sonst nicht vernünftig darauf zugreifen kann):

Code: Alles auswählen

/*  Start Forms */
#formwrap {
	padding: 0px 0px 0px 0px;
	margin: 0px 0px 0px 50px;
}
#form {
	padding: 0px 0px 10px 0px;
	margin: 0px 0px 0px 0px;
	text-align: left;
}
/* Rahmenfarbe angeben für Opera */
fieldset {
	border: 1px solid #fff;
	padding: 0px 0px 0px 0px;
	margin: 0px 0px 0px 0px;
}
legend {
	border: 1px solid #fff;
}
Label {
	font:11px/20px verdana, arial, helvetica, sans-serif;
	padding:0px;
	margin-left: 0px;
}
.inpt {
	width: 350px;
	border: 1px solid #999;
	background-color: transparent;
	color: #666666;
	font-family: Verdana, Arial, Sans-Serif;
	font-size: 11px;
	padding: 1px 1px 1px 3px;
	margin: 0px 0px 5px 0px;
	word-spacing: 0.2em;
}
.txt {
	width: 350px;
	border: 1px solid #999;
	background-color: transparent;
	color: #666666;
	font-family: Verdana, Arial, Sans-Serif;
	font-size: 11px;
	padding: 1px 1px 1px 3px;
	margin: 0px 0px 5px 0px;
	word-spacing: 0.2em;
}
input.inpt:focus, textarea.txt:focus {
	color: #000;
	font-family: Verdana, Arial, Sans-Serif;
}
.senden {
	width: 150px;
	font-weight: bold;
	font-size: 11px; 
	margin: 15px 0px 0px 198px;
	padding: 3px 0px 3px 0px;
	background-color: #eee; 
	color: #333;
	text-align: center;
	border: solid 1px #999;
	cursor: pointer;
}
label, 
select, 
input[type=checkbox], 
input[type=radio], 
input[type=button], 
input[type=submit] { 
	cursor: pointer;
}

/*  End Forms */
Verbesserungen wären:
  • Schriftgößen umstellen auf em (Barrierefreiheit)
    Formconfig in Eingabebereich des Moduls, damit Nicht-Programmierer das besser editieren können (inzwischen umgesetzt, siehe Modulsammlung)
Mit wenigen Änderungen/Erweiterungen läßt sich das auch als "Seite weiterempfehlen"-Script nutzen.

Wer Verbessungsvorschläge hat, bitte posten.

Gruß
Thorsten

Verfasst: 16. Jul 2005, 00:12
von bibi
Hallo blubb,

ich würde das gerne testen -- ich bin mir nur nicht ganz klar, wie ich es einbinde ;)

Du sagst, dass es ein Modul ist, aber dort habe ich die zwei Felder Ein- und Ausgabe ... :cry:

Danke,
Carsten

Verfasst: 16. Jul 2005, 00:16
von blubb
Hallo Carsten,
bibi hat geschrieben: Du sagst, dass es ein Modul ist, aber dort habe ich die zwei Felder Ein- und Ausgabe ... :cry:
in die Ausgabe, die Eingabe bleibt leer.

Gruß
Thorsten

Verfasst: 16. Jul 2005, 00:49
von bibi
So,

getestet :D

Funktioniert super! Ohne Probleme!

Auch finde ich es echt gut, dass die E-Mail ohne JavaScript versendet wird. :) Da freut sich mein Lynx ;)

Grüße,
Carsten

Verfasst: 16. Jul 2005, 15:30
von Markus.Staab
Hi

@Thomas

Vielleicht solltest dieses "verbesserte" Formular in die RedaxoDemo mit aufgenommen werden, wenn der Author damit einverstanden ist??

Gruß.
Markus

Verfasst: 16. Jul 2005, 15:55
von blubb
Hi Markus,
kills hat geschrieben:Hi

@Thomas

Vielleicht solltest dieses "verbesserte" Formular in die RedaxoDemo mit aufgenommen werden, wenn der Author damit einverstanden ist??
Nur zu, es wäre mir eine Ehre, zur Verbesserung des Systems beitragen zu können! :D

Gruß
Thorsten

Verfasst: 18. Jul 2005, 10:22
von hoppel
super. wenn das formular jetzt auch gesendet wird ohne dass das emailfeld ausgefüllt werden muss; noch besser. das ist ja noch einfach. aber falls der user das emailfeld ausfüllt, soll eine automatische email gesendet werden an diesen user, als danke sozusagen. und wenn er das emailfeld nicht ausfüllt soll das formular trotzdem gesendet werden.

gruss

Verfasst: 18. Jul 2005, 14:20
von blubb
Hi hoppel,

1. config-Bereich oben:

Code: Alles auswählen

$formular_info = "Bitte tragen Sie Ihre Daten in die folgenden Felder ein. Felder mit (*) müssen ausgefüllt werden.";
2. email-Prüfung:

Code: Alles auswählen

function checkEmail ($string) {
// $email mindestens a@a.aa
    if (($string != "") && (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([_a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", stripslashes($string))))
    {
	    return true; // OK
	}
	else
	{
	    return false; // falsche Eingabe
	}	
} // end function checkEmail
3. Formular:

Code: Alles auswählen

<div id="formwrap">
<div id="form">

<form id="kontakt" method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
<fieldset>
<?php
	echo "<legend><strong>" . $formular_legend . "</strong></legend>\n";
	if ($formular_info != "")
	{
		echo "<p>" . $formular_info . "</p>\n";
	}
?>

<label for="name"><strong><?php echo $formular_name; ?></strong> <strong>*</strong></label><br />
<input class="inpt" type="text" id="name" name="name" size="38" title="<?php echo $formular_name; ?>" value="<?php echo stripslashes($name); ?>" tabindex="1" /><br /><br />

<label for="email"><strong><span lang="en"><?php echo $formular_email; ?></span></strong></label><br />
<input class="inpt" type="text" id="email" name="email" size="38" title="<?php echo $formular_email; ?>" value="<?php echo stripslashes($email); ?>" tabindex="2" /><br /><br />

<label for="message"><strong><?php echo $formular_message; ?></strong> <strong>*</strong></label><br />
<textarea class="txt" id="message" name="message" title="<?php echo $formular_message; ?>" cols="36" rows="8" tabindex="3"><?php echo stripslashes($message); ?></textarea><br /><br />

<input type="submit" class="senden" name="submit" value="<?php echo $submit_value; ?>" title="<?php echo $submit_titel; ?>" tabindex="4" /><br />

</fieldset>
</form>
</div>
</div>
4. email versenden:

Code: Alles auswählen

mail($recipient,$subject,$mail_body,$header);

////// ab hier ergänzen    
    if ($email != "")
    {
	    //email abschicken
    	$recipient2=$email;
    	$subject2="Ihre Anfrage an xxx";
    	$header2="From: " . $empfaenger . "\n";
    	$mail_body2=" . $danke_meldung . "\n";
    	
    	mail($recipient2,$subject2,$mail_body2,$header2);
	}

////// Ergänzung Ende
 
	echo "<br /><br /><p class=\"center\"><strong>" . $danke_meldung . "</strong></p>\n";
}  
Gruß
Thorsten

Verfasst: 19. Jul 2005, 18:02
von hoppel
@blubb erstmal danke für deine mühe. ich muss das jetzt erst mal alles austesten.

gruss

Verfasst: 20. Sep 2005, 20:17
von fsiebert1977
Hi Blubb,

bei mir will er keine Umlaute in Namen und Text. Kann man das ändern?

Vielen Dank für das tolle Modul :)

Verfasst: 21. Sep 2005, 08:53
von Thomas.Blum
Hej,
kills hat geschrieben:Hi
@Thomas

Vielleicht solltest dieses "verbesserte" Formular in die RedaxoDemo mit aufgenommen werden, wenn der Author damit einverstanden ist??

werde es nach Absprache einbauen.

Thomas

Verfasst: 21. Sep 2005, 08:56
von Thomas.Blum
Vergessen zu schreiben.

@Thorsten
Bitte auch ins myRedaxo reinstellen.

Thomas

Verfasst: 21. Sep 2005, 20:52
von Thomas.Blum
Hej,

Anregungen:

das <strong> aus dem Modul rausnehmen. Sonst widersprichst du dich mit
Thorsten hat geschrieben:Layout komplett über CSS anpassbar
die <br />'s würde ich auch rausnehmen.

Die Fehler alle auf einmal anzeigen, nicht nacheinander.

Felder für Vorname, Plz, Ort, Bspl. für ne Liste...

vg Thomas

Verfasst: 22. Sep 2005, 10:54
von Jan.Kristinus
hi blubb,

so ein formular als modul, bei dem man über die eingabe in redaxo absendeadresse .. einsetzen kann.. faende ich superklasse..

nur mal so als wunsch :)

gruss

jan

Kontaktformular - valide, weitgehend barrierefrei [Update]

Verfasst: 23. Sep 2005, 13:32
von blubb
Hi Jan,
jan hat geschrieben:so ein formular als modul, bei dem man über die eingabe in redaxo absendeadresse .. einsetzen kann.. faende ich superklasse..
Eingabe:

Code: Alles auswählen

Bitte die entsprechenden Felder ausfüllen, da sonst das Kontaktformular nicht funktionsfähig ist.
<br>
Bezeichner Namensfeld:
<br><input type=text size=10 class=inp100 name=VALUE[1] value="REX_VALUE[1]"><br><br>
Bezeichner EMail-feld:
<br><input type=text size=10 class=inp100 name=VALUE[2] value="REX_VALUE[2]"><br><br>
Bezeichner Text-/Nachrichtenfeld:
<br><input type=text size=10 class=inp100 name=VALUE[3] value="REX_VALUE[3]"><br><br>
Aufschrift auf Senden-Button:
<br><input type=text size=10 class=inp100 name=VALUE[4] value="REX_VALUE[4]"><br><br>
Meldung bei nicht korrekt ausgefülltem Formular:
<br><textarea name=VALUE[5] cols=80 rows=2 class=inp100>REX_VALUE[5]</textarea><br><br>
Meldung bei erfolgreicher Versendung des Formulars:
<br><textarea name=VALUE[6] cols=80 rows=2 class=inp100>REX_VALUE[6]</textarea><br><br>
EMail an die das Formular versendet werden soll:
<br><input type=text size=10 class=inp100 name=VALUE[7] value="REX_VALUE[7]"><br><br>
EMail an die das Formular als Kopie versendet werden soll:
<br><input type=text size=10 class=inp100 name=VALUE[8] value="REX_VALUE[8]"><br><br>
Titel der EMail:
<br><input type=text size=10 class=inp100 name=VALUE[9] value="REX_VALUE[9]"><br><br>
Ausgabe:

Code: Alles auswählen

<?php
	
// ============== Form config ==============
// Daten für die Ausgabe der Fehlermeldung, 
// Überschrift, Legend, Beschreibung, Feldnamen, "Submit"-Button

	$page_info = "";
	$hack_message = "REX_VALUE[5]";

	//Formular
	$form_header = "";
	$form_legend = "";
	$form_info = "";

	$form_name = "REX_VALUE[1]";
	$form_firma = "";
	$form_email = "REX_VALUE[2]";
	$form_message = "REX_VALUE[3]";
	$submit_value = "REX_VALUE[4]";
	$submit_titel = "Zum Absenden bitte nur 1x klicken";
	
	// Danke-Seite
	$thanks_message = "REX_VALUE[6]";
	
	// Empfänger E-Mail
	$empfaenger="REX_VALUE[7]";
        $empfaengerBC="REX_VALUE[8]";
	$email_titel="REX_VALUE[9]";
	
// ============== Ende Form config ==============

// Daten aus Form config konvertieren
    function clean_text($value = "") 
    {
        $value = htmlentities($value);
        return $value;
	}

    $page_info = clean_text($page_info);
	//$hack_message = clean_text($hack_message);
	$form_legend = clean_text($form_legend);
	//$form_name = clean_text($form_name);
	//$form_email = clean_text($form_email);
	$form_firma = clean_text($form_firma);
	$form_message = clean_text($form_message);
	$submit_value = clean_text($submit_value);
	//$submit_titel = clean_text($submit_titel);
	//$thanks_message = clean_text($thanks_message);
	
// ============== Formularüberprüfung ==============

function cleanup ($string) {
	// falls magic quotes on
	if (get_magic_quotes_gpc()) 
	{
    	$string = stripslashes($string);
    }
	$string = addslashes($string); 
    $string = strip_tags($string);
    // "--","#";";","`","/"	Ausfiltern von SQL-Statements
 	$string = str_replace(array("--","- -","#",";","`","/","<",">","{","}","[","]"),array("","","","","","","","","","","",""),$string);
	// - mit Leerzeichen dazwischen (SQL-Kommentare!)
 	$string = preg_replace('#-\s+-#i',"",$string);
    return $string;
} // end function cleanup

function checkName ($string) {
// $name am Anfang Buchstabe; keine Zahlen und Nicht-Wortzeichen; dann
// beliebig viele Buchstaben, Bindestriche, Leerzeichen und Punkte
    if (preg_match("/^[^\W\d_]([^\W\d_]|[\-\'\s\.\ä\ö\ü\Ä\Ö\Ü\ß])*$/", stripslashes($string)))
    {
	    return true; // OK
	}
	else
	{
	    return false; // falsche Eingabe
	}	
} // end function checkName



function checkNumeric ($string) {
// nur Zahlenr
    if (preg_match("/^\d*$/", stripslashes($string)))
    {
	    return true; // OK
	}
	else
	{
	    return false; // falsche Eingabe
	}	
} // end function checkNumeric

function checkEmail ($string) {
// $email mindestens a@a.aa
    if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([_a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", stripslashes($string)))
    {
	    return true; // OK
	}
	else
	{
	    return false; // falsche Eingabe
	}	
} // end function checkEmail

function checkMessage ($string) {
// $email mindestens a@a.aa
    if (preg_match("/^[^\d_]([^\W]|[\-\'\s"\.\!\?\;\,\:\€\%\(\)\+\=\@\*\ä\ö\ü\Ä\Ö\Ü\ß])*$/", stripslashes($string)))
    {
	    return true; // OK
	}
	else
	{
	    return false; // falsche Eingabe
	}	
} // end function checkMessage


	$hack = false;  // Bool'sche Variable zeigt an, ob
                    // ein Hackingversuch vorliegt
                    	
	// Auslesen und Säubern der Daten aus $_POST
	if (sizeof($_POST) == 0) 
	{
        $name = "";
        $firma = "";
        $email = "";
        $message = "";
        $submit = "";
    }
    else
    {
		$name = $_POST["name"];		
    	$email = $_POST["email"];
    	$firma = $_POST["firma"];
    	$message = $_POST["message"];
    	$submit = $_POST["submit"];
    	
    	$name = cleanup($name);
    	$email = cleanup($email);
    	$firma = cleanup($firma);
    	$message = cleanup($message);
    	$submit = cleanup($submit);
	
    	// Verifizieren der Daten

    	if (checkName($name)!=1)
		{
			$hack = true; $feld = $form_name;
		}

		if (checkEmail($email)!=1)
		{
			$hack = true; $feld = $form_email;
		}

		if (checkMessage($message)!=1)
		{
			$hack = true; $feld = $form_message;
		}
		
	} // end else

// ============== Ende Formularüberprüfung ==============

?>

<?php
// beim ersten Aufruf oder unkorrekten Eingaben Formular ausgeben
if (($submit == "") OR (($submit == $submit_value) AND ($hack == true)))
{
	
	// Bei inkorrekten Eingaben eine Fehlermeldung ausgeben:
	if ($hack) 
	{
?>
<p><?php echo $hack_message; ?></p>
<ul>
<li><?php echo $feld; ?></li>
</ul>
<?php
	} // end if ($hack)
	else 
	{
		if ($page_info != "")
		{
			echo "<p>" . $page_info . "</p>\n";
		}

	} // end else
	
?>

<div id="formwrap">
<div id="form">

<form id="kontakt" method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
<fieldset>
<?php


	echo "<legend><strong>" . $form_legend . "</strong></legend>\n";


?>

<label for="name"><strong><?php echo $form_name; ?></strong></label><br />
<input class="inpt" type="text" id="name" name="name" size="38" title="<?php echo $form_name; ?>" value="<?php echo stripslashes($name); ?>" tabindex="1" /><br /><br />

<label for="email"><strong><span lang="en"><?php echo $form_email; ?></span></strong></label><br />
<input class="inpt" type="text" id="email" name="email" size="38" title="<?php echo $form_email; ?>" value="<?php echo stripslashes($email); ?>" tabindex="2" /><br /><br />

<label for="message"><strong><?php echo $form_message; ?></strong></label><br />
<textarea class="txt" id="message" name="message" title="<?php echo $form_message; ?>" cols="36" rows="8" tabindex="3"><?php echo stripslashes($message); ?></textarea><br /><br />

<input type="submit" class="senden" name="submit" value="<?php echo $submit_value; ?>" title="<?php echo $submit_titel; ?>" tabindex="4" /><br />

</fieldset>
</form>
</div>
</div>

<?php
} // if (($submit == "") OR (($submit == $submit_value) AND ($hack == true)))

elseif (($submit == $submit_value) AND ($hack == false))
{
	//email abschicken
    $recipient=$empfaenger;
    $subject=$email_titel;
    $header="From: " . $email . "\n";
    $mail_body ="Das Anfrage-Formular wurde am " . date("d.m.Y") . " um " . date("H:i") . "h ausgeführt.\n";
    $mail_body.="Folgende Werte wurden eingetragen:\n\n";
    $mail_body.="Name: " . $name . "\n";
    $mail_body.="E-Mail: " . $email . "\n\n";
    $mail_body.="Message:\n\n";
    $mail_body.=$message . "\n\n ---- Ende der automatisch generierten eMail ----";

    mail($recipient,$subject,$mail_body,$header);
    if ($empfaengerBC!=""){
      $recipient=$empfaengerBC;
      mail($recipient,$subject,$mail_body,$header);
    }
	echo "<br /><br /><p class="center"><strong>" . $thanks_message . "</strong></p>\n";
}  

?>
@tbaddade
- strong rausnehmen kann man ja machen, ich widerspreche mir allerdings nicht, da man über CSS "label strong" font-weight wieder auf "normal" setzen kann.
- die br's habe ich bewußt da drin, da das floaten wie bei einfach-für-alle beschrieben nicht in allen Browsern ohne Zicken funktioniert.
- zudem ist das Formular in dieser Form von einer Blinden getestet und für gut befunden (habe das so im Frontend des barrierefreien CMS Papoo eingebaut, wo ich hin- und wieder mal etwas beisteuere)
- du kannst das ruhig einbauen, bin einverstanden

@fsiebert1977
- Umlaute in Namen und Text sollten eigentlich funktionieren, anpassbar ist das in den regulären Ausdrücken für die Prüfung der Formularfelder

Gruß
Thorsten

Verfasst: 23. Sep 2005, 13:50
von Markus.Staab
Hi Thorsten,

wenn du jetzt das ganze noch mit einer Ordentlichen Beschreibung in die Modulsammlung stellst, dann bin ich sogar wunschlos glücklich. ;)

Gruß,
Markus

Re: Kontaktformular - valide, weitgehend barrierefrei [Updat

Verfasst: 23. Sep 2005, 15:10
von Thomas.Blum
blubb hat geschrieben: @tbaddade
- strong rausnehmen kann man ja machen, ich widerspreche mir allerdings nicht, da man über CSS "label strong" font-weight wieder auf "normal" setzen kann.
Das ist richtig, aber da verstehe ich nicht warum du strong reinmachst. Warum etwas zurücksetzen, wenn man es nicht vorhanden sein braucht.

Über

label {font-weight:bold;}

erreichst du das gleiche


Thomas

Verfasst: 26. Sep 2005, 04:40
von alex2911
Angelehnt an dieses Modul ist von mir ein Newsletter-Formular dazu gekommen. Zu finden im Downloadbereich unter Module ( http://www.redaxo.de/17-0-module.html )

Verfasst: 10. Okt 2005, 15:05
von fsiebert1977
Hi Thorsten,

kenne mich mit regulären Ausdrücken leider noch nicht aus. Ich sehe zwar, dass da in dem String nach Ä's, Ü's und anderen Sonderzeichen gesucht wird, aber ich weiss nicht, ob ich die einfach da rauslöschen kann. Wenn, dann muss ich wahrscheinlich auch den Slash vorher mit rauslöschen, oder? Ich hab jetzt erstmal einfach die Überprüfung von Name und Text ganz abgeschaltet, habe aber das Problem, dass Sonderzeichen in ganz verkorkster Form in der E-Mail ankommen. Die sind wahrscheinlich url-codiert, oder? Wie könnte ich das zurückwandeln? Vielen Dank für deine Hilfe.

Verfasst: 21. Nov 2005, 18:09
von blubb
Hi Florian,

war etwas länger nicht hier, daher erst jetzt meine Antwort.
fsiebert1977 hat geschrieben:Ich sehe zwar, dass da in dem String nach Ä's, Ü's und anderen Sonderzeichen gesucht wird, aber ich weiss nicht, ob ich die einfach da rauslöschen kann.
im hinteren Teil des regulären Ausdrucks stehen die erlaubten Zeichen
fsiebert1977 hat geschrieben:Ich hab jetzt erstmal einfach die Überprüfung von Name und Text ganz abgeschaltet
das ist eine Sicherheitslücke
fsiebert1977 hat geschrieben:Die sind wahrscheinlich url-codiert, oder?
nicht, das ich wüßte.

Ich versuche mal, das nachzuvollziehen.

Nachtrag: habe das Formular mit Umlauten befüllt und sowohl in Redaxo 2.7, als auch in Version 3.0 getestet (jeweils die stable-Version, keine vom svn-Server!): funktioniert einwandfrei! Keine Ahnung, wie die Fehler mit den Umlauten bei Dir zustande kommen.

Gruß
Thorsten

Verfasst: 22. Nov 2005, 21:45
von fsiebert1977
Hi Thorsten,

das mit den Umlauten war ein Codepage-Problem. Ich habe alles auf UTF-8 umgestellt, jetzt funktioniert es einwandfrei.

Eine Frage: wie kann man mit einem Mail-Formular was hacken, wenn die Felder nicht überprüft werden? Das würde mich interessieren.

Danke für deine Hilfe.

Verfasst: 22. Nov 2005, 21:55
von blubb
Hi Florian,
fsiebert1977 hat geschrieben:Eine Frage: wie kann man mit einem Mail-Formular was hacken, wenn die Felder nicht überprüft werden? Das würde mich interessieren.
Stichworte: SQL-Injection und Cross-Site-Scripting (XSS) (Erklärung würde hier zu weit führen, Sicherheit von Webseiten/Formularen ist ein Thema für sich -> Google)

kurz: in die Felder kann ja statt Name oder email-Adresse usw. auch bösartiger Code eingefügt werden, im schlimmsten Fall ist Deine Datenbank dann gelöscht; es lohnt sich also schon, sich damit auseinander zu setzen.

Gruß
Thorsten

Verfasst: 23. Nov 2005, 00:34
von fsiebert1977
Aber es wird doch gar keine SQL-Abfrage durchgeführt, oder? Könnte man ohne die Feldüberprüfung einfach SQL-Statements in das Formular eintragen und diese würden ausgeführt?

Verfasst: 23. Nov 2005, 01:03
von blubb
fsiebert1977 hat geschrieben:Aber es wird doch gar keine SQL-Abfrage durchgeführt, oder? Könnte man ohne die Feldüberprüfung einfach SQL-Statements in das Formular eintragen und diese würden ausgeführt?
jau!

Verfasst: 23. Nov 2005, 10:38
von fsiebert1977
blubb hat geschrieben:jau!
Oh!