Antworten auf deine Fragen:
Neues Thema erstellen

Hilfe bei PHP-Kontaktformular

BeBa

Nicht mehr ganz neu hier

Hallo Forum-Gemeinde,

mittels eines PHP-Einsteigerbuches habe ich versucht ein kleines Kontaktformular zu programmieren. Dabei sollten Name und E-Mail als Pflichtfelder sein und ein Rechen-Captcha wäre auch ganz net. Da ich aber das mit den Pflichtfeldern schon nicht ganz hinbekomme, habe ich noch kein Captcha eingebaut.

Vllt. kann sich einer mal meinen HTML- und PHP-Code ansehen. Ich finde keinen Fehler mehr...

HTML:
<form action="dankekon.php" method="post"><table width="100%" border="0" cellspacing="2" cellpadding="2">
      <tr>
        <td align="right">Ihr Name*:</td>
        <td align="left">
              <input type="text" name="name" />
        </td>
      </tr>
      <tr>
        <td align="right">Ihre E-Mail-Adresse*:</td>
        <td align="left">
                <input type="text" name="email" />
        </td>
      </tr>
      <tr>
        <td align="right">Ihre Telefonnummer:</td>
        <td align="left">
          <input type="text" name="telefon" />
        </td>
      </tr>
      <tr>
        <td align="right">Ihre Nachricht:</td>
        <td align="left">
          <textarea name="message" cols="45" rows="5"></textarea>
        </td>
      </tr>
      <tr>
        <td align="right"><font style="font-size:10px; font-style:italic;">*Pflichtfeld</font></td>
        <td align="left">&nbsp;</td>
      </tr>
      <tr>
        <td align="right"></td>
        <td align="left">
          <input type="submit" class="button" value="Senden" />
        </td>
      </tr>
    </table></form>
PHP:
<?php
    $name=$HTTP_POST_VARS['name'];
    $email=$HTTP_POST_VARS['email'];
    $telefon=$HTTP_POST_VARS['telefon'];
    $message=$HTTP_POST_VARS['message'];
    if($name!=="")  {
        echo("Bitte geben Sie Ihren Namen an<br>");
    }
    if($email!=="")  {
       $mailtext="Name: ";
       $mailtext.=$name;
       $mailtext.="\n";
       $mailtext="E-Mail-Adresse: ";
       $mailtext.=$email;
       $mailtext.="\n";
       $mailtext="Telefonnummer: ";
       $mailtext.=$telefon;
       $mailtext.="\n";
       $mailtext="Nachricht: ";
       $mailtext.=$message;
       $absender="From:";
       $absender.=$email;
       mail("best84@gmx.de"."Anfrage über das Kontaktformular"."$mailtext"."$absender");
       echo("Ihre E-Mail wurde erfolgreich versendet");
    }
    else  {
        echo("Sie haben keine E-Mail-Adresse angegeben<br>");
        echo("<a href='kontakt.html'>zurück zum Kontaktformular</a>");
    }
?>
Schicke ich das Formular leer ab, erscheint nur die Fehlermeldung mit dem Namen und das mein Formular erfolgreich versendet wurde. Ich bekomme auch eine E-Mail, in der nichts drin steht.

Würde mich echt über hilfreiche Tipps freuen...
 

P

PJBlack

Guest

AW: Hilfe bei PHP-Kontaktformular

Salve ...

wie alt ist Dein Einsteigerbuch ?

Benutze $_POST['POST Daten'] oder $_REQUEST['GET-POST-COOKIE Daten'] ...

if($name!=="") {
echo("Bitte geben Sie Ihren Namen an<br>");
}

Also wenn die Eingabe NICHT leer ist soll ich nochmal eingeben ???
 

hub

nicht ganz neu hier

AW: Hilfe bei PHP-Kontaktformular

Moin moin,
mein Vorredner hat zumindest bei der Abfrage der Daten recht.
Ich vermute, du testest mit einer PHP-Version 5.? .
HTTP_POST_VARS gibt es seit der PHP-Version 5 nicht mehr. Dein Buch scheint leider nicht mehr ganz so aktuell zu sein, versuche es mal mit

PHP:
$name=$_POST['name'];
$email=$_POST['email'];
$telefon=$_POST['telefon'];
$message=$_POST['message'];

Der Rest sieht für den Anfang ja schon ganz gut aus, also viel Spaß beim Experimentieren :)

Gruß Ulli

Brille vergessen: Mit seinem Zitat hat er auch recht, sorry!
 
Zuletzt bearbeitet:

Dobi78

Wen interessiert's?

PSD Beta Team
AW: Hilfe bei PHP-Kontaktformular

Da gab es ein tolles Tutorial von Pascal Bajorat leider finde ich es nicht mehr, aber hab hier nur den Namen des Videofiles! Vielleicht hat Jemand mehr Glück mit der Suche:
"videotraining-videofile-19774"
 

vincitore

Aktives Mitglied

AW: Hilfe bei PHP-Kontaktformular

was du auch noch machen könntest, wäre ein if(isset($_POST['XX']))-Abfrage vorm Variablenspeichern (XX als Platzhalter für die einzelnen Übergabenamen)
Die meisten Server ignorieren es zwar, wenn ein $_POST, welches nicht übergeben wurde, in einer Variable gespeichert wird, mache geben aber auch eine hübsche Fehlermeldung aus ;).
 

BeBa

Nicht mehr ganz neu hier

AW: Hilfe bei PHP-Kontaktformular

Hey,

erstmal danke für die ersten Tipps. Mein Buch scheint dann wohl zu alt zu sein
frown.png


Das mit $_POST habe ich angepasst. Leider überträgt er mir aber immer noch keine Daten. Nur das, was in der "Message"-Box reingeschrieben wird, erscheint in der Mail.

Wie genau muss ich dann ein Pflichtfeld anlegen?
 

Duddle

Posting-Frequenz: 14µHz

AW: Hilfe bei PHP-Kontaktformular

Mich wundert es, dass überhaupt eine Mail geschickt wird. An der Stelle
PHP:
       mail("deine@adresse.de"."Anfrage über das Kontaktformular"."$mailtext"."$absender");
benutzt du Punkte statt Kommas. Punkte konkatenieren / verbinden Zeichenketten miteinander, es wird also eine lange Zeichenkette an mail() übergeben. Du willst aber Kommas, welche die Parameter der Funktion untereinander abtrennen.

Das Prinzip von Pflichtfeldern im Allgemeinen ist aber sehr klar: falls eine Variable nicht den gewünschten Inhalt hat (in deinem Fall nicht-leer), geht der Code einen anderen Weg als im erfolgreichen Fall. Das heißt, du könntest abbrechen oder mit der Funktion header() umleiten.

Zum Debuggen hilft es immer, sich die aktuellen Werte der Variablen ausgeben zu lassen, dann kannst du viel besser nachvollziehen was wo hängt.


Duddle
 

BeBa

Nicht mehr ganz neu hier

AW: Hilfe bei PHP-Kontaktformular

Das mit den Punkten hab ich schon bemerkt und in Kommas geändert. Ankommen tut trotzdem nix.

Wie lass ich mir die Werte der Variablen ausgeben?
 

hub

nicht ganz neu hier

AW: Hilfe bei PHP-Kontaktformular

Moin,
ich hab deinen Code mal erweitert. Diese Prüfung ist nur ein Lösungsansatz, der dir die Wirkungsweise erklären soll. Man kann sicher genauer und individueller prüfen, gerade bei der Email-Adresse, Telefon ...
PHP:
<?php
/**
 *
 * prüft, ob der string eine mindestlänge hat.
 * wird die länge nicht angegeben, ist der standard-wert = 3
 * gibt true zurück, wenn der string mindestens x zeichen lang ist, sonst false
 *
 * @param string $value         
 * @param int $length         
 * @return boolean
 */
function checkString($value, $length = 3)
{
 return strlen ( $value ) >= $length;
}
echo "<pre>" . print_r ( $_POST, true ) . "</pre>";
$name = $_POST [ 'name' ];
$email = $_POST [ 'email' ];
$telefon = $_POST [ 'telefon' ];
$message = $_POST [ 'message' ];
 
// var für eventuelle Fehler
$errorString = '';
// für die Zusammenfassung der fehler, true = ich kann senden
$kannSenden = true;
// hier die prüfungen:
$ckName = checkString ( $name, 4 );
if ( ! $ckName )
{
 // damit der user weiss, was falsch ist
 $errorString .= 'Dein Name ist zu kurz!<br />';
 // fehler, also nicht senden
 $kannSenden = false;
}
$ckTelefon = checkString ( $telefon, 6 );
if ( ! $ckTelefon )
{
 $errorString .= 'Deine Telefonnummer kann nicht stimmen!<br />';
 $kannSenden = false;
}
$ckEmail = checkString ( $email, 6 );
if ( ! $ckEmail )
{
 $errorString .= 'Ist das wirklich deine Email-Adresse?<br />';
 $kannSenden = false;
}
// hier prüfen, ob irgendwo ein fehler festgestellt wurde
if ( $kannSenden )
{
 $mailtext = "Name: ";
 $mailtext .= $name;
 $mailtext .= "\n";
 $mailtext = "E-Mail-Adresse: ";
 $mailtext .= $email;
 $mailtext .= "\n";
 $mailtext = "Telefonnummer: ";
 $mailtext .= $telefon;
 $mailtext .= "\n";
 $mailtext = "Nachricht: ";
 $mailtext .= $message;
 $absender = "From:";
 $absender .= $email;
 mail ( "best84@gmx.de", "Anfrage über das Kontaktformular", $mailtext, $absender );
 echo ( "Ihre E-Mail wurde erfolgreich versendet" );
} else
{
 echo ( $errorString );
 echo ( "<a href='kontakt.html'>zurück zum Kontaktformular</a>" );
}
?>

Gruß Ulli
 
Zuletzt bearbeitet:

BeBa

Nicht mehr ganz neu hier

AW: Hilfe bei PHP-Kontaktformular

So, also ich hab nochmal bissl rumprobiert. Ich habe es jetzt immerhin geschafft, dass er das Formular nicht absendet, wenn "Name" und "E-Mail-Adresse" nicht angegeben sind. Allerdings schickt er es ab, wenn eines der beiden Felder ausgefüllt ist. Sollte auch nicht sein ;)

Hier mein neuer Code:
PHP:
<?php
    $name=$_POST['name'];
    $email=$_POST['email'];
    $telefon=$_POST['telefon'];
    $message=$_POST['message'];
    if(empty($_POST['name']) )
{
   echo "Bitte geben Sie Ihren Namen an!<br>";
}
    if(empty($_POST['email']) )  {
       echo("Sie haben keine E-Mail-Adresse angegeben<br>");
       echo("<a href='kontakt.html'>zurück zum Kontaktformular</a>");
    }
    else  {
       $mailtext="Name: ";
       $mailtext.=$name;
       $mailtext.="\n";
       $mailtext="E-Mail-Adresse: ";
       $mailtext.=$email;
       $mailtext.="\n";
       $mailtext="Telefonnummer: ";
       $mailtext.=$telefon;
       $mailtext.="\n";
       $mailtext="Nachricht: ";
       $mailtext.=$message;
       $absender="From:";
       $absender.=$email;
       mail("benny@strueh.net","Anfrage &uuml;ber das Kontaktformular","$mailtext","$absender");
        echo("Ihre E-Mail wurde erfolgreich versendet");
    }
?>

Auch habe ich immer noch das Problem, dass er mir, wenn ich es korrekt ausfülle und absende, nur das Nachrichtenfeld übermittelt...

Bin da grad echt am Verzweifeln. :?:

@Ulli: Danke, aber das sieht auf den ersten Blick echt kompliziert aus, bringt mich aber auf einen anderen Gedanken: Wie schaff ich es, dass er die Eingaben überprüft? Also zb., dass im Telefonfeld, wenn was drin steht, nur Zahlen drin stehen und beim Mailfeld zb. das @-Zeichen?
 

hub

nicht ganz neu hier

AW: Hilfe bei PHP-Kontaktformular

Moin,
zu deinem ersten Problem - sorry, ich hab das nicht getestet - es fehlen ein paar Punkte :)
$a .= 'test' bedeutet $a = $a . 'test' . Lässt du den Punkt weg, wird der Inhalt überschrieben:
PHP:
       $mailtext="Name: ";
       $mailtext.=$name;
       $mailtext.="\n";
       $mailtext="E-Mail-Adresse: "; // <----
       $mailtext.=$email;
       $mailtext.="\n";
       $mailtext="Telefonnummer: "; // <----
       $mailtext.=$telefon;
       $mailtext.="\n";
       $mailtext="Nachricht: "; // <----
       $mailtext.=$message;
       $absender="From:";
       $absender.=$email;

richtig:
PHP:
       $mailtext="Name: ";
       $mailtext.=$name;
       $mailtext.="\n";
       $mailtext.="E-Mail-Adresse: "; // <----
       $mailtext.=$email;
       $mailtext.="\n";
       $mailtext.="Telefonnummer: "; // <----
       $mailtext.=$telefon;
       $mailtext.="\n";
       $mailtext.="Nachricht: "; // <----
       $mailtext.=$message;
       $absender="From:";
       $absender.=$email;

Mit der kleinen Funktion wollte ich dir zeigen, wie man sich das Leben leichter macht. die kannst du abwandeln und durch einfache String - Funktionen, Filter oder auch Regular Expressions erweitern.
z.B. so
PHP:
function checkEmail($value)
{
 // kann es eine email sein?
 if (strlen ( $value ) >= 8)
 {
  $a = strpos($value, '@');
  $b = strpos($value, '.');
  // is @ vorhanden und nicht auf pos 1 und ist ein punkt hinter dem @
  return $a > 0 && $b > $a;
 } else
 {
  return false;
 }
}
// oder einfacher ( leider etwas dumm, da PHP dort nen bug hat):
function checkEmail($value) {
    return filter_var($value, FILTER_VALIDATE_EMAIL) && preg_match('/@.+\./', $value);
}

Gruß Ulli
 

BeBa

Nicht mehr ganz neu hier

AW: Hilfe bei PHP-Kontaktformular

Hallo Ulli,

danke für Deine Hilfe. Ich bekomme jetzt in der Mail ne Ausgabe.

Das mit der Funktion habe ich leider immer noch nicht ganz kapiert... Wäre aber cool, wenn mein Formular erkennt, ob es ne Telefonnummer is, was im Feld "Telefon" steht und das gleiche bei E-Mail.

Das mit den Pflichtfeldern haut auch noch nicht ganz hin. Er sendet das Formular auch ab, wenn eines der beiden Pflichtfelder ausgefüllt ist...
 

Duddle

Posting-Frequenz: 14µHz

AW: Hilfe bei PHP-Kontaktformular

Du scheiterst hier an Grundlagen. Wenn du mehrere, miteinander verknüpfte Bedingungen hast, musst du die auch im Code miteinander verknüpfen bzw. sie schachteln.
PHP:
<?php
if($foo == true) {
  //foo true
}

if($bar == true) {
  //bar true
} else {
  //bar false
}
?>
Hier hat $foo keinerlei Einfluss auf die nächste if-Unterscheidung. Entweder verknüpfen
PHP:
<?php
if($foo == true && $bar == true) {
  //foo und bar true
} else {
  //bar false
}
?>
oder schachteln
PHP:
<?php
if($foo == true) {
    //foo true

    if($bar == true) {
	//foo und bar true
    } else {
	//bar false
    }
}
?>
Andere Scripte bevorzugen es, eine Fehler-Variable zu führen, dann muss nicht ewig geschachtelt werden:
PHP:
<?php
$fehler = false;
if($foo == true) {
  //foo true
} else {
  $fehler = true;
}

if($bar == true) {
  //bar true
} else {
  $fehler = true;
}

if(!$fehler) {
  //alles okay
}
?>
Für die Validierung selbst gibt es unzählige, fertige Lösungen und Tutorials. Wenn du PHP 5.2 und höher besitzt, gibt es auch eingebaute Funktionen für genau diesen Zweck.


Duddle
 

hub

nicht ganz neu hier

AW: Hilfe bei PHP-Kontaktformular

Moin,
für beide deine Probleme würde ich dir vorschlagen, das Script aus dem Post #9 zu zerlegen und zu verstehen (füge dort bitte dann die fehlenden Punkte ein :( ), was dort passiert.
Das deine Mail trotzdem rausgeht, hängt an der Logik.
Wenn du 3 Pflichtfelder hast und nur eins einen Fehler hat, muss deine Konstruktion false ergeben, damit die Mail nicht gesendet wird.

Ein Beispiel:
$ergebnisName = ist das ein Name?
$ergebnisMail = ist das eine Emailadresse?
$ergebnisTelefon = ist das Eine Nummer?

Diese 3 Ergebnisse musst du jetzt mit "und" verknüpfen (so, wie ich es
im Script gemacht habe, ist es nicht gleich ersichtlich, funktioniert aber genauso):
PHP:
if ( $ergebnisName && $ergebnisMail && ergebnisTelefon) {
    mail (...);
} else {
    echo "das war nix";

Die drei Fragen, die nach den Variablen stehen, kannst du mit jeweils einer passenden Funktion ersetzen, siehe Script. Sicher könntest du die 3 Variablen jetzt durch lange Prüfungen ersetzen und damit auf die Funktionen verzichten. Aber das halte ich für keine gute Idee. Du wirst schnell die Übersicht verlieren und eine Fehlersuche wird zur Katastrophe.

So eine Funktion ist wie ein selbst gebauter PHP Befehl, nur, das du bestimmst, was passieren soll. Auf der Seite von PHP gibt es in der Hilfe eine gute Einführung zu diesem Thema.

In diesem Fall gibst du der Funktion, was sie prüfen soll, und die sagt dann richtig oder falsch.
Ich glaube, wenn du dieses Prinzip verstanden hast, wirst du noch ganz andere Sachen bewerkstelligen.

Melde dich hier wieder zu Wort, wenn du das soweit verdaut hast, ich behalte die Seite im Auge ...

Gruß Ulli
 

msa1989

Bin da

AW: Hilfe bei PHP-Kontaktformular

@Beba

Du kannst dir mal diese Seite anschauen.
Das ist ein sehr einfaches Kontaktformular mit Jquery validation. Diese funktioniert wirklich gut, und du musst dir selbst keine Gedanken mehr machen über die Überprüfung ob das eine E-Mail etc. ist.
Einfach PHP Überprüfung ob die Variablen leer sind reicht dann in der Regel vollkommen.

Nicht abschrecken lassen, dass dieses Formular auf Twitter Bootstrap basiert. Das sind lediglich die Styles. Auch ohne Bootstrap kannst du das prima verwenden. Musst es halt dann selbst stylen
 

BeBa

Nicht mehr ganz neu hier

AW: Hilfe bei PHP-Kontaktformular

Hey Leute,

ich muss das Thema hier nochmal nach oben holen.

Hab mein Formular jetzt soweit gut hinbekommen. Zum Abschluss hätte ich gerne noch ein Rechen-Captcha zur Sicherheit. Leider war ich dabei bislang trotz Tutorials hilflos...

Kann mir dabei noch jemad helfen?

Hier nochmal die aktuellen Codes:

HTML:
HTML:
<form action="dankekon.php" method="post"><table width="100%" border="0" cellspacing="2" cellpadding="2">
          <tr>
            <td align="right"> Name*:</td>
            <td align="left">
              <input type="text" name="name" />
            </td>
          </tr>
          <tr>
            <td align="right">Stra&szlig;e*:</td>
            <td align="left">
              <input type="text" name="strasse" />
            </td>
          </tr>
          <tr>
            <td align="right">PLZ / Wohnort*:</td>
            <td align="left">
              <input type="text" name="ort" />
            </td>
          </tr>
          <tr>
            <td align="right">E-Mail-Adresse*:</td>
            <td align="left">
              <input type="text" name="email" />
            </td>
          </tr>
          <tr>
            <td align="right">Telefonnummer:</td>
            <td align="left">
              <input type="text" name="telefon" />
            </td>
          </tr>
          <tr>
            <td align="right">Nachricht:</td>
            <td align="left">
              <textarea name="message" cols="45" rows="5"></textarea>
            </td>
          </tr>
          <tr>
            <td align="right"><font style="font-size:10px; font-style:italic;">*Pflichtfeld</font></td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="right"></td>
            <td align="left">
              <input type="submit" class="button" value="Senden" />
            </td>
          </tr>
    </table></form>
PHP:
PHP:
<?php
    // Variablen festlegen
    $name=$_POST['name'];
    $strasse=$_POST['strasse'];
    $ort=$_POST['ort'];
    $email=$_POST['email'];
    $telefon=$_POST['telefon'];
    $message=$_POST['message'];
    $number=$_POST['number'];
    $arithmetic=$_POST['arithmetic'];
    
    // Überprüfen, ob Pflichtfelder ausgefüllt sind
    if (empty($_POST['name']) || empty($_POST['strasse'])|| empty($_POST['ort'])|| empty($_POST['email'])) {
    echo "Bitte füllen Sie alle Pflichtfelder aus!<br><br><a href='kontakt.html'>zurück zum Formular</a>";
    }
    
    // Mail versenden
    else  {
       $mailtext="Name: ";
       $mailtext.=$name;
       $mailtext.="\n";
       $mailtext.="Straße: "; // <----
       $mailtext.=$strasse;
       $mailtext.="\n";
       $mailtext.="PLZ / Wohnort: "; // <----
       $mailtext.=$ort;
       $mailtext.="\n";
       $mailtext.="E-Mail-Adresse: "; // <----
       $mailtext.=$email;
       $mailtext.="\n";
       $mailtext.="Telefonnummer: "; // <----
       $mailtext.=$telefon;
       $mailtext.="\n";
       $mailtext.="Nachricht: "; // <----
       $mailtext.=$message;
       $absender="From:";
       $absender.=$email;
       mail("info@mediendesign-strueh.de","Anfrage mit Kontaktformular","$mailtext","$absender");
       echo("Ihre E-Mail wurde erfolgreich versendet. Ich werde mich schnellstm&ouml;glich um Ihr Anliegen k&uuml;mmern und mich mit Ihnen in Verbindung setzen.");
    }
?>
Mein PHP-Code steht dabei jetzt innerhalb des <body>-Tags. Baue ich mithilfe des Tutorials www.stoppt-den-spam.info das Captcha ein, müsste der PHP-Teil ganz nach oben noch vor <DOCTYPE...>. Dann habe ich aber keine Ausgabe mehr auf der Seite, wenn eine Fehlermeldung erscheinen soll. Baue ich alles in den <body>-Tag, funktioniert das Captcha nicht...
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben