Mailformular Abfrage funktioniert nicht...

Eddymaniac

Erfahrenes Mitglied
Hallo Leute,

ich hab mir ein Mailformular zusammengebastelt. Jetzt wollte ich den Case abfangen, wenn jemand das Feld Versender frei lässt. Also habe ich folgendes programmiert.

Code:
if(empty($_POST['Versender'])){
 }
 else
 {
 $strMailtext = "";

 while(list($strName,$value) = each($_POST))
 {
  if(is_array($value))
  {
   foreach($value as $value_array)
   {
    $strMailtext .= $strName.$strPlatzhalter.$value_array."\n";
   }
  }
  else
  {
   $strMailtext .= $strName.$strPlatzhalter.$value."\n";
  }
 }

 mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)
  or die("Die Mail konnte nicht versendet werden.");
 header("Location: $strReturnhtml");
 exit;
}
Meiner Meinung nach habe ich gleich am Anfang die Abfrage ob das Feld Versender leer ist. Für den Fall true, mach nichts. Für den fall false, (Code ausführen).

Allerdings egal ob das feld leer ist oder nicht, die Email wird verschickt.
Hat jemand ne Idee warum?

Gruß,
Eddy
 
Zuletzt bearbeitet:
Hmm merkwürdig, dass es verschickt wird, wenn das Feld leer ist.

Allerdings würde ich dann sowieso if(!empty($_POST['Versender'])) schreiben, dann hätte man sich das else gespart.
Aber auch sicher, dass du dich nicht geirrt hast?
 
Absolut, hab es mehrfach getestet.
Nochmal der gesamte Code:
Code:
<?php

//Konfiguration
$strEmpfaenger = 'd@online.de';
$strFrom       = '"Formmailer" <www.info.de>';
$strSubject    = 'Email von www.info.de';
$strReturnhtml = 'willkommen.html';
$strPlatzhalter  = "          ";

//Ende Konfiguration

if(empty($_POST['Versender'])){
 }
 else
 {
 $strMailtext = "";

 while(list($strName,$value) = each($_POST))
 {
  if(is_array($value))
  {
   foreach($value as $value_array)
   {
    $strMailtext .= $strName.$strPlatzhalter.$value_array."\n";
   }
  }
  else
  {
   $strMailtext .= $strName.$strPlatzhalter.$value."\n";
  }
 }

 mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)
  or die("Die Mail konnte nicht versendet werden.");
 header("Location: $strReturnhtml");
 exit;
}
?>
<html>
<head>
<title></title>
</head>
<link rel="stylesheet" href="cssstyle.css" type="text/css" media="screen">
<body text="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000" topmargin="2" leftmargin="2">
<table width="796" height="400" cellpadding="50">
  <tr>
    <td height="400" align="left" valign="middle"><h3>formular</h3>
      <table border="0" align="left" cellpadding="1" >
        <form action="formular.php" method="post">
          <tr>
            <td colspan="2" align="center">Schreiben Sie uns eine Nachricht, wir freuen uns!<br>
              <br>
            </td>
          </tr>
          <tr>
            <td>Name:*</td>
            <td>&nbsp;&nbsp;
              <input type="text" name="Versender" size="47" maxlength="47"/>
            </td>
          </tr>
          <tr>
            <td>Telefon:</td>
            <td>&nbsp;&nbsp;
              <input type="text" name="Telefon" size="47" maxlength="47">
            </td>
          </tr>
          <tr>
            <td>Email Adresse:</td>
            <td>&nbsp;&nbsp;
              <input type="text" name="E-Mail" size="47" maxlength="47"/>
            </td>
          </tr>
          <tr>
            <td>Nachricht:*</td>
            <td>&nbsp;&nbsp;
              <textarea name="Nachricht" rows="6" cols="36"></textarea>
              &nbsp;&nbsp; </td>
          </tr>
          <tr>
            <td></td>
            <td>&nbsp;&nbsp;
              <input type="submit" value="Senden">
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              <input type="reset" value="L&ouml;schen">
            </td>
          </tr>
        </form>
      </table></td>
  </tr>
</table>
</body>
</html>
 
Vielleicht überseh ich's einfach, ich finde aber keinen Fehler, der das verursachen würde.

Lass dir mal $_POST ausgeben (print_r($_POST)), dann siehst du ja, ob es empty ist oder nicht.
 
Na super,

ich hab die Datei umbenannt, aber vergessen im Coding
Code:
<form action="formular4.php" method="post">
zu ändern. Hat also auf die alte Datei gezeigt, wo die Abfrage noch garnicht drin war... super was.... ^^

Allerdings überlege ich gerade, ob ich das nicht aufsplitte. Wie müsste ich das machen?
Quasie so?
Code:
<?php
If (empty($_POST['blalba']))
{datei1.php}
else
{datei2.php}
?>
 
Ich würde es nicht aufspalten... ;-)
Wenn doch müsstest du beim Fehler ein redirect auf datei1.php (?) machen.. Für das Formular kannst du auf jeden Fall nur eine Zieldatei angeben, und in dieser musst du die Abfrage haben.
Und nur { datei1.php } funktioniert nicht..
Aber wie gesagt, ich würde es nicht aufspalten, sondern alles in ein und die selbe Datei schreiben...

Aber ich würde dir übrigens auch raten, die If-Abfrage andersrum zu formulieren...
PHP:
if (isset($_POST['absender']) && !empty($_POST['absender'])) { sendMail(); }
else { returnError(); }

Achja: du kannst (wenn du nicht alles in einer Datei haben willst) natürlich mit Funktionen arbeiten, wie in diesem Code-Schnipsel... Und entsprechend vielleicht die Funktionen in eine extra-Datei auslagern und mit require/include einbinden...
 
Zuletzt bearbeitet von einem Moderator:
Ok, irgendwie hab ich jetzt nen hänger...
Ich hab folgendes gemacht:
Code:
if ($_POST)
{
if (($_POST) && (!empty($_POST['Versender']))) { sendMail(); }
else { returnError(); }  

function returnError(){
print '
<html>
<body>
<a>fehler</a>
</body>
</html>';

}

function sendMail()
 { 
 $strMailtext = "";

 while(list($strName,$value) = each($_POST))
 {
  if(is_array($value))
  {
   foreach($value as $value_array)
   {
    $strMailtext .= $strName.$strPlatzhalter.$value_array."\n";
   }
  }
  else
  {
   $strMailtext .= $strName.$strPlatzhalter.$value."\n";
  }
 }
}

 mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)
  or die("Die Mail konnte nicht versendet werden.");
 header("Location: $strReturnhtml");
 exit;
}

Bei Submit folgender Fehler:
Fatal error: Call to undefined function: returnerror() in /homepages/45/d156342678/htdocs/formular4.php on line 14
 
Hmja... die php-dokumenation sagt:
Wenn eine Funktion nur unter bestimmten Bedingungen definiert wird, muß die Definition dieser Funktion noch vor deren Aufruf abgearbeitet werden.
In deinem Code hängt die Funktion von der Bedingung if($_POST) ab, ist also bedingt, und steht aber erst nach dem Aufruf im Code...

Bau dein Dokument doch mal so auf:
PHP:
##### Funktionen: #####
function showError() {
	$str = 'Fehler!';
	return $str;
}

function sendMail() {
	$str = 'Senden...';
	return $str;
}

##########

if (isset($_POST['Absender']) && !empty($_POST['Absender'])) {
	echo sendMail();
}
else {
	echo showError();
}

Bei einer Funktion würde ich auch immer return verwenden um das Funktions-ergebnis zurückzugeben... Damit hast du die Kontrolle was wo ausgegeben wird immer zentral... nämlich da, wo du die Funktionen aufrufst; und nicht verstreut über die Funktionen... (Okay, bei der Größe des Codes kein Problem, aber bau mal ein größeres System ;-))

ps: wenn du deinen code schön strukturierst, hast du es nicth nur selbst leichter... Ich wäre dir nicht böse, wenn du dich mal an Tab-einrückungen und [ code=php ]-Tags im Forum hier versuchen würdest :)
 
Zurück