Kontaktformular mit einem bedingungssatz via php schützen.

Nachdem ich mein anderes Problem auch dank hilfe nun gelöst habe kommt nun der 2te teil.

Den Aktiven link zu kennzeichenen war das eine.
Nun der 2te teil auf meiner Website der per php umgesetzt werden muss.
Ich hoffe ihr versteht mich ich habe keine Zeit php komplett zu lernen. Ich bin aber mit hilfestellungen auch zu frieden wie Seiten wo das Problem erklährt wird.

Problem:
Ich habe ein Kontaktformular. Der Code steht unter diesem Absatz. Er kommt von dieser Website: WebDesign - Tips und Tricks: universeller Formmailer

Nun möchte ich hierrein einen Spamschutz machen. Kein Captcha sondern etwas ganz simples. Ich möchte eine Frage stellen und per php soll nur geprüft werden ob eine von mir angegebene Antwort richtig ist. Groß und kleinschreibung soll egal sein.
Beispiel:

Wie heißt dieses Forum hier?
Mögliche Antworten zum Beispiel:
html.de
HtMl.De
HTML.DE

Ist die Antwort so richtig darf die Mail abgeschickt werden.

Und bitte keine diskusion ob dies ein sinnvoller Spamschutz ist, ich würde es gerne so haben.

Code meines formulars live hier:
Kontaktformular
als code hier:
[PHP]

<?php define ('MAILTO', "meineemail@t-online.de"); // Empfänger hier eintragen define ('MAILFROM', "Kontaktformular"); // ggfls. Absender hier eintragen define ('CHARSET', "UTF-8"); // Zeichenkodierung ggfls. anpassen $Pflichtfelder = array('Nachricht'); // ggfls. weitere Pflichtfelder angeben $AddHeader = 'Content-Type: text/plain; charset='.CHARSET; if(MAILFROM) $AddHeader .= chr(13).chr(10).'From: '.MAILFROM; if($Formular_abgeschickt = !empty($_POST)) { $Formular_leer = true; set_magic_quotes_runtime(0); $_POST = array_map('Formular_Daten', $_POST); } function Formular_Daten($val) { global $Formular_leer; if(is_array($val)) return array_map('Formular_Daten', $val); if(get_magic_quotes_gpc()) $val = stripslashes($val); if($val = trim($val)) $Formular_leer = false; return $val; } function Formular_Pflichtfelder() { global $Pflichtfelder; $Fehler = ''; foreach ($Pflichtfelder as $Feld) { $key = str_replace(' ','_',$Feld); if(!(isset($_POST[$key]) && trim($_POST[$key])!=='')) { if($Fehler) $Fehler .= '
'; $Fehler .= 'Pflichtfeld "' . $Feld . '" nicht ausgefüllt.'; } } return $Fehler; } function Formular_neu($log='.htPOSTdata.txt') { if(file_exists($log) && is_readable($log) && file_get_contents($log) == print_r($_POST,true)) return false; if($handle=@fopen($log, 'w')) { fwrite($handle, print_r($_POST,true)); fclose($handle); } return true; } function Formular_Check() { global $Formular_leer; if($Formular_leer) $Fehler = 'Keine Daten eingetragen.'; elseif(!$Fehler = Formular_Pflichtfelder()) { if(!Formular_neu()) $Fehler = 'Nachricht war bereits verschickt.'; } return $Fehler; } function Formular_Eingabe($Feldname, $def='') { if(isset($_POST[$Feldname]) && $_POST[$Feldname]!=='') echo htmlspecialchars($_POST[$Feldname]); else echo $def; } ?> Kontaktformular

Kontakt

<?php if($Formular_abgeschickt) { if($Formular_Fehler = Formular_Check()) echo '

',$Formular_Fehler,'

'; elseif(@mail(MAILTO, "Nachricht", print_r($_POST,true), $AddHeader)) echo '

Nachricht verschickt.

'; else echo '

Server-Fehler !

'; } ?> Kontaktformular

Ihr Name:

Nachricht: <?php Formular_Eingabe('Nachricht'); ?>

[/PHP]

Das muss noch in das Formular rein.
[HTML]Geben Sie den Namen dieses Forums in das folgende Feld ein:

[/HTML]

Dieser Codeaussschnitt muss nun umgeänderte werden:

[PHP]<?php if($Formular_abgeschickt) { if($Formular_Fehler = Formular_Check()) echo '

',$Formular_Fehler,'

'; elseif(@mail(MAILTO, "Nachricht", print_r($_POST,true), $AddHeader)) echo '

Nachricht verschickt.

'; else echo '

Server-Fehler !

'; } ?>[/PHP]

Bevor es zum mail() Aufruf kommt, brauchst du eben noch eine if-Bedingung.
Zum Beispiel:
[PHP]<?php if($Formular_abgeschickt) { if($Formular_Fehler = Formular_Check()) { echo '

',$Formular_Fehler,'

'; } else { if ($_POST['securityQuestionInput'] == "html.de") { if(@mail(MAILTO, "Nachricht", print_r($_POST,true), $AddHeader)) { echo '

Nachricht verschickt.

'; } else { echo '

Server-Fehler !

'; } } else { echo '

Die Sicherheitsfrage wurde falsch beantwortet

'; } } } ?>[/PHP]

ich würde das ändern in
… (strtolower($_POST[‚securityQuestionInput‘]) == „html.de“) …

Hm, auf meinem Server ist das eigentlich nie notwendig. Gibt es in der php.ini eine Einstellung, mit der man die Groß- und Kleinschreibung Überpüfung ein bzw aussschalten kann?

Ob man das einstellen kann, weiß ich nicht. Ich habe bei mir unter Windows 7 PHP 5, dann habe ich 2 Provider mit beiden Versionen PHP 4 und 5 und der eine hat Windows/IIS, der andere Linux/Apache. Auf allen 5 Umgebungen liefert
[PHP]echo ‚Unterschied: ’ . (‚a‘ == ‚A‘) .‘
Gleich: ’ . (‚A‘ == ‚A‘);[/PHP]im ersten Fall False (leer) und im zweiten True (1). Eventuell gibt es ja eine Option wie unter MS VB ‚Option Compare Text‘, analog wie man ja auch die Zeitzone einstellen kann. Unabhängig davon finde ich es sauberer, weil der Code dann schon ausdrückt, dass man hier keinen Wert auf die Schreibweise legt und sicherer, weil ich persönlich nie weiß, welche Programmiersprache es nun wie handhabt :-).

Meines Wissens nach wird unter UNIX-Systemen zwischen Groß- und Kleinschreibung unterschieden. Unter Windoof nicht.
http://technet.microsoft.com/de-de/library/cc732389.aspx

Btw.
[php] else
{
if ($_POST[‚securityQuestionInput‘] == „html.de“)
{
[…][/php]
…lässt sich zu…
[php]elseif($_POST[‚securityQuestionInput‘] == „html.de“)
{
[…][/php]
…zusammenfassen. Finde ich persönlich übersichtlicher.

Gruß

Peeeeerfekt!
Hab n bisschen basteln müssen aber dann hat das 1A geklappt!

Danke. =)