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

PHP-Formular mit Pflichtfeldern

roterpunkt

Neues Mitglied
Hallo zusammen!

Ich habe ein einfaches Kontaktformular erstellt. Ich habe mein Formular in einer HTML-Datei und die PHP-Datei extra (Code siehe unten).
Nach dem Absenden wird der Benutzer auf die Hauptseite weitergeleitet. So weit funktioniert alles einwandfrei, ich kann Daten eingeben und erhalte dann eine E-Mail, genauso wie ich es mir vorstelle.
Jetzt möchte ich zusätzlich alle drei Felder "Name", "E-Mail" und "Nachricht" als Pflichtfelder ausweisen, sodass eine Fehlermeldung angezeigt wird, wenn mindestens eins dieser Felder nicht ausgefüllt wurde. Zudem soll geprüft werden, ob die E-Mail-Adresse gültig ist.

Ich habe schon einiges rumexperimentiert, komme aber auf keinen grünen Zweig.

Ich freue mich auf Eure Antworten! Bitte beschreibt mir möglichst genau, was ich tun muss, ich bin Anfänger bei PHP.

Vielen Dank und viele Grüße,

Roter Punkt


Mein HTML-Code:
HTML:
<form action="/kontakt.php" method="post">
 <p>Dein Name:<br /><input name="name" type="text" size="30" maxlength="30" value=""/></p>
 <p>E-Mail: *<br /><input name="email" type="text" size="30" maxlength="40" value="" id="1" /></p>
 <p>Deine Nachricht an mich: *<br /><textarea name="nachricht" cols="50" rows="10"></textarea></p>
 <p>Bitte alle mit Stern markierten Felder ausfüllen!</p>
 <input type="submit" value="Jetzt absenden!"/>
 </form>

Und der PHP-Code dazu:
PHP:
<?php
$empfaenger = "[email protected]";
$absendername = $_POST["name"];
$absendermail = $_POST["email"];
$betreff = "Kontakt: Kommentar von $absendername";
$nachricht = $_POST["nachricht"];


$text = "Jemand hat von deiner Internetseite eine Kontaktanfrage verschickt:

        Name: $absendername
        Kontakt-E-Mail-Adresse: $absendermail.

        Nachricht:

        $nachricht";


mail($empfaenger, $betreff, $text, "From: $absendername <$absendermail>");

?>

<head>
<meta http-equiv="refresh" content="2; URL=http://www.meineinternetseite.de/">
</head>
<h2>Kontaktanfrage erfolgreich versendet</h2>
<h3>Weiterleitung erfolgt in 2 Sekunden</h3>
 
Hallo,

da die in zwei getrenten Dateien gemacht hast geht schon mal ein einfaches Affenformular nicht. Dies Sende die Daten an sich selber und prüft diese, wenn fehler wird das Formular wieder Angezeigt mit den alten eingaben aber wenn alles past wird die Mail Verschickt und ein OK angezeigt.

Du Könntest das per javascript machen wenn die dateien jetzt nicht noch umbauen möchtest, hier beispiel: SELFHTML: JavaScript / Anwendungsbeispiele / Formulareingaben berprfen

Cheffchen
 
Also ich nutze grundsätzlich zur Formularverarbeitung das "Affenformular". Hier mal ein bisschen Lesestoff dazu: Affenformular (Standardverfahren) - PHP.de Wiki Damit Du weißt, von was ich rede. Eine Überprüfung mit JavaScript ist zwar machbar, aber trotzdem musst Du die Eingaben zusätzlich mit PHP validieren, da JavaScript im Browser deaktiviert werden kann.

Und nochwas, bei Kontaktformularen die anschließend eine Email versenden, empfehle ich grundsätzlich den Einsatz eine Mail-Klasse, z.B. PHP-Mailer oder Swift. Ist einfacher zu handeln und weniger fehleranfällig.
 
Vielen Dank für Eure Antworten!

thuemmy, ich habe mir die Seite zum Affenformular durchgelesen, werde aber zugegebenermaßen nicht wirklich schlau daraus. Bei einem Affenformular muss also alles in einer einzigen Datei stehen? Ich hab mir aus dem Internet ein paar Beispiele für Affenformulare geholt und ausprobiert, die werden bei mir im Browser aber immer fehlerhaft angezeigt (da ist PHP-Code über oder unter dem Formular sichtbar). Ich vermute mal es verträgt sich was nicht mit meiner PHP-Version (4.4.9). Oder woran kann das liegen?
Nur wenn ich zwei separate Dateien habe wird mir das richtig angezeigt.

Ich würde dann auch die Daten nicht per Javascript, sondern per PHP validieren. Kann ich das in meine vorhandenen Dateien einbauen oder müsste das tatsächlich als Affenformular umbauen?
Und wie baue ich den PHP-Mailer ein?

Vielen Dank im Voraus!
 
Bei einem Affenformular muss also alles in einer einzigen Datei stehen?
Richtig.
Ich hab mir aus dem Internet ein paar Beispiele für Affenformulare geholt und ausprobiert, die werden bei mir im Browser aber immer fehlerhaft angezeigt (da ist PHP-Code über oder unter dem Formular sichtbar). Ich vermute mal es verträgt sich was nicht mit meiner PHP-Version (4.4.9). Oder woran kann das liegen?
An der Version wird es sicherlich nicht liegen, wobei die schon ein bisschen arg alt ist. Wenn Du eine Funktion nutzen würdest, die nicht in Version 4.4.9 vorhanden ist, dann würde der PHP-Parser einen Fehler (Fatal Error) anzeigen, aber niemals den PHP-Code ausliefern, zumindest wenn er richtig konfiguriert ist. Ich vermute eher, dass Du eventuell das PHP-Script nicht richtig einleitest.
PHP:
<p>Dies ist Text in HTML</p>
<?php
echo "<p>Hier ist zwar HTML-Text, der allerdings in PHP mittels echo generiert wird</p>";
?>
<p>Hier ist wieder reines HTML</p>

Poste doch einfach mal Dein Affenformular und dann sehen wir weiter. Ich bin überzeugt, dass ist nur ein ganz kleines Problem.

Zu dem PHP-Mailer kommen wir dann später :-D
 
Danke für die schnelle Antwort!

Den folgenden Code habe ich von de.Selthtml.org.
Das Formular sieht richtig aus, allerdings wird über dem Formular der im Code grün markierte Teil angezeigt.

PHP:
<?php

/**
 * Konfiguration
 *
 * Bitte passen Sie die folgenden Werte an, bevor Sie das Script benutzen!
 *
 * Das Skript bitte in UTF-8 abspeichern (ohne BOM).
 */

// An welche Adresse sollen die Mails gesendet werden?
$zieladresse = '[email protected]';

// Welche Adresse soll als Absender angegeben werden?
// (Manche Hoster lassen diese Angabe vor dem Versenden der Mail ueberschreiben)
$absenderadresse = '[email protected]';

// Welcher Absendername soll verwendet werden?
$absendername = 'Formmailer';

// Welchen Betreff sollen die Mails erhalten?
$betreff = 'Feedback';

// Zu welcher Seite soll als "Danke-Seite" weitergeleitet werden?
// Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben!
$urlDankeSeite = 'http://www.EXAMPLE.com/IhrName/IhreSeite.htm';

// Welche(s) Zeichen soll(en) zwischen dem Feldnamen und dem angegebenen Wert stehen?
$trenner = ":\t"; // Doppelpunkt + Tabulator

/**
 * Ende Konfiguration
 */

if ($_SERVER['REQUEST_METHOD'] === "POST") {

	$header = array();
	$header[] = "From: ".mb_encode_mimeheader($absendername, "utf-8", "Q")." <".$absenderadresse.">";
	$header[] = "MIME-Version: 1.0";
	$header[] = "Content-type: text/plain; charset=utf-8";
	$header[] = "Content-transfer-encoding: 8bit";

    $mailtext = "";

    foreach ($_POST as $name => $wert) {
        if (is_array($wert)) {
		    foreach ($wert as $einzelwert) {
			    $mailtext .= $name.$trenner.$einzelwert."\n";
            }
        } else {
            $mailtext .= $name.$trenner.$wert."\n";
        }
    }

    mail(
    	$zieladresse,
    	mb_encode_mimeheader($betreff, "utf-8", "Q"),
    	$mailtext,
    	implode("\n", $header)
    ) or die("Die Mail konnte nicht versendet werden.");
    header("Location: $urlDankeSeite");
    exit;
}

header("Content-type: text/html; charset=utf-8");

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
    <head>
        <title>Einfacher PHP-Formmailer</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
        <h1>Beispielformular</h1>
        <form action="" method="post">
            <!-- Hier die eigentlichen Formularfelder eintragen. Die folgenden sind Beispielangaben. -->
            <dl>
                <dt>Ihr Name:</dt>
                <dd><input type="text" name="Versender" /></dd>
                <dt>Ihre E-Mail:</dt>
                <dd><input type="text" name="E-Mail" /></dd>
                <dt>Sie können:</dt>
                <dd><input type="checkbox" name="kannwas[]" value="HTML" />HTML <input type="checkbox" name="kannwas[]" value="PHP" />PHP</dd>
                <dt>Sie sind:</dt>
                <dd><input type="radio" name="sexus" value="M" />Mann <input type="radio" name="sexus" value="Frau" />Frau</dd>
                <dt>Sie mögen:</dt>
                <dd><select name="Browser"><option value="Opera">Opera</option><option value="Mozilla">Mozilla</option></select></dd>
                <dt>Bemerkungen:</dt>
                <dd><textarea name="Bemerkungen" rows="3" cols="20">Bemerkungen</textarea></dd>
            </dl>
            <!-- Ende der Beispielangaben -->
            <p>
            <input type="submit" value="Senden" />
            <input type="reset" value="Zurücksetzen" />
            </p>
        </form>
    </body>
</html>

Das Komische ist ja, dass mir das bei allen Formularen passiert, die ich ausprobiere.
 
Zurück
Oben