• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Kontaktformular spam schutz / Pflichtfelder Hilfe

miraculix1234

Neues Mitglied
Hi Leute , ich habe ein Kontaktformular mit mühe erstellt...

Nun brauch ich darin erstens noch einen Spam Schutz , damit keiner mein Formular für Böse Zwecke verwendet und zweitens eine überprüfung der Zeilen
Name und Email

Quelltext aus der Seite in der man einträgt:

PHP:
       <div id="apDiv10">           
<div id="apDiv12"></div>  
<div id="apDiv13"><form id="form1" name="form1" method="post" action="Kontaktform.php">     
<p>&nbsp;</p>      
<p>&nbsp;</p>      
<table width="321" border="0" align="left" cellpadding="6"><tr>          
<td width="73" height="41" id="SpalteA"><label for="name">Name*</label></td>         <td colspan="2" id="SpalteAA"><input name="name" type="text" id="name" size="35" maxlength="90" /></td>
</tr>        
<tr>
<td id="SpalteB"><label for="email">Email*</label></td>
<td colspan="2" id="SpalteBB"><input name="email" type="text" id="email" size="35" maxlength="90" /></td>        
</tr>          
<tr> 
<td id="SpalteC"><label for="id">Betreff</label></td>          
<td colspan="2" id="SpalteCC"><textarea name="Betreff" cols="25" rows="1" id="nachricht">        </textarea></td>
<tr><td id="SpalteE"><label for="nachricht">Nachricht</label></td>          
<td colspan="2" id="SpalteEE"><textarea name="nachricht" cols="30" rows="10" id="nachricht"></textarea></td> 
</tr>        
<tr>          
<td id="SpalteF">&nbsp;</td>          
<td width="110" class="kleineschrift" id="SpalteFF">*Pflichtfelder</td>          
<td width="94" class="kleineschrift" id="SpalteFF"><input type="submit" name="senden" id="senden" value="Senden" /></td>
</tr>        
<tr>          
<td id="SpalteG">&nbsp;</td>          
<td colspan="2" id="SpalteGG">&nbsp;</td>        
</tr>      
</table>
</form>    
<p>&nbsp;</p>    
<p>&nbsp;</p>    
<p>&nbsp;</p>  
</div>
Code der Kontaktform.php Seite welche dadurch aufgerufen wird.

PHP:
<?php
 
/* Fehlerausgabe */
error_reporting(E_ALL);
ini_set('display_errors', TRUE); // evtl. hilfreich
 
/* Betreff und Email Variable */
 $emailBetreff = 'Kontakt';
    $webmaster = 'Emailadresse'.de';
 
/* Emailform Daten */
 $nameFeld = $_POST['name'];
 $emailFeld = $_POST['email'];
 $idFeld = $_POST['Betreff'];
 $nachrichtFeld = $_POST['nachricht'];
 
 $body = <<<EOD
Name: $nameFeld
Email: $emailFeld
Betreff: $idFeld
Nachricht: $nachrichtFeld
EOD;
 $headers = "From: $emailFeld\r\n";
 $headers .= "Content-type: text/html\r\n";
 $headers = mail($webmaster, $emailBetreff, $body, $headers);
?>

Wie wäre da ein sinnvoller Spamschutz und ein Abfrage der Pflichtfelder am besten umzusetzen ?

LG Miraculix1234
 
Zudem solltest du dich von den Tabellen zu Designzwecken abwenden und das ganze mit divs und CSS lösen, was nicht nur richtig, sondern auch einfacher ist.
 
Überall liesst man doch was anderes.
Wieso <div> statt <table>?

Ich dachte die Zeit der Div-Layer sei vorbei oO
 
Überall liesst man doch was anderes.
Wieso <div> statt <table>?
Weil DIV ein Element ohne semantische Bedeutung ist, mit dem Zweck, Elemente zu gruppieren.
Wohingegen TABLE ein Element mit semantischer Bedeutung ist, mit dem Zweck, tabellarische Daten anzuzeigen.
Wo sind noch gleich die tabellarischen Daten in deinem Kontaktformular?

Ich dachte die Zeit der Div-Layer sei vorbei oO
In welcher alternativen Zeitlinie hat man dir das erzählt?
Es wird lediglich - richtigerweise - propagiert, dass man DIVs nicht unnütz zuhilfe nehmen soll, wenn ein semantisch korrektes Box-Element die gleiche Layoutaufgabe übernehmen kann.
Wenn auch das produzieren einer vermeidbaren DIV-Suppe falsch ist - Der Missbrauch einer tabelle zu Layoutzwecken ist schon länger noch falscher.

EDIT:
In deinem konkreten Fall wäre das korrekte Element zur beschriftung der Eingabefelder übrigens <label>
 
Div oder Tabelle .... war mir auch nicht ganz sicher was besser ist .... :oops:

Zu meinem Problem Pflichtfelder Prüfung
müsste jamit folgendem Code zu lösen sein ?


PHP:
 if(empty($_POST['name']) || empty($_POST['mail']) || empty($_POST['text']))
        {
            echo "Bitte gehen Sie <a href=\"javascript:history.back();\">
            zur&uuml;ck</a> und f&uuml;llen Sie alle Felder aus";
            // Fehlermeldung
        }

Also im ganzen dann so :
PHP:
<?php
 
/* Fehlerausgabe */
error_reporting(E_ALL);
ini_set('display_errors', TRUE); // evtl. hilfreich
/* Betreff und Email Variable */
 $emailBetreff = Kontakt ';
      $webmaster = '[email protected]';
 
/* Emailform Daten */
 $nameFeld = $_POST['name'];
 $emailFeld = $_POST['email'];
 $idFeld = $_POST['Betreff'];
 $nachrichtFeld = $_POST['nachricht'];
 
 if(empty($_POST['name']) || empty($_POST['email']) || empty($_POST['Betreff']))
        {
            echo "Bitte gehen Sie <a href=\"javascript:history.back();\">
            zur&uuml;ck</a> und f&uuml;llen Sie alle Felder aus";
            // Fehlermeldung
        }
 
 
 $body = <<<EOD
Name: $nameFeld
Email: $emailFeld
Betreff: $idFeld
Nachricht: $nachrichtFeld
EOD;
 $headers = "From: $emailFeld\r\n";
 $headers .= "Content-type: text/html\r\n";
 $headers = mail($webmaster, $emailBetreff, $body, $headers);
?>

So müsste das funktionieren ? oder ?

Grüsse Miraculix1234
 
Allerdings reichen einfache Leerzeichen als Eingabe zum absenden aus.
Ich würde die Felder noch validieren (Muss ich in meinen alten scripts noch nachziehen).

PHP:
$emailBetreff = Kontakt ';  //Wenn dir das mal kein Error auswirft
 
Hi Leute Problem ....ich hab das wie oben geschrieben nun eingefügt.Dann bin ichauf meine Seite gegangen und habe ein Feld im Formular leer gelassen und auf senden gedrückt , es ging ohne Fehler meldung ? Was nun ? hab ich es an der falschen stelle eingefügt ?? pls help
 
Ups Code vergessen
so sieht mein Code nun aus ....

PHP:
<?php
 
/* Fehlerausgabe */
error_reporting(E_ALL);
ini_set('display_errors', TRUE); // evtl. hilfreich
/* Betreff und Email Variable */
 $emailBetreff = 'Kontakt';
      $webmaster = '[email protected]';
 
/* Emailform Daten */
 $nameFeld = $_POST['name'];
 $emailFeld = $_POST['email'];
 $idFeld = $_POST['Betreff'];
 $nachrichtFeld = $_POST['nachricht'];
 
if(empty($_POST['name']) || empty($_POST['email']) || empty($_POST['Betreff']))
        {
            echo &quot;Bitte gehen Sie <a href=\&quot;javascript:history.back();\&quot;>
            zur&uuml;ck</a> und f&uuml;llen Sie alle Felder aus&quot;;
            // Fehlermeldung
        }
 
 
 $body = <<<EOD
Name: $nameFeld
Email: $emailFeld
Betreff: $idFeld
Nachricht: $nachrichtFeld
EOD;
 $headers = &quot;From: $emailFeld\r\n&quot;;
 $headers .= &quot;Content-type: text/html\r\n&quot;;
 $headers = mail($webmaster, $emailBetreff, $body, $headers);
?>
 
Nein hab irgendwie misst gebaut beim eingeben hier

So sieht der Bereich aus

PHP:
<?php


/* Fehlerausgabe */
error_reporting(E_ALL);
ini_set('display_errors', TRUE); // evtl. hilfreich

/* Betreff und Email Variable */

    $emailBetreff = 'Kontakt';
    $webmaster = '[email protected]';
    
/* Emailform Daten */

    $nameFeld = $_POST['name'];
    $emailFeld = $_POST['email'];
    $idFeld = $_POST['Betreff'];
    $nachrichtFeld = $_POST['nachricht'];
    
if(empty($_POST['name']) || empty($_POST['email']) || empty($_POST['Betreff']))
        {
            echo "Bitte gehen Sie <a href=\"javascript:history.back();\">
            zur&uuml;ck</a> und f&uuml;llen Sie alle Felder aus";
            // Fehlermeldung
        }
 


    $body = <<<EOD
Name: $nameFeld
Email: $emailFeld
Betreff: $idFeld
Nachricht: $nachrichtFeld
EOD;

    $headers = "From: $emailFeld\r\n";
    $headers .= "Content-type: text/html\r\n";
    $headers = mail($webmaster, $emailBetreff, $body, $headers);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 
Der Code sollte zwar eine Fehlermeldung ausgeben, aber dann die Mail dennoch verschicken. Logisch steht da ja:

Code:
1. Wenn eines der Felder leer ist, gebe Fehlermeldung aus.
2. Versende (unabhängig davon) die Mail.
3. Gebe Restseite aus.

Da brauchst du vielleicht noch einen else-Teil für das if-Konstrukt.
 
Du meinst also

PHP:
if(empty($_POST['name']) || empty($_POST['email']) || empty($_POST['Betreff']))
        {
            echo "Bitte gehen Sie <a href=\"javascript:history.back();\">
            zur&uuml;ck</a> und f&uuml;llen Sie alle Felder aus";
            // Fehlermeldung
        }
else {
            echo "Nicht alle Pflichtfelder ausgefüllt !">
                    }

und es würde gehen ?? oder muss ich dem Script noch sagen das es nicht sendet ?
 
Hab es versucht mit dem Code :

PHP:
<?php
 
/* Fehlerausgabe */
error_reporting(E_ALL);
ini_set('display_errors', TRUE); // evtl. hilfreich
/* Betreff und Email Variable */
 $emailBetreff = 'Kontakt';
   $webmaster = '[email protected]';   
/* Emailform Daten */
 $nameFeld = $_POST['name'];
 $emailFeld = $_POST['email'];
 $idFeld = $_POST['Betreff'];
 $nachrichtFeld = $_POST['nachricht'];
 
if(empty($_POST['name']) || empty($_POST['email']) || empty($_POST['Betreff']))
        {
            echo "Bitte gehen Sie <a href=\"javascript:history.back();\">
            zur&uuml;ck</a> und f&uuml;llen Sie alle Felder aus";
            // Fehlermeldung
        }
else    echo "Nicht alle Pflichtfelder ausgefüllt !">
 
 
 $body = <<<EOD
Name: $nameFeld
Email: $emailFeld
Betreff: $idFeld
Nachricht: $nachrichtFeld
EOD;
 $headers = "From: $emailFeld\r\n";
 $headers .= "Content-type: text/html\r\n";
 $headers = mail($webmaster, $emailBetreff, $body, $headers);
?>

Sendet aber trotzdem ......
 
Wieso hast Du in dem Abschnitt zwar eine Bedingung drinne die prüft, ob ein Feld existiert, aber nicht ob dieses ausgefüllt wurde? Wieso sagt die Bedingung bei beiden Verzweigungen "Bitte alle Pflichtfelder ausfüllen"? Wieso steht das Versenden selbst nicht in einer Bedingung? So wie das derzeit aussieht ist es falsch. Bitte überdenke nochmal die Logik von dem was Du dort geschrieben hast.
 
Falsch:
PHP:
$x=1;
$y=1;
$z=1;
if(empty($x))
{
    echo $x; // Hier schickst du den Benutzer zurück zum Formular
}
else echo $y; // Hier gibst du einen Text aus
 
echo $z; // Dieser Text wird ausgegeben egal was bei der Abfrage oben passiert.

PHP:
$x=1;
$y=1;
$z=1;
if(empty($x))
{
    echo $x; // Wie vorhin
}
else
{
    echo $y; // Wie vorhin
    echo $z; // Dieser Text wird jetzt nur ausgegeben wenn $x nicht leer ist
}
 
bin ich nun richtiger ??? ich :oops: mich wie ein Brunnenputzer und merke wie unwissend ich immer noch bin ....

PHP:
<?php

/* Fehlerausgabe */
error_reporting(E_ALL);
ini_set('display_errors', TRUE); // evtl. hilfreich
/* Betreff und Email Variable */
 $emailBetreff = 'Magic Kontakt';
  $webmaster = '[email protected]'; 
 
/* Emailform Daten */
 $nameFeld = $_POST['name'];
 $emailFeld = $_POST['email'];
 $idFeld = $_POST['Betreff'];
 $nachrichtFeld = $_POST['nachricht'];
$nameFeld=1;
$y=1;
$z=1;
if(empty($nameFeld))
{
    echo $nameFeld; "Bitte gehen Sie <a href=\"javascript:history.back();\">
            zur&uuml;ck</a> und f&uuml;llen Sie alle Felder aus";
}
else
{
    echo $y; "Hallo Test";
    echo $z; "Danke für die Email";// Dieser Text wird jetzt nur ausgegeben wenn $x nicht leer ist
}
 $body = <<<EOD
Name: $nameFeld
Email: $emailFeld
Betreff: $idFeld
Nachricht: $nachrichtFeld
EOD;
 $headers = "From: $emailFeld\r\n";
 $headers .= "Content-type: text/html\r\n";
 $headers = mail($webmaster, $emailBetreff, $body, $headers);
?>
 
$nameFeld=1;
$y=1;
$z=1;
if(empty($nameFeld))
{
echo $nameFeld; "Bitte gehen Sie <a href=\"javascript:history.back();\">
zur&uuml;ck</a> und f&uuml;llen Sie alle Felder aus";
}
else
{
echo $y; "Hallo Test";
echo $z; "Danke für die Email";// Dieser Text wird jetzt nur ausgegeben wenn $x nicht leer ist
}
$body = <<<EOD
Name: $nameFeld
Email: $emailFeld
Betreff: $idFeld
Nachricht: $nachrichtFeld
EOD;
$headers = "From: $emailFeld\r\n";
$headers .= "Content-type: text/html\r\n";
$headers = mail($webmaster, $emailBetreff, $body, $headers);
?>
Wenn ich es verstanden habe läuft das nun doch so
1. Setze Werte für $nameFeld , $y und $z
2. Ist das $nameFeld leer ,dann gibden Text aus "Bitte gehen Sie ....." mit sprung marker zurück zur vorherigen Seite
ansonsten
3. gib den text "Hallo Test" und "Danke für die Email" und sende die Mail

Weiterhin geht es dann wieter mit dem Email versand , muss ich dem Script nicht sagen "Wenn Feld leer ist , überspringe das senden ?"
Eskommt auch der Text aus echo nameFeldnicht ... irgendwie läuft da was falsch und ich verzweifle , google konnte mir auch nicht helfen ... Ihr seit meine letzte hoffnung

Prüfe denn String $nameFeld
 
Nein, aber so wird ein Schuh draus:

PHP:
<?php

/* Fehlerausgabe */
error_reporting(E_ALL);
ini_set('display_errors', TRUE); // evtl. hilfreich
/* Betreff und Email Variable */
 $emailBetreff = 'Magic Kontakt';
  $webmaster = '[email protected]'; 
 
/* Emailform Daten */
 $nameFeld = $_POST['name'];
 $emailFeld = $_POST['email'];
 $idFeld = $_POST['Betreff'];
 $nachrichtFeld = $_POST['nachricht'];
$nameFeld=1;
$y=1;
$z=1;
if(empty($nameFeld))
{
    echo $nameFeld; "Bitte gehen Sie <a href=\"javascript:history.back();\">
            zur&uuml;ck</a> und f&uuml;llen Sie alle Felder aus";
}
else
{
    echo $y; "Hallo Test";
    echo $z; "Danke für die Email";// Dieser Text wird jetzt nur ausgegeben wenn $x nicht leer ist
 $body = <<<EOD
Name: $nameFeld
Email: $emailFeld
Betreff: $idFeld
Nachricht: $nachrichtFeld
EOD;
 $headers = "From: $emailFeld\r\n";
 $headers .= "Content-type: text/html\r\n";
 $headers = mail($webmaster, $emailBetreff, $body, $headers);
}
?>

Dann wird die E-Mail wirklich nur gesendet, wenn die Bedingung in "Danke für die E-Mail" springt.
 
Zurück
Oben