Hilfe beim Kontaktformular

  • Guten Tag,


    Hab bei mir auf meiner Seite ein Kontaktformular eingebaut, und bräuchte dazu ein bisschen Hilfestellung!


    Hier mein Kontaktformular:



    Und habe hier von Herrn Pratzner das bei den Funktionen eingefügt:



    Aber irgendwie wenn ich beim Inhalt bein Formular to: eingebe kommt immer die Nachricht erfolgreich abgeschickt wird.
    Des stimmt auch, weil ich es ja auch im Code so habe, aber normalerweise wenn in der Funktion schadstoffe reinkommt dann müsste doch
    nur der eine Satz in der Funktion kommen und nicht alles.
    Die E-mail wird abgeschickt, aber ganz leer mehr nicht, auch wenn ich cc, to machen. Es kommt zwar eine Leere Mail an, aber ausgeführt wird
    to oder cc nicht.
    Was könnte das sein?


    Und ist das Kontaktformular sicher, oder wie kann man es noch verbessern?

  • Der Code an sich ist komplett unlogisch aufgebaut.


    Vielleicht solltest du dich noch ein bisschen mehr darüber informieren was deine einzelnen Codeteile bewirken.

  • So ic hhabe das Ganze mal schick als PHP Code mit vielen Kommentaren aufbereitet, guck es dir einfach mal an, vergleiche mit deinem Code und frag wenn du Fragen hast ;)


    PHP
    <span class="syntaxhtml"><br />  <article><br />    <h1>Kontaktformular</h1><br /><br /><span class="syntaxdefault"><?php<br /><br /></span><span class="syntaxcomment"># Theoretisch ist es egal wo wir in PHP Dateien etwas definieren<br /># da vor Verarbeitung der Daten sowieso erst alles eingelesen wird.<br /># Semantisch korrekt, und auch übersichtlicher, ist es aber<br /># z.B. Funktionen am Anfang zu definieren, die Ausgabe<br /># von Text erfolgt auch erst später.<br /><br /># Also definieren wir die Funktion:<br /></span><span class="syntaxdefault">function tuersteher</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$zum_testen</span><span class="syntaxkeyword">)<br />{<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment"># Um Quellcode und Arbeit zu sparen schreiben wir<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment"># beide "Prüfcodes" in eine if Abfrage<br /></span><span class="syntaxdefault">    if<br />    </span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">      </span><span class="syntaxcomment"># 1. Prüfcode ACHTUNG, hier schleicht sich eventuell ein Bug ein, daher mit @ kenzeichnen um fehlerausgabe<br /></span><span class="syntaxdefault">      </span><span class="syntaxcomment"># zu vereiteln<br /></span><span class="syntaxdefault">      </span><span class="syntaxkeyword">@</span><span class="syntaxdefault">preg_match</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'/(to:|cc:|bcc:|from:|subject:|reply-to:|content-type:|MIME-Version:|multipart/mixed|Content-Transfer-Encoding:)/ims'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $zum_testen</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">      OR </span><span class="syntaxcomment"># Alternativ einfach || statt OR<br /></span><span class="syntaxdefault">      </span><span class="syntaxcomment"># 2. Prüfcode<br /></span><span class="syntaxdefault">      </span><span class="syntaxkeyword">@</span><span class="syntaxdefault">preg_match</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'/%0A|\\r|%0D|\\n|%00|\\0|%09|\\t|%01|%02|%03|%04|%05|%06|%07|%08|%09|%0B|%0C|%0E|%0F|%10|%11|%12|%13/i'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $zum_testen</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">      </span><span class="syntaxcomment"># Funktionen sollten bitte IMMER etwas zurückgeben<br /></span><span class="syntaxdefault">      </span><span class="syntaxcomment"># Gibt eine Funktion z.B. false zurück teilen wir<br /></span><span class="syntaxdefault">      </span><span class="syntaxcomment"># mit folgendem Aufbau der Variable $wert die Rückgabe<br /></span><span class="syntaxdefault">      </span><span class="syntaxcomment"># der Funktion mit (also false): $wert = meine_funktion();<br /><br /></span><span class="syntaxdefault">      </span><span class="syntaxcomment"># In diesem Fall geben wir false zurück falls besagter<br /></span><span class="syntaxdefault">      </span><span class="syntaxcomment"># Text gefunden wird, dazu später mehr<br /></span><span class="syntaxdefault">      return false</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /><br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment"># Übersteht der Text die Prüfung geben wir true zurück<br /></span><span class="syntaxdefault">    return true</span><span class="syntaxkeyword">;<br />}<br /><br /></span><span class="syntaxcomment"># Wir wenden einen kleinen Trick an<br /># um die 3 Variablen zu definieren<br /></span><span class="syntaxdefault">$name </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $email </span><span class="syntaxkeyword">=</span><span class="syntaxdefault">  $inhalt </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> false</span><span class="syntaxkeyword">;<br /><br /></span><span class="syntaxcomment"># Die if Abfragen an dieser Stelle sind sinnlos<br /># da wir trotzdem einen Fehler um die Ohren geklatscht<br /># bekommen wenn $_POST['...'] nicht definiert ist<br /><br />#if(isset($_POST['name']))   $name = $_POST['name'];<br />#if(isset($_POST['email']))  $email = $_POST['email'];<br />#if(isset($_POST['inhalt'])) $inhalt = $_POST['inhalt'];<br /><br /></span><span class="syntaxdefault">$name   </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">@</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'name'</span><span class="syntaxkeyword">];<br /></span><span class="syntaxdefault">$email  </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">@</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'email'</span><span class="syntaxkeyword">];<br /></span><span class="syntaxdefault">$inhalt </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">@</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'inhalt'</span><span class="syntaxkeyword">];<br /><br /></span><span class="syntaxcomment"># das @ verhindert die Ausgabe eines<br /># Fehlers falls die Variablen nicht gesetzt sind<br /><br /># '!$var' ist das Selbe wie 'false == $var'<br /># nur kürzer und .. meiner Meinung nach cooler ;)<br /># Da wir den 3 Variablen false zugeweisen haben<br /># trifft folgender Vergleich nicht zu falls<br /># in einen der 3 Variablen das false nicht<br /># ersetzt wurde<br /></span><span class="syntaxkeyword">if(!</span><span class="syntaxdefault">$name OR </span><span class="syntaxkeyword">!</span><span class="syntaxdefault">$email OR </span><span class="syntaxkeyword">!</span><span class="syntaxdefault">$inhalt</span><span class="syntaxkeyword">)<br />{<br /><br /></span><span class="syntaxdefault">  echo </span><span class="syntaxstring">'<br />    <p>Wir w&uuml;rden uns &uuml;ber ein Feedback freuen, was sie gut finden und was eher nicht! <br><br />    Fragen zur Homepage, zur meiner Person werde ich soweit ich kann beantworten. <br>Wir freuen uns schon<br />    auf ihre Nachricht.</p><br />    <form action="'</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment">#  wir sind so schlau und schreiben hier einfach nichts hin,<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment">#  über die Variable $_SERVER['SCRIPT_NAME'] lassen sich unschöne<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment">#  Sachen vom Benutzer einschleusen, wenn nichts in diesem Attribut steht<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment">#  ruft das Script diese Seite erneut auf wenn man das Formular absendet<br /></span><span class="syntaxdefault">  echo </span><span class="syntaxstring">'<br />      " method="post"><br />      <fieldset>'</span><span class="syntaxkeyword">;<br /><br /></span><span class="syntaxdefault"> </span><span class="syntaxcomment"># Die Abfrage 'if($var)' ist gleich zu setzen mit<br /></span><span class="syntaxdefault"> </span><span class="syntaxcomment"># if(isset($var))<br /></span><span class="syntaxdefault"> if</span><span class="syntaxkeyword">(@</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'absenden'</span><span class="syntaxkeyword">])<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">   </span><span class="syntaxcomment"># Hier wollen wir den Benutzer gar nicht weiter drauf<br /></span><span class="syntaxdefault">   </span><span class="syntaxcomment"># hinweisen was er vergessen hat, bei 3 Feldern kann man<br /></span><span class="syntaxdefault">   </span><span class="syntaxcomment"># nicht viel vergesen ;)<br /></span><span class="syntaxdefault">   echo </span><span class="syntaxstring">"<p>Bitte f&uuml;llen sie alle Felder vollst&auml;ndig aus.</p>"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /><br /></span><span class="syntaxdefault"> echo </span><span class="syntaxstring">'<br />        <p>Vor - Nachname: <br><br />        <input type="text" name="name" size="40" maxlength="50" /></p><br /> '</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment"># Wir sparen uns hier das<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment"># Value Attribut da diese Ausgabe eh nur<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment"># erfolgt wenn $name NICHT gesetzt ist ;)<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment"># Digne wie size aber ansonsten immer fein<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment"># mit CSS setzen ;)<br /><br /></span><span class="syntaxdefault">  echo </span><span class="syntaxstring">'<br />        <p>E-Mail: <br><br />        <input type="text" name="email" size="40" maxlength="50" /></p><br /><br />        <p>Ihr Anliegen: <br><br />        <textarea name="inhalt" rows="10" cols="50"></textarea></p><br />        <p><input type="submit" name="absenden" value="absenden" /></p><br />       <br><br />      </fieldset><br />    </form>'</span><span class="syntaxkeyword">;<br /><br /><br />}<br /><br /></span><span class="syntaxcomment"># Hier beginnt jetzt der Teil falls alle ANgaben gemacht wurden<br /></span><span class="syntaxkeyword">else<br />{<br /><br /></span><span class="syntaxdefault">  $header     </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">'From: webmaster@mannchristian.de'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> </span><span class="syntaxstring">"\r\n"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'Reply-To: webmaster@mannchristian.de'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> </span><span class="syntaxstring">"\r\n"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'X-Mailer: PHP/'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> phpversion</span><span class="syntaxkeyword">();<br /><br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment"># Wenn der tuersteher true zurück gibt wird alles gesetzt<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment"># und verschickt<br /></span><span class="syntaxdefault">  if</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">tuersteher</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$inhalt</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> AND tuersteher</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$from</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment">#  AND preg_match('/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i',$email)<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment"># irgendwo kam die funktion 'is_mail' zu wort,<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment"># diese existiert nicht, deshalb habe ich hier mal ersatzweise ein prüfmuster erstellt<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment"># wenn die email gecheckt werden soll einfach die Zeile aktivieren<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment"># ACHTUNG: dieser FIlter ist nicht 100% genau<br /></span><span class="syntaxdefault">   </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">  </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    $empfaenger </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"webmaster@mannchristian.de"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    $betreff    </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"Anfrage zur Webseite: "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment"># htmlentities maskiert alle Sondezreichen so das<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment"># HTML und PHP Code ihre Wirkung verlieren<br /></span><span class="syntaxdefault">    $nachricht  </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> htmlentities</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$inhalt</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    $from       </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> htmlentities</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$email</span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxdefault">    mail</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> $empfaenger</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $betreff</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $nachricht</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $from </span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxdefault">    echo </span><span class="syntaxstring">"<br />    <h2>Vielen Dank!</h2><br />    <p>Ihre Nachricht wurde erfolgreich verschickt.</p>"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">  </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment"># Gibt der Türsteher Alarm weisen wir den Besucher freundlich darauf hin:<br /></span><span class="syntaxdefault">  else<br />  </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    echo </span><span class="syntaxstring">"<br />      <p>Leider sind bestimmte Daten von Ihnen von unseren Filter als<br />      gef&auml;hrlich identifiziert worden, bitte &uuml;berpr&uuml;fen sie<br />      Ihre Daten.</p>"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">  </span><span class="syntaxkeyword">}<br />}<br /></span><span class="syntaxdefault">?><br /></span>  </article><br /></span>
  • Flow Snow:


    isset() gibt keine Notiz aus, wenn die Variable nicht gesetzt ist, dazu ist die Funktion ja gedacht, daher kann es auch so gemacht werden, wie chris80 es gemacht hat und es auch zu empfehlen ist.


    Es ist außerdem kein guter Stil bei jeder Gelegenheit den @-Operator zu verwenden, um Fehler nicht auszugeben. Was bei preg_match für ein Fehler entstehen kann, kannst du mich aber gerne aufklären


    Und if($var) ist nicht mit if(isset($var)) gleichzusetzen. Bei einer booleschen Variable, die false ist wird z.B. erstere Bedingung false sein, di zweite dagegen true (die Variable ist halt gesetzt).


    Ich hab den Code mal angepasst:

    PHP
    <span class="syntaxhtml"><br />  <article><br />    <h1>Kontaktformular</h1><br /><br /><span class="syntaxdefault"><?php<br /><br /></span><span class="syntaxcomment"># Theoretisch ist es egal wo wir in PHP Dateien etwas definieren<br /># da vor Verarbeitung der Daten sowieso erst alles eingelesen wird.<br /># Semantisch korrekt, und auch übersichtlicher, ist es aber<br /># z.B. Funktionen am Anfang zu definieren, die Ausgabe<br /># von Text erfolgt auch erst später.<br /><br /># Also definieren wir die Funktion:<br /></span><span class="syntaxkeyword">function </span><span class="syntaxdefault">tuersteher</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$zum_testen</span><span class="syntaxkeyword">)<br />{<br />    </span><span class="syntaxcomment"># Um Quellcode und Arbeit zu sparen schreiben wir<br />    # beide "Prüfcodes" in eine if Abfrage<br />    </span><span class="syntaxkeyword">if<br />    (<br />      </span><span class="syntaxcomment"># 1. Prüfcode ACHTUNG, hier schleicht sich eventuell ein Bug ein, daher mit @ kenzeichnen um fehlerausgabe<br />      # zu vereiteln<br />      </span><span class="syntaxkeyword">@</span><span class="syntaxdefault">preg_match</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'/(to:|cc:|bcc:|from:|subject:|reply-to:|content-type:|MIME-Version:|multipart/mixed|Content-Transfer-Encoding:)/ims'</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$zum_testen</span><span class="syntaxkeyword">)<br />      OR </span><span class="syntaxcomment"># Alternativ einfach || statt OR<br />      # 2. Prüfcode<br />      </span><span class="syntaxkeyword">@</span><span class="syntaxdefault">preg_match</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'/%0A|\\r|%0D|\\n|%00|\\0|%09|\\t|%01|%02|%03|%04|%05|%06|%07|%08|%09|%0B|%0C|%0E|%0F|%10|%11|%12|%13/i'</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$zum_testen</span><span class="syntaxkeyword">)<br />    )<br />    {<br />      </span><span class="syntaxcomment"># Funktionen sollten bitte IMMER etwas zurückgeben<br />      # Gibt eine Funktion z.B. false zurück teilen wir<br />      # mit folgendem Aufbau der Variable $wert die Rückgabe<br />      # der Funktion mit (also false): $wert = meine_funktion();<br /><br />      # In diesem Fall geben wir false zurück falls besagter<br />      # Text gefunden wird, dazu später mehr<br />      </span><span class="syntaxkeyword">return </span><span class="syntaxdefault">false</span><span class="syntaxkeyword">;<br />    }<br /><br />    </span><span class="syntaxcomment"># Übersteht der Text die Prüfung geben wir true zurück<br />    </span><span class="syntaxkeyword">return </span><span class="syntaxdefault">true</span><span class="syntaxkeyword">;<br />}<br /><br /></span><span class="syntaxcomment"># Wir wenden einen kleinen Trick an<br /># um die 3 Variablen zu definieren<br /></span><span class="syntaxdefault">$name </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$email </span><span class="syntaxkeyword">=  </span><span class="syntaxdefault">$inhalt </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">false</span><span class="syntaxkeyword">;<br /><br /></span><span class="syntaxdefault">$name </span><span class="syntaxkeyword">= </span><span class="syntaxstring">''</span><span class="syntaxkeyword">;<br />if (isset(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'name'</span><span class="syntaxkeyword">])) </span><span class="syntaxdefault">$name </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'name'</span><span class="syntaxkeyword">];<br /><br /></span><span class="syntaxdefault">$email </span><span class="syntaxkeyword">= </span><span class="syntaxstring">''</span><span class="syntaxkeyword">;<br />if (isset(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'email'</span><span class="syntaxkeyword">])) </span><span class="syntaxdefault">$email </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'email'</span><span class="syntaxkeyword">];<br /><br /></span><span class="syntaxdefault">$inhalt </span><span class="syntaxkeyword">= </span><span class="syntaxstring">''</span><span class="syntaxkeyword">;<br />if (isset(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'inhalt'</span><span class="syntaxkeyword">])) </span><span class="syntaxdefault">$inhalt </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'inhalt'</span><span class="syntaxkeyword">];<br /><br /></span><span class="syntaxcomment"># '!$var' ist das Selbe wie 'false == $var'<br /># nur kürzer und .. meiner Meinung nach cooler ;)<br /># Da wir den 3 Variablen false zugeweisen haben<br /># trifft folgender Vergleich nicht zu falls<br /># in einen der 3 Variablen das false nicht<br /># ersetzt wurde<br /></span><span class="syntaxkeyword">if(!</span><span class="syntaxdefault">$name </span><span class="syntaxkeyword">OR !</span><span class="syntaxdefault">$email </span><span class="syntaxkeyword">OR !</span><span class="syntaxdefault">$inhalt</span><span class="syntaxkeyword">)<br />{<br /><br />  echo </span><span class="syntaxstring">'<br />    <p>Wir w&uuml;rden uns &uuml;ber ein Feedback freuen, was sie gut finden und was eher nicht! <br><br />    Fragen zur Homepage, zur meiner Person werde ich soweit ich kann beantworten. <br>Wir freuen uns schon<br />    auf ihre Nachricht.</p><br />    <form action="'</span><span class="syntaxkeyword">;<br />    </span><span class="syntaxcomment">#  wir sind so schlau und schreiben hier einfach nichts hin,<br />    #  über die Variable $_SERVER['SCRIPT_NAME'] lassen sich unschöne<br />    #  Sachen vom Benutzer einschleusen, wenn nichts in diesem Attribut steht<br />    #  ruft das Script diese Seite erneut auf wenn man das Formular absendet<br />  </span><span class="syntaxkeyword">echo </span><span class="syntaxstring">'<br />      " method="post"><br />      <fieldset>'</span><span class="syntaxkeyword">;<br /><br /> if(isset(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'absenden'</span><span class="syntaxkeyword">]))<br /> {<br />   </span><span class="syntaxcomment"># Hier wollen wir den Benutzer gar nicht weiter drauf<br />   # hinweisen was er vergessen hat, bei 3 Feldern kann man<br />   # nicht viel vergesen ;)<br />   </span><span class="syntaxkeyword">echo </span><span class="syntaxstring">"<p>Bitte f&uuml;llen sie alle Felder vollst&auml;ndig aus.</p>"</span><span class="syntaxkeyword">;<br /> }<br /><br /> echo </span><span class="syntaxstring">'<br />        <p>Vor - Nachname: <br><br />        <input type="text" name="name" size="40" maxlength="50" /></p><br /> '</span><span class="syntaxkeyword">;<br />  </span><span class="syntaxcomment"># Wir sparen uns hier das<br />  # Value Attribut da diese Ausgabe eh nur<br />  # erfolgt wenn $name NICHT gesetzt ist ;)<br />  # Digne wie size aber ansonsten immer fein<br />  # mit CSS setzen ;)<br /><br />  </span><span class="syntaxkeyword">echo </span><span class="syntaxstring">'<br />        <p>E-Mail: <br><br />        <input type="text" name="email" size="40" maxlength="50" /></p><br /><br />        <p>Ihr Anliegen: <br><br />        <textarea name="inhalt" rows="10" cols="50"></textarea></p><br />        <p><input type="submit" name="absenden" value="absenden" /></p><br />       <br><br />      </fieldset><br />    </form>'</span><span class="syntaxkeyword">;<br /><br /><br />}<br /><br /></span><span class="syntaxcomment"># Hier beginnt jetzt der Teil falls alle ANgaben gemacht wurden<br /></span><span class="syntaxkeyword">else<br />{<br /><br />  </span><span class="syntaxdefault">$header     </span><span class="syntaxkeyword">= </span><span class="syntaxstring">'From: webmaster@mannchristian.de' </span><span class="syntaxkeyword">. </span><span class="syntaxstring">"\r\n" </span><span class="syntaxkeyword">.<br />                </span><span class="syntaxstring">'Reply-To: webmaster@mannchristian.de' </span><span class="syntaxkeyword">. </span><span class="syntaxstring">"\r\n" </span><span class="syntaxkeyword">.<br />                </span><span class="syntaxstring">'X-Mailer: PHP/' </span><span class="syntaxkeyword">. </span><span class="syntaxdefault">phpversion</span><span class="syntaxkeyword">();<br /><br />  </span><span class="syntaxcomment"># Wenn der tuersteher true zurück gibt wird alles gesetzt<br />  # und verschickt<br />  </span><span class="syntaxkeyword">if(</span><span class="syntaxdefault">tuersteher</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$inhalt</span><span class="syntaxkeyword">) AND </span><span class="syntaxdefault">tuersteher</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$from</span><span class="syntaxkeyword">)<br />  </span><span class="syntaxcomment">#  AND preg_match('/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i',$email)<br />  # irgendwo kam die funktion 'is_mail' zu wort,<br />  # diese existiert nicht, deshalb habe ich hier mal ersatzweise ein prüfmuster erstellt<br />  # wenn die email gecheckt werden soll einfach die Zeile aktivieren<br />  # ACHTUNG: dieser FIlter ist nicht 100% genau<br />   </span><span class="syntaxkeyword">)<br />  {<br />    </span><span class="syntaxdefault">$empfaenger </span><span class="syntaxkeyword">= </span><span class="syntaxstring">"webmaster@mannchristian.de"</span><span class="syntaxkeyword">;<br />    </span><span class="syntaxdefault">$betreff    </span><span class="syntaxkeyword">= </span><span class="syntaxstring">"Anfrage zur Webseite: "</span><span class="syntaxkeyword">;<br />    </span><span class="syntaxcomment"># htmlentities maskiert alle Sondezreichen so das<br />    # HTML und PHP Code ihre Wirkung verlieren<br />    </span><span class="syntaxdefault">$nachricht  </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">htmlentities</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$inhalt</span><span class="syntaxkeyword">);<br />    </span><span class="syntaxdefault">$from       </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">htmlentities</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$email</span><span class="syntaxkeyword">);<br /><br />    </span><span class="syntaxdefault">mail</span><span class="syntaxkeyword">( </span><span class="syntaxdefault">$empfaenger</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$betreff</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$nachricht</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$from </span><span class="syntaxkeyword">);<br /><br />    echo </span><span class="syntaxstring">"<br />    <h2>Vielen Dank!</h2><br />    <p>Ihre Nachricht wurde erfolgreich verschickt.</p>"</span><span class="syntaxkeyword">;<br />  }<br />  </span><span class="syntaxcomment"># Gibt der Türsteher Alarm weisen wir den Besucher freundlich darauf hin:<br />  </span><span class="syntaxkeyword">else<br />  {<br />    echo </span><span class="syntaxstring">"<br />      <p>Leider sind bestimmte Daten von Ihnen von unseren Filter als<br />      gef&auml;hrlich identifiziert worden, bitte &uuml;berpr&uuml;fen sie<br />      Ihre Daten.</p>"</span><span class="syntaxkeyword">;<br />  }<br />}<br /></span><span class="syntaxdefault">?><br /></span>  </article><br /></span>
  • Erstmal Danke schön für die gute Erklärung, war sehr verständlich alles so wie es sein sollte.


    Hätte da aber doch noch paar Fragen.


    Bei Formulare ist es da am besten das action attribute freizulassen, ich hatte früher mal $_SERVER['PHP_SELF']
    und dann bin ich auf $_SERVER['SCRIPT_NAME'] umgestiegen hab da gegoogelt.


    Ich hatte die Functionen hier nur reinkopiert, das man es hier seht. Habe die nämlich in einer extra Datei, die ich zulade.
    Die Function is_mail ist da auch drinnen, die habe ich jetzt verwendet und die schaut so aus:


    Code
    function is_mail ( $email )
    {
        $suchmuster = "/^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$/";
        $erg = preg_match ( $suchmuster, $email);
        return ( $erg > 0 );
    }


    Ist auch schön das auch mal was richtiges dabei war von mir :)


    Kann man das Formular so verwenden? Wie schauts da mit der Sicherheit aus, ich denke mal es geht.
    Ich weiß ein Captcha fehlt noch.

  • Wie beschrieben, die $_SERVER Variablen lassen sich manipulieren, also das Attribut bitte frei lassen oder den Dateinamen reinschreiben.


    Sören


    *hust*


    PHP
    <span class="syntaxdefault"><br />$name </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $email </span><span class="syntaxkeyword">=</span><span class="syntaxdefault">  $inhalt </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> false</span><span class="syntaxkeyword">;<br /><br /></span><span class="syntaxdefault">$name </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">''</span><span class="syntaxkeyword">;<br /></span><span class="syntaxcomment">//if (isset($_POST['name'])) $name = $_POST['name'];<br /><br /></span><span class="syntaxdefault">$email </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">''</span><span class="syntaxkeyword">;<br /></span><span class="syntaxcomment">//if (isset($_POST['email'])) $email = $_POST['email'];<br /><br /></span><span class="syntaxdefault">$inhalt </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">''</span><span class="syntaxkeyword">;<br /></span><span class="syntaxcomment">//if (isset($_POST['inhalt'])) $inhalt = $_POST['inhalt'];<br /></span><span class="syntaxdefault"> </span>
  • Ich würde auf gar keine $_SERVER-Variabeln vertrauen. Entweder gar keine Angabe oder fix.
    Server-Variabeln lassen sich nämlich eigentlich alle gut Manipulieren :/


    anstelle von deiner is_mail() Funktion würde ich PHP das mahen lassen:

    PHP
    <span class="syntaxdefault">filter_var</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'bob@example.com'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> FILTER_VALIDATE_EMAIL</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span>

    Gibt false zurück, wenn es kein Fehler ist und die E-Mail-Adresse, wenn diese gültig ist.


    Captchas sind Müll.
    Nerven den Besucher mehr, als das sie nützen.
    Versuch dir lieber ne schöne Alternative auszudenken. Ich amche meist 2 Radiobuttons in jeweils nem Label mit der Klasse "radio".
    Diese Beschrifte ich dann mit "Gender" und lasse sie via CSS ausblenden. Stört den Benutzer nicht und ist eigentlich sehr effektiv.

  • Oder das Feld für die E-Mailadresse 'azurgkaura' nennen, dann ein verborgenes Feld mit Namen 'mail' erstellen, ein Spambot wird 'mail' ausfüllen aber ein Besucher kann es nicht sehen.


    Außerdem braucht ein Spambot zum Ausfüllen eines Formulars maximal 2-3 Sekunden, ein Besucher hier mindestens 30 Sekunden.

  • Die Sache mit der Zeit ist aber auch sehr.. Grenzwertig :/
    Was sit, wenn ich mich in einem Feld vertippe und wieder zurück komme? Dann sind es vllt auch nur 2 Sekunden die ich noch brauche.
    Oder der Spam-Bot manipuliert deine Zeit.. :/

  • Sarkkan


    Wie setze ich den Filter ein, die email <!-- e --><a href="mailto:bob@example.com">bob@example.com</a><!-- e --> mit einer $var austauschen
    oder gehört die so wie du sie geschrieben hast?


    Das mit den Radiobuttons hört sich gar net mal so schlecht an, könntest du mir da ein
    Codebeispiel posten?


    Flow Snow


    Hat das azurgkaura eine genauere Bedeutung oder einfach nur wischwasch das es der Spambot nicht kennt.
    Und das unsichtbare Feld per Hidden gleich danach

  • Zitat von &quot;Sören&quot;


    Hm?


    Die Variablen werden erst mit false definiert und dann alle noch mal mit ' ', ist das nicht völlig sinnfrei?^^


    Das azurgkaura hat keine Bedeutung, nur in so fern das ein Spambot das ignorieren wird, ist aber an sich auch irgendwie cool *_*

  • Zitat von &quot;chris80&quot;

    Sarkkan
    [...]
    Das mit den Radiobuttons hört sich gar net mal so schlecht an, könntest du mir da ein
    Codebeispiel posten?
    [...]


    Klar :)

    PHP
    <span class="syntaxdefault"></span><span class="syntaxkeyword"><!-- </span><span class="syntaxdefault">HTML CODE </span><span class="syntaxkeyword">--><br /><</span><span class="syntaxdefault">form</span><span class="syntaxkeyword">><br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword"><</span><span class="syntaxdefault">label class</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"radio"</span><span class="syntaxkeyword">><br /></span><span class="syntaxdefault">        </span><span class="syntaxkeyword"><</span><span class="syntaxdefault">input type</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"radio"</span><span class="syntaxdefault"> name</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"gender"</span><span class="syntaxdefault"> value</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"male"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">/><br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword"></</span><span class="syntaxdefault">label</span><span class="syntaxkeyword">><br /></span><span class="syntaxdefault">    <br />    </span><span class="syntaxkeyword"><</span><span class="syntaxdefault">label class</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"radio"</span><span class="syntaxkeyword">><br /></span><span class="syntaxdefault">        </span><span class="syntaxkeyword"><</span><span class="syntaxdefault">input type</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"radio"</span><span class="syntaxdefault"> name</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"gender"</span><span class="syntaxdefault"> value</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"female"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">/><br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword"></</span><span class="syntaxdefault">label</span><span class="syntaxkeyword">><br />[...]<br /></</span><span class="syntaxdefault">form</span><span class="syntaxkeyword">><br /><br /></span><span class="syntaxcomment">/*** CSS CODE ***/<br /></span><span class="syntaxdefault">label</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">radio </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    display</span><span class="syntaxkeyword">:</span><span class="syntaxdefault"> none</span><span class="syntaxkeyword">;<br />}<br /><br /></span><span class="syntaxcomment"># PHP CODE<br /></span><span class="syntaxkeyword">if(empty(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'gender'</span><span class="syntaxkeyword">])){<br /></span><span class="syntaxdefault">    mail</span><span class="syntaxkeyword">(...);<br />}</span><span class="syntaxdefault"> else </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment">// Muss nicht, aber kann ^^ Bin eben sehr neugierig :D<br /></span><span class="syntaxdefault">    mail</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"to@me.de"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">"Konaktformular - Spamverdacht"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">"Diese Nachricht steht unter Spam-Verdacht! \r\n "</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">print_r</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_SERVER</span><span class="syntaxkeyword">).</span><span class="syntaxstring">" \r\n "</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$message</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">...);<br />}<br /></span><span class="syntaxdefault"> </span>

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!