PHP-Formmailerweiterleitung

seberix

Mitglied
Hi!

Habe einen Formmailer mit mailer.php und ich will dass wenn das Echo eine "danke" bzw. "fehler" meldung auwirft eine bestimmte Seite angezeigt wird.

Wie mach ich das? Bitte um Hilfe!

Hier der Code:

PHP:
<?php

if($abschicken)
{
   //wenn name, email, der text oder die Fragenicht ausfefüllt sind werden die 3 Echo ausgegeben
   if(empty($name) || empty($email) || empty($adresse) || empty($agb) || empty($paket))
   {
      echo "<h1 align=center>Bitte gehen Sie zurück und füllen Sie Alle felder mit dem * aus!</h1>";
      echo "<BR>";
      echo "<h2><A href=javascript:back()> Zurück zum Formular</A></h2>";

   }
   else
   {
      while(list($feld,$wert)=each($HTTP_POST_VARS))
      {
         if($feld!="abschicken")
         {
            $mailnachricht.=ucfirst($feld).": $wert\n"; // auflistung der von Ihnen angegebenen Daten (z. B.Name Alter ...)
         }
      }
      $mailnachricht.="\nDatum/Zeit: "; // Datum Uhrzeit
      $mailnachricht.=date("d.m.Y H:i:s"); // Datum Uhrzeit
      $mailbetreff="Kontakt: "; //Betreff bei der angekommenden E-Mail
      $mailbetreff.=$HTTP_POST_VARS[betreff];
      mail("info@domain.com", $mailbetreff, $mailnachricht, "From: $email"); //Anstatt # IHRE E-Mail angeben
      //bei erfolgreichem Senden diese Daten ausgeben
      echo "<h1 align=center>Vielen Dank für Ihre eMail!</h1>";
      echo "<br>";
      echo "<h2><a href=javascript:self.close()> Kontaktformular schliessen </a></h2>"; //schließen der Seite (geht nicht bei Fames oder beim Browser Mozilla Fire Fox)
   }
}
else
{
   echo "Ein unbekannter Fehler ist aufgetreten."; //Fehlermeldung bei unbekanntem Fehler
}

?>
 
Hallo!

1.: Fragen PHP betreffend, gehören nicht ins HTML sonder ins PHP Forum!
2.: Wenn Du ein echo ausführst, dann kannst Du nicht zu einer anderen Datei weiterleiten lassen, da sich der echo und header() beißen!
Aber Du könntest anstatt ein "Danke" auszugeben, zu einer Seite weiterleiten lassen, in der das "Danke" steht.
Weiterleitungen macht man mit der Funktion header()!
Bsp.:
PHP:
header("Location: http://www.redlama.org");
Wenn Du das anstelle Deines echo's einsetzt, dann würdest Du auf meiner Seite landen. Du könntest aber auch sowas machen:
PHP:
header("Location: danke.html");
Das würde Dich nur zur Datei "danke.html" im selben Verzeichnis weiterleiten.

redlama
 
Ok - sorry wegen dem falsch platzierten Post!

Also ich weiss was du meinst aber ich kanns nicht umsetzen :p

Könntest du so nett sein und meinen PHP Code nehmen und das header("Location: danke.html"); dort einsetzen wo es hingehören würde und dann nochmals hier posten?

Weil ich kenn mich in PHP noch Nüsse aus!

Wäre super von dir! DANKE!
 
Was genau willst Du denn erreichen?
Die Fehlermeldung soll doch sicher weiter so kommen wie bisher, damit man zurück gehen und den Fehler korrigieren kann, oder?
Und wenn die E-Mail erfolgreich versendet wurde, was soll dann genau passieren?
Soll dann zu einer Seite weitergeleitet werden, wo sowas wie "Danke" erzeugt wird?
Wenn ja, gibt es schon so eine Datei?
Du könntest auch auf die Startseite weiterleiten lassen.
Aso poste mal bitte genau, was Du willst und dann schaue ich mal.

redlama
 
Also wenn ein Fehler auftritt, soll z.b. auf "fehler.htm" weitergeleitet werden und bei erfolgreicher Übermittlung auf "danke.htm". Beide Seiten existieren im selben Ordner wie die Formmailer Seite.
Die "mailer.php" soll also nicht selber einen Text generieren, sondern immer bei Fehler bzw. Danke auf die jeweilige Seite verlinken.
 
Versuch's mal so:
PHP:
<?php
if($abschicken)
{
  //wenn name, email, der text oder die Fragenicht ausfefüllt sind werden die 3 Echo ausgegeben
  if(empty($name) || empty($email) || empty($adresse) || empty($agb) || empty($paket))
  {
    //echo "<h1 align=center>Bitte gehen Sie zurück und füllen Sie Alle felder mit dem * aus!</h1>";
    //echo "<br>";
    //echo "<h2><A href=javascript:back()> Zurück zum Formular</A></h2>";
    header("Location: fehler.htm");
  }
  else
  {
    while(list($feld,$wert)=each($HTTP_POST_VARS))
    {
      if($feld != "abschicken")
      {
        $mailnachricht .= ucfirst($feld).": $wert\n"; // auflistung der von Ihnen angegebenen Daten (z. B.Name Alter ...)
      }
    }
    $mailnachricht .= "\nDatum/Zeit: "; // Datum Uhrzeit
    $mailnachricht .= date("d.m.Y H:i:s"); // Datum Uhrzeit
    $mailbetreff = "Kontakt: "; //Betreff bei der angekommenden E-Mail
    $mailbetreff .= $HTTP_POST_VARS[betreff];
    mail("info@domain.com", $mailbetreff, $mailnachricht, "From: $email"); //Anstatt # IHRE E-Mail angeben
    //bei erfolgreichem Senden diese Daten ausgeben
    //echo "<h1 align=center>Vielen Dank für Ihre eMail!</h1>";
    //echo "<br>";
    //echo "<h2><a href=javascript:self.close()> Kontaktformular schliessen </a></h2>"; //schließen der Seite (geht nicht bei Fames oder beim Browser Mozilla Fire Fox)
    header("Location: danke.htm");
  }
}
else
{
   //echo "Ein unbekannter Fehler ist aufgetreten."; //Fehlermeldung bei unbekanntem Fehler
   header("Location: fehler.htm");
}
?>
Obwohl ich mir nicht sicher bin, ob Du bei "Bitte gehen Sie zurück [...]" und bei "Ein unbekannter Fehler [...]" auf die fehler.htm verweien willst.

redlama
 
Also ich hab das jetz mal so gemacht wie du es gepostet hast und da kam folgende Fehlermeldung:

Warning: Cannot modify header information - headers already sent by (output started at /home/www/web211/html/index/webspace/bestellung/mailer.php:7) in /home/www/web211/html/index/webspace/bestellung/mailer.php on line 36
 
Ist denn irgendwo noch ein echo in der mailer.php nicht auf Kommentar gesetzt? Ich habe vor die echo's extra die // gesetzt, damit diese Fehlermeldung nicht kommt.
Diese Fehlermeldung besagt, dass Du etwas ausgibst und deswegen nicht weitergeleitet werden kann. Das war auch das, was ich vorhin meinte @ echo und header() beißen sich.
Also schau mal, ob Du irgendwo etwas ausgibst.
Wenn Du es nicht findest, dann poste nochmal den "ganzen" Code!

redlama
 
Es darf nichts ausgegeben werden befor die header(); Funktion aufgerufen wird. Das heisst wenn du die echo's wieder ausklammerst sollte es gehen.
 
Zurück