Thomas: Gästebuch

Hallo & schöne Ostern!

Ich mache mir gerade ein Gästebuch-Script, dabei soll das Eintrags-Formular im selben Script wie das Eintragen selbst sein. Nach dem efolgten Eintrag soll man dann wieder zum Gästebuch gelangen. Das geht auch alles, nur die weiterleitung funktioniert nicht.

Also mein Eintrags-Script (eintrag.php) sieht so aus:

...
<form method="post" action="eintrag.php">
<input type="hidden" name="aktion" value="eintragen">
Felder für Name, Text, usw...
</form>

dann der Teil zum Eintragen:

<?php
switch ($aktion) { case "eintragen":
                   Befehle zum Eintragen in die Gästebuch-Datei...
                   header("Location: gaestebuch.php");  // <- das ist Zeile 48
                   break; }
?>

Jetzt kommt aber immer die Fehlermeldung:

Warning: Cannot add header information - headers already sent by (output started at c:\server\eintrag.php:2) in c:\server\eintrag.php on line 48

Was stimmt da nicht?
Danke & Grüße
Thomas

  1. Hi Thomas,

    also: Wenn das Eintragen und das Gaestebuch wirklich im gleichen Script stuenden, so braeuchtest du ja keine Weiterleitung!
    Trenne am besten das Gaestebuch vom Eintragen (also 2 Dateien), und mache dann vom Eintragen aus eine Weiterleitung zum Gaestebuch...

    die Fehlermeldung sagt dir nur, dass die Übergabe von Daten an den Browser schon in Linie 2 gestartet wurde und deswegen der header nicht mehr uebertragen werden kann. Schau dir mal deine Linie 2 an!

    MFG

    Philipp

    P.s.: Hab auch erst vor kurzem n Gaestebuch geschrieben..

  2. Hallo & schöne Ostern!

    Ebenso.

    Also mein Eintrags-Script (eintrag.php) sieht so aus:

    ...
    <form method="post" action="eintrag.php">
    <input type="hidden" name="aktion" value="eintragen">
    Felder für Name, Text, usw...
    </form>

    dann der Teil zum Eintragen:

    <?php
    switch ($aktion) { case "eintragen":
                       Befehle zum Eintragen in die Gästebuch-Datei...
                       header("Location: gaestebuch.php");  // <- das ist Zeile 48
                       break; }
    ?>

    Jetzt kommt aber immer die Fehlermeldung:

    Warning: Cannot add header information - headers already sent by (output started at c:\server\eintrag.php:2) in c:\server\eintrag.php on line 48

    Was stimmt da nicht?

    Klarer Fall von "Falsche Reihenfolge".

    Die Funktion "header" funktioniert nur dann, wenn vorher noch keinerlei HTML-Output an den Browser geschickt wurde. Das bedeutet, du mußt gleich in der ersten Zeile in den PHP-Modus wechseln (die ersten Zeichen der Datei müssen "<?php" sein - auf "php" kann unter Umständen ja verzichtet werden), kein Leerzeichen vorher, keine neue Zeile!

    Das ist aber kein Beinbruch: Pack einfach den Eintragungsteil ganz nach vorne. Da du ohnehin keinerlei HTML-Output von _dieser_ Seite willst, muß das Formular ja garnicht erneut ausgegeben werden, wenn etwas eingetragen wurde.

    - Sven Rautenberg

  3. Hallo & schöne Ostern!

    Auch von mir :)

    Oder einfach das Output-Buffering von PHP nutzen, dann landen auch später 'gesendete' header ganz vorn.

    http://www.php.net/manual/de/ref.outcontrol.php
    http://www.php.net/manual/de/function.header.php
    http://www.php.net/manual/de/function.headers-sent.php

    HtH, Thoralf