Kontaktformular - valide, weitgehend barrierefrei

Fragen/Tipps allgemeiner Art.

Kontaktformular - valide, weitgehend barrierefrei

Beitragvon blubb » 15. Jul 2005, 14:48

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
Zuletzt geändert von blubb am 8. Dez 2005, 19:38, insgesamt 3-mal geändert.
blubb
 
Beiträge: 33
Registriert: 13. Jul 2005, 12:39
Wohnort: Hannover

Beitragvon bibi » 15. Jul 2005, 23:12

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
bibi
 
Beiträge: 129
Registriert: 9. Jul 2005, 03:26
Wohnort: Bielefeld

Beitragvon blubb » 15. Jul 2005, 23:16

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
blubb
 
Beiträge: 33
Registriert: 13. Jul 2005, 12:39
Wohnort: Hannover

Beitragvon bibi » 15. Jul 2005, 23:49

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
bibi
 
Beiträge: 129
Registriert: 9. Jul 2005, 03:26
Wohnort: Bielefeld

Beitragvon Markus.Staab » 16. Jul 2005, 14:30

Hi

@Thomas

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

Gruß.
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon blubb » 16. Jul 2005, 14:55

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
blubb
 
Beiträge: 33
Registriert: 13. Jul 2005, 12:39
Wohnort: Hannover

Beitragvon hoppel » 18. Jul 2005, 09:22

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
hoppel
 
Beiträge: 76
Registriert: 24. Aug 2004, 21:11

Beitragvon blubb » 18. Jul 2005, 13:20

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
blubb
 
Beiträge: 33
Registriert: 13. Jul 2005, 12:39
Wohnort: Hannover

Beitragvon hoppel » 19. Jul 2005, 17:02

@blubb erstmal danke für deine mühe. ich muss das jetzt erst mal alles austesten.

gruss
hoppel
 
Beiträge: 76
Registriert: 24. Aug 2004, 21:11

Beitragvon fsiebert1977 » 20. Sep 2005, 19:17

Hi Blubb,

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

Vielen Dank für das tolle Modul :)
Gruß Florian
www.softloop.biz
fsiebert1977
 
Beiträge: 172
Registriert: 9. Feb 2005, 19:51
Wohnort: Bad Nauheim

Beitragvon Thomas.Blum » 21. Sep 2005, 07:53

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
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Beitragvon Thomas.Blum » 21. Sep 2005, 07:56

Vergessen zu schreiben.

@Thorsten
Bitte auch ins myRedaxo reinstellen.

Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Beitragvon Thomas.Blum » 21. Sep 2005, 19:52

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
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Beitragvon Jan.Kristinus » 22. Sep 2005, 09:54

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
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/
Benutzeravatar
Jan.Kristinus
Admin
 
Beiträge: 1928
Registriert: 24. Aug 2004, 21:11
Wohnort: Frankfurt

Kontaktformular - valide, weitgehend barrierefrei [Update]

Beitragvon blubb » 23. Sep 2005, 12:32

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
Zuletzt geändert von blubb am 7. Dez 2005, 23:29, insgesamt 1-mal geändert.
blubb
 
Beiträge: 33
Registriert: 13. Jul 2005, 12:39
Wohnort: Hannover

Nächste

Zurück zu Allgemeines [R2]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast