Compu: php lässt mich keine 2 Cookies setzen ... :-(

Wieso lässt er mich meine Cookies nicht setzen?

<?php
// Session ID Cookie
include('../functions/functions.php');
include('../functions/shopfunctions.php');

if (!$_COOKIE['cookiesid'])
{
  $sid=sessionID();
  speichereSessionID($sid);
  setcookie("cookiesid",$sid,time()+3600,"/");
}
else
{
  $sid=$_COOKIE['cookiesid'];
}

// Language Cookie Test
if (!(isset($_COOKIE['language'])))
{
  if (isset($_REQUEST['lang']))
  {
  setcookie("language", $_REQUEST['lang'], time() + 84 * 3600, "/");
  $language=$_REQUEST['lang'];
  }

else
  {
    echo "Please visit <a href="http://www.test.de">www.test.de</a> and choose a language.<br>
          These pages require the use of cookies and Javascript";
    exit();
  }
}

// Cookie vorhanden & update
elseif (isset($_REQUEST['lang']))
{
  setcookie("language", $_REQUEST['lang'], time() + 84 * 3600, "/");
  $language=$_REQUEST['lang'];
}

// Cookie vorhanden & Benutzung
else
{
  $language=$_COOKIE['language'];
}

include('../config/config.inc');
include('../auth/databaseauth.php');
include('../functions/functions.php');
include('../functions/layoutfunctions.php');
include('../functions/shopfunctions.php');
include('../languages/'.$language.'/translation.php');

makeheader($file,$language,$produktname);
?>

Es kommt immer folgende Fehlermeldeung:

Warning: Cannot add header information - headers already sent by (output started at d:\da\functions\functions.php:34) in d:\dentona\pages\top.php on line 10

Warning: Cannot add header information - headers already sent by (output started at d:\da\functions\functions.php:34) in d:\dentona\pages\top.php on line 22

Fatal error: Cannot redeclare printheader_catalog() (previously declared in d:\da\functions\functions.php:2) in d:\dentona\functions\functions.php on line 2

  1. Hallo

    wie du sicherlich schon im php-manual gesehen hast, kannst du Cookies nur solange setzen, bis der header gesendet wurde. Sprich solange du keine Ausgabe mit echo oder print gemacht hast.

    Grüße

    David

    --
    "Nobody will ever need more than 640k RAM!"
    1981 Bill Gates
    1. Hi Danke für die Antwort.

      wie du sicherlich schon im php-manual gesehen hast, kannst du Cookies nur solange setzen, bis der header gesendet wurde. Sprich solange du keine Ausgabe mit echo oder print gemacht hast.

      Ja das habe ich gelesen. Und genau deswegen finde ich den Fehler nicht, weil ich keine echos und prints habe.

      1. Hallo

        Warning: Cannot add header information - headers already sent by (output started at d:\da\functions\functions.php:34) in d:\dentona\pages\top.php on line 10

        lautet deine Fehlermeldung (hatte ich grad net beachtet weil ich dachte, des sei das was ich oben sagte). Dann schau mal was in functions.php in Zeile 34 passiert. Dort soll ja der Header bereits versendet worden sein.

        Grüße

        David

        --
        "Nobody will ever need more than 640k RAM!"
        1981 Bill Gates
        1. Warning: Cannot add header information - headers already sent by (output started at d:\da\functions\functions.php:34) in d:\da\pages\top.php on line 10
          lautet deine Fehlermeldung (hatte ich grad net beachtet weil ich dachte, des sei das was ich oben sagte). Dann schau mal was in functions.php in Zeile 34 passiert. Dort soll ja der Header bereits versendet worden sein.

          Ja aber die Fuktion wird doch nicht aufgerufen, sondern nur inkludiert.

      2. Hi

        hast du vielleicht in den files, die du includest prints oder echos?

        Gruss
        Carl

        1. Hi Carl!

          hast du vielleicht in den files, die du includest prints oder echos?

          Ja habe ich. Aber die files sind voll mit Funktionen. Und die werden nicht aufgerufen. Sondern nur die, welche die Session ID erzeugt.
          Danke

          1. Moin!

            Ja habe ich. Aber die files sind voll mit Funktionen. Und die werden nicht aufgerufen. Sondern nur die, welche die Session ID erzeugt.

            Es nützt nichts, darüber zu philosophieren, was du gemeint hast, was deine Include-Datei vielleicht tut - Tatsache ist, dass sie irgendeine Ausgabe macht, die die HTML-Seite beginnt und ein späteres Hinzufügen von Headern verhindert.

            Solange du also nicht in functions.php in Zeile 34 (oder davor und dahinter) reinschaust, wirst du den Fehler nicht finden.

            Außerdem wird die Funktion printheader_catalog() zweimal definiert, was ein typischen Zeichen von "Datei zweimal mit include() eingebunden" ist. Verwende zum Einbinden von extern definierten Funktionen lieber require(), alternativ auch include_once(). include() hat IMO einen etwas anderen Aufgabenbereich, als Funktionsdeklarationen einzubinden.

            - Sven Rautenberg

            --
            "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)