header("Location: danke.html"); funktioniert nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • header("Location: danke.html"); funktioniert nicht

    Hallo!

    Ich bin ein PHP-Halbgebildeter und habe es mir WIRKLICH nicht leicht gemacht, mir an meinem Script die Finger wund probiert, Hilfe-Foren durchforstet und bin nur noch ratlos!
    Vielleicht erbarmt sich jemand meiner hier....

    Es handelt sich um ein Mailer-Script für meine Internetseite, eines, das auch Anhänge verschickt.
    Alles funktioniert so, wie es soll!
    Ja: es soll keine Kontrolle geben, ob Name und E-Mail eingegeben wurden.
    Alles ist bestens so, wie es ist!

    NUR EINES N I C H T:
    Nach Abschuss öffnet sich keine Danke-Seite ("danke.html" im gleichen Verzeichnis, alles richtig auf dem Server!)
    Auch nicht bei voller URL hinter "Location"!

    Nach aller Mini-Kenntnis und allen Foren-Tipps ist im Script alles richtig!

    WAS, um Gottes Willen: W A S ist trotzdem noch falsch???

    Hier das Script:


    <html>
    <head>
    <title>mailformular</title>
    </head>
    <body bgcolor="#000000">
    <?php
    $Empfaenger = "meinemail@gmx.de";
    if($_REQUEST['Send'])
    {
    $Mailbetreff = "Nachricht von Seite X ";
    $Mailbetreff .= $_REQUEST['Betreff'];
    $Header = "From: ".$_REQUEST['Email'];
    $Header .= "\n";
    $Header .= "MIME-Version: 1.0";
    $Header .= "\n";
    $Header .= "Content-Type: multipart/mixed; boundary=$Trenner";
    $Header .= "\n\n";
    $Header .= "This is a multi-part message in MIME format";
    $Header .= "\n";
    $Header .= "--$Trenner";
    $Header .= "\n";
    $Header .= "Content-Type: text/plain";
    $Header .= "Content-Transfer-Encoding: 8bit";
    $Header .= "\n\n";
    while(list($Formularfeld, $Wert)=each($_REQUEST))
    {
    if($Formularfeld!="Send" && $Formularfeld!="Anhang")
    {
    $Header .= $Formularfeld.": ".$Wert."\n";
    }
    }
    $Header .= "Datum: ";
    $Header .= date("d.m.Y, H:i:s");
    $Header .= "\n";
    $Header .= "--$Trenner";
    $Header .= "\n";
    $Header .= "Content-Type: ";
    $Header .= $_FILES['Anhang']['type'];
    $Header .= "; name=";
    $Header .= $_FILES['Anhang']['name'];
    $Header .= "\n";
    $Header .= "Content-Transfer-Encoding: base64";
    $Header .= "\n";
    $Header .= "Content-Disposition: attachment; filename=";
    $Header .= $_FILES['Anhang']['name'];
    $Header .= "\n\n";
    $Dateiinhalt = fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);
    $Header .= chunk_split(base64_encode($Dateiinhalt));
    mail($Empfaenger, $Mailbetreff, "", $Header);
    header("Location: danke.html");
    }
    ?>
    <div align="center">

    <dt>&nbsp; </dt>
    <dt>&nbsp;</dt>
    <dt>&nbsp;</dt>

    <table width="500" border="0" cellpadding="1" cellspacing="2">
    <form action="<?php echo$_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post">
    <tr>
    <td align="center" colspan="3" width="504">
    <div align="left">
    </div>
    </td>
    </tr>
    <tr>
    <td align="center" colspan="3" width="504">
    &nbsp;</td>
    </tr>
    <tr>
    <td align="center" colspan="3" width="504">
    &nbsp;</td>
    </tr>
    <tr>
    <td align="center" colspan="3" width="504">
    <font color="#FFFFFF">
    <b>Kontaktformular</b></font></td>
    </tr>
    <tr>
    <td align="center" colspan="3" width="504">
    &nbsp;</td>
    </tr>
    <tr>
    <td width="200"><font color="#FFFFFF">Name:</font></td>
    <td width="300" colspan="2"><font color="#FFFFFF"><input name="Name" style="width:300" type="text" ></font></td>
    </tr>
    <tr>
    <td width="200"><font color="#FFFFFF">eMail:</font></td>
    <td width="300" colspan="2"><font color="#FFFFFF"><input name="Email" style="width:300" type="text"></font></td>
    </tr>
    <tr>
    <td width="200"><font color="#FFFFFF">Nachricht:</font></td>
    <td width="300" colspan="2"><font color="#FFFFFF"><textarea style="width:300" name="Nachricht" rows="5"></textarea></font></td>
    </tr>
    <tr>
    <td width="200"><font color="#FFFFFF">Anhang:</font></td>
    <td width="300" colspan="2"><font color="#FFFFFF"><input name="Anhang" style="width:300" type="file"></font></td>
    </tr>
    <tr>
    <td width="200"></td>
    <td width="150"><font color="#FFFFFF"><input name="Send" type="submit" value="Abschicken" style="width:145"> </font></td>
    <td width="150">
    <p align="right"><font color="#FFFFFF">
    <input name="Reset" type="reset" value="Löschen" style="width:144; height:26"></font></td>
    </tr>
    <tr>
    <td align="center" colspan="3" width="504"></td>
    </tr>
    </form>
    </table>
    </div>
    <?php

  • #2
    Du hältst das EVA-Prinzip nicht ein. Die Verarbeitung (zB. Mailversand) muss vor der Ausgabe (HTML-Code) stattfinden. Und der Header muss sich am Anfang der Ausgabe befinden.

    Davon abgesehen ist abzuraten mail() zu verwenden, da es viele Probleme mit sich bringt. Nimm lieber einen fertigen Mailer.

    In Header-Location sollte übrigens die komplette URL stehen. "danke.html" alleine ist nicht zulässig.

    <font> ist veraltet und sollte nicht mehr verwendet werden. <form> darf direkt in <table> nicht vorkommen. Du solltest dich generell mit HTML- und CSS-Grundlagen beschäftigen. Dein Code ist sehr angestaubt und für heutige Maßstäbe fehlerhaft.

    Kommentar


    • #3
      Danke für die Antwort

      Dieses Forum ist Klasse!
      Ich hab die Lösung hier in einem verwandten Thread gefunden:
      Die erste Zeile muss: <?php ob_start(); ?> lauten!
      Jetzt funktioniert es.
      Ich weiß zwar nicht, warum, aber erst mal ist mir das egal.
      Danke trotzdem für die Antwort!
      Myro

      Kommentar


      • #4
        Zitat von Myro Beitrag anzeigen
        Dieses Forum ist Klasse!
        Ich hab die Lösung hier in einem verwandten Thread gefunden:
        Die erste Zeile muss: <?php ob_start(); ?> lauten!
        Das ist der pfuschige Workaround. Sinnvoller wäre es, wenn du das EVA-Prinzip einhältst.

        Zitat von Myro Beitrag anzeigen
        Ich weiß zwar nicht, warum, aber erst mal ist mir das egal.
        Das sollte dir nicht egal sein. Ein Programmierer sollte wissen, was er tut.

        Kommentar

        Lädt...
        X