Frage zu 'form action'

In meinem Formular werden die eingegeben Daten zunächst überprüft, also ob alle Textfelder ausgefüllt wurden.

Allerdings wird dann das Formular nicht verschickt, sondern es bleibt ausgefüllt so stehen.

Hier der Code:

Als reine HTML-Datei funktioniert dieser Code:

Warum wird das Formular nicht versendet, wenn alle Angaben eingetragen wurden?

Gruß und Gute Nacht
Winni Puh

und wie kommst du auf die Idee, dass dies

und dies

identisch ist?

Hallo,

In meinem Formular werden die eingegeben Daten zunächst
überprüft, also ob alle Textfelder ausgefüllt wurden.

Wie? JS ?

Allerdings wird dann das Formular nicht verschickt, sondern es
bleibt ausgefüllt so stehen.

Wird ein Request gesendet ?

Hier der Code:

Das reicht nicht, um den Fehler zu sehen. Im Prinzip gibt es 2 Fehlerquellen: Falls du mit JS prüfst, schlägt das schon fehl, oder das Senden im PHP geht schief und der gibt wieder das Formular aus.

Poste mal mehr Code…

Alex

Also hier nun der Code.
Wenn ich in der Datei „kontakt.php“ folgenden Eintrag verwende, wird das Formular auf leere Textfelder hin überprüft, aber nicht per E-Mail verschickt.

Damit die Daten aber weitergeleitet und dann per E-Mail versendet werden, habe ich die Datei „auswertung.php“ noch hinzugefügt.

Das Problem, die Textfelder werden nun nicht mehr überprüft, ob sie leer sind. Ein Teufelskreis!

Datei „kontakt.php“

<?php // Formular mit Fehlerauswertung <br />
$errorFelder = array(); 
$error = null; 
$felder = array("anrede", "name", "vorname", "strasse", "plz", "ort", "email", "telefon", "subject"); 

// Überprüfung der eingegebenen Daten 
if(isset($\_POST['ueberpruefung'])) { 
 $error = false; 

 foreach($felder as $feld) { 
 if(empty($\_POST[$feld])) { 
 $error = true; 
 $errorFelder[$feld] = true; 
 } 
 } 


} 


// 
if($error === true) 
 echo 'Bitte füllen Sie alle markierten Textfelder aus!';   
 ?\>  
   
<?php } <br /> ?\>  

Anrede:
>

***********************************************

Datei „auswertung.php“

Vielen Dank, <?php echo $_POST['anrede']." ". $_POST['vorname']." ".$_POST['name']; ?>!

Ihre Daten können nun erfolgreich verschlüsselt übermittelt werden.

Idealerweise wäre es also so, dass überprüft wird ob leere Textfelder vorhanden sind. Falls nicht, soll erst nach entsprechender Ausfüllung durch den Benutzer das Formular abgesendet werden.

Aber irgendwie dreh ich mich da im Kreis.

Gruß WinniPuh

Hallo,

ganz dumme Frage, warum macht du das so furchtbar umständlich über mailmanager.pl und ein extra Formular ?
Baue doch die Mail gleich bei der Prüfung zusammen und schicke die per PHP, wenn die Prüfung erfolgreich war, wozu dieser Umweg über das 2. Formular nach der Überprüfung ?

Datei „kontakt.php“

//
if($error === true)
echo ‚Bitte füllen Sie alle markierten Textfelder
aus!‘;

else {
$mailtext = "";
foreach($felder as $name) $mailtext .= $name . ": " . $\_POST['name'] . '\n';
mail('[email protected]', 'Betreff', $mailtext);
Header('Location: http://example.com/bestaetigung.html');
exit;
}

Wenn du stattdessen wirklich dieses mailmanager.pl verwenden willst, musst du in dem „Bestätigungsformular“ alle Felder als - Felder wieder mitsenden, damit die auch im mailmanager.pl ankommen.

Alexander

Tippfehler im Code… die foreach-Zeile muss natürlich so sein:

foreach($felder as $name) $mailtext .= $name . ": " . $\_POST[$name] . '\n';

Hallo Alexander!

Irgendwie klappt es nicht.
Ich erhalte nach dem Absenden die Meldung:

„Warning: Cannot modify header information - headers already sent by (output started at …“

Auf der Seite „auswertung.php“ kommt dann nur noch der Text:
Vielen Dank, ANREDE VORNAME NAME! Aber die SEite erscheint leider nicht.

<?php // Formular mit Fehlerauswertung <br />
$errorFelder = array(); 
$error = null; 
$felder = array("name", "vorname"); 

// Überprüfung der eingegebenen Daten 
if(isset($\_POST['ueberpruefung'])) 
{ 
 $error = false; 
 foreach($felder as $feld) 

{ 
 if(empty($\_POST[$feld])) 
{ 
 $error = true; 
 $errorFelder[$feld] = true; 
 } 
 } 
} 


if($error === false) 
{ 
// E-Mail an meine Adresse schicken
$mailtext = "";
foreach($felder as $name) $mailtext .= $name . ": " . $\_POST['name'] . '\n';
mail('[email protected]', 'Betreff', $mailtext);
Header('Location: http://www.domain.de/auswertung.php');
exit;
 } 

else 
{ 

if($error === true) 
echo 'Bitte füllen Sie alle markierten Textfelder aus!';   
  
}  
?\>  

Anrede:

>
FrauHerr
Vorname:
>
Nachname:
>
Straße:
>
PLZ/Ort:
>
>
 
 
E-Mail:
>
Telefon:
>
 
 
Betreff:
>
Mitteilung:

Ich erhalte zwar jedesmal eine E-Mail mit leeren Inhalt, aber auch der Absendername „[email protected]“ ist nicht so sehr schön. Woran liegt es, dass dieser seltsame Absendername „erzeugt“ wird?

Gruß WinniPuh

Hallo Alexander!

Irgendwie klappt es nicht.
Ich erhalte nach dem Absenden die Meldung:

„Warning: Cannot modify header information - headers already
sent by (output started at …“

Irgendwo vor dem Header(…) wurde schon etwas ausgegeben, in welcher Zeile, steht da, wo jetzt die Punkte in der Meldung stehen. Das <?php muss direkt am Dateianfang stehen, vor dem Header(..) dürfen keine Ausgaben mit echo, etc. kommen.
Wenn der HTML-Code nun schon davor steht, und Sie es nicht umschreiben wollen, setzen Sie in die erste Erste Zeile <?php ob_start() ?>.

Auf der Seite „auswertung.php“ kommt dann nur noch der Text:
Vielen Dank, ANREDE VORNAME NAME! Aber die SEite erscheint
leider nicht.

In der „Auswertung“ muss dann nur noch die „Danke“ - Meldung stehen, wenn da noch Name / Vorname / Anrede dabei sein sollen, diese noch vorher in eine Session speichern, um in der auswertung.php drauf zugreifen zu können. Siehe ganz unten.

<?php session_start(); // Für die Zwischenspeicherung

// Formular mit Fehlerauswertung
[…]
if($error === false)
{
// E-Mail an meine Adresse schicken
$mailtext = „“;

Die folgende Zeile hatte ich schon einmal in der Nachricht drüber korrigiert, da hatte ich mich vertippt:

foreach($felder as $name) $mailtext .= $name . ": " . $_POST[$name] . ‚\n‘;

mail(‚[email protected]‘, ‚Betreff‘, $mailtext);

Um den Absender zu setzen:

mail(‚[email protected]‘, ‚Betreff‘, $mailtext, „From: [email protected]“);

Achtung: Sollten Sie da Eingabedaten als Absender (wie die angegebene Emailadresse) verwenden wollen, unbedingt
z.B. mit $absender = str_replace(Array(’\r’,’\n’), ‚‘, $_POST[‚email‘]); Sonderzeichen (Zeilenumbrüche) aus der Eingabe entfernen, damit da nicht jemand über eine „manipulierte“ Absenderangabe das Formular zum Spammen nutzen kann.

Für die Zwischenspeicherung in der Session:
$_SESSION[‚name‘] = $_POST[‚name‘];
$_SESSION[‚vorname‘] = $_POST[‚vorname‘];

Header(‚Location: http://www.domain.de/auswertung.php‘);
exit;
}

Ich erhalte zwar jedesmal eine E-Mail mit leeren Inhalt, aber

Ganz leer ? Zumindest die Felder sollten drin stehen.

auch der Absendername „[email protected]

Ist oben nicht angegeben, siehe Ergänzung.

ist nicht so sehr schön. Woran liegt es, dass dieser seltsame
Absendername „erzeugt“ wird?

Das keiner angegeben war :smile:

In der Auswertung.php dann die Daten aus der Session lesen, nicht aus den (dann nicht mehr vorhandenen) Eingabedaten. An Anfang des Scriptes session_start() ?>, im Text dann z.B. Vielen Dank, <?php echo $_SESSION['name'] ?>

Alexander

Hallo Alexander!

Irgendwo vor dem Header(…) wurde schon etwas ausgegeben, in
welcher Zeile, steht da, wo jetzt die Punkte in der Meldung
stehen. Das <?php muss direkt am Dateianfang stehen, vor dem
Header(…) dürfen keine Ausgaben mit echo, etc. kommen.
Wenn der HTML-Code nun schon davor steht, und Sie es nicht
umschreiben wollen, setzen Sie in die erste Erste Zeile <?php
ob_start() ?>.

Danke, genau das war es! (