header - Probleme

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

  • header - Probleme

    Ich habe folgendes Problem.
    Ich generiere eine komplette Index-Seite.
    Wenn man nun auf einen der vielen Links klickt, genannt "Login",
    ist es dem Benutzer möglich, sich in einen gesicherten Bereich einzuloggen.
    Wenn die Daten geprüft wurden und alles okay ist, wird der Nutzer reingelassen.

    Nun habe ich mein Script so veranlasst, dass es, bei korrektem Login, einen header() sendet.

    Dabei bin ich nun aber auf diese unschöne Fehlermeldung gestoßen:
    Warning: Cannot modify header information - headers already sent by (output started at /srv/www/web8/html/misc/game/index.php:5) in /srv/www/web8/html/misc/game/index.php on line 90

    Hab mich also ein bissl kundig gemacht und weiß nun, wieso und warum ich diesen Fehler bekomme.
    Weil ich ja durch das generieren der Seite bereits Daten wie z.b. html, head oder div gesendet habe, was sich also mit meiner header Location beißt.

    Jetzt frage ich mich, wie ich dieses Problem lösen kann OHNE zu vermeiden, VOR der header() Geschichte schon etwas zu senden.
    Gibt es da eine Möglichkeit
    Vlt einen zusätzlichen Parameter, oder eine andere Funktion, die im selben Fenster eine neue Seite bei korrekte Login läd oder ähnliches.

    Für den schnellen Leser:
    Ich habe eine Seite "index.php", die als Menupunkt u.a. Login hat. Bei korrektem Login die Seite main.php laden soll. Beide Seiten haben einen unterschiedlichen html Kopf, was bei korrektem Login die Funktion header() ausschließt. Wie kann ich einen Login im selben Fenster wie realisieren?

    Danke im voraus.

    Tannim

  • #2
    @Für den schnellen Leser: danke ist hilfreich ^^


    PHP-Code:
    ob_start() 
    in die erste zeile schreiben sollte helfen
    Mafia Browsergame - Scripts

    Wer glaubt, ein Christ zu sein, weil er die Kirche besucht, irrt sich. Man wird ja auch kein Auto, wenn man in eine Garage geht.
    Albert Schweitzer (14.01.1875 - 04.08.1965)

    Kommentar


    • #3
      mit ob_start startest du die bufferung, die aber auch irgendwann wieder entleert werden muss

      PHP-Code:
      <?php
      ob_start
      ();
      ?>

      // HTML Ausgabe

      <?php

      if ($wl_ziel) {header ("Location: index.php?content=$wl_ziel");}

      ob_end_flush();

      ?>

      Kommentar


      • #4
        Hilft sicherlich, ist aber für sowas nicht gedacht.

        Ein Login Formular kann man doch per POST an ein Script versenden.
        In diesem muss keinerlei ausgabe gemacht werden.

        Einfach nur das Login in dem Script prüfen und dann mit header weiterleiten.
        gruss Chris

        [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

        Kommentar


        • #5
          Original geschrieben von Daniela
          mit ob_start startest du die bufferung, die aber auch irgendwann wieder entleert werden muss
          macht php automatisch
          Mafia Browsergame - Scripts

          Wer glaubt, ein Christ zu sein, weil er die Kirche besucht, irrt sich. Man wird ja auch kein Auto, wenn man in eine Garage geht.
          Albert Schweitzer (14.01.1875 - 04.08.1965)

          Kommentar


          • #6
            Okay, vilen dank für die antworten.
            hab s jetzt so eingerichtet, dass der header() sofern er aufgerufen wird, das erste ist, was passiert. und das funzt es auch.

            daraus ergibt sich leider noch ein problem:
            nun ruft er nach erfolgreichem login zwar die neue php seite auf (main.php), allerdings, ist diese, obwohl ich echo '<head'>; usw. völlig headerlos, sprich sie beginnt mit dem ersten tag nach <body>.
            was auch den unschönen nachteil hat, dass die css-datein, die im header teil der html seite steht, nicht geladen wird.

            hb schonmal ein bissl im php handbuch geschmökert, hab da etwas gefunden, wenn man als zweiten parameter im header() false übergibt ... aber irgendwie tut sich da leider nix.

            Tannim

            Kommentar


            • #7
              Irgendwie scheinst du die Begriffe durcheinanderzuwerfen.

              HTTP-Header, wie sie von header() ausgelöst werden, haben mit dem <head>-Bereich eines HTML-Dokumentes herzlich wenig zu tun. Und letzteren solltest du natürlich nach wie vor ausgeben, wenn du deine HTML-Daten ausgibst - aber natürlich erst nach eventuellen header()-Aufrufen.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Erstmal: header() !== <head>

                Das eine ist ne PHP Fkt das andere ein HTML Tag
                Bau dir ne php Datei (nenn sie von mir aus head.php) und speichere dort drin alles von <head> bis </head> in einen String. Diese Datei inkludierst du in die fragliche Datei. Somit musst du in den einzelnen PHP Seiten nur noch den Code von <body> -und mit </html> schreiben.
                In dieser Include Datei machst du am besten als erstes alle header()-Sachen, aber da eh alle Daten auf den String gespeichert werden erzeugt die Datei keine Ausgabe
                PHP-Code:
                //deine_seite.php
                include('header.php');
                echo 
                $str;
                ?>
                <body>
                Rest des Codes
                </body>
                </html> 
                Gruss

                tobi
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  vlt ließt es sich so, als würde ich das verwechseln, das liegt aber auch daran, dass er mit der header() funktion mir eben den header teil der html seite unterschlägt und ich weiß nicht wieso.

                  mein source code sieht nach erfolgreichem login und aufruf der header() funktion so aus:

                  PHP-Code:
                  <?php
                      session_start
                  ();
                      include 
                  "inc/config.php";
                      include 
                  "inc/functions.php";
                      
                  select_user();
                      
                  //initialize
                      
                  $user select_user(); // SPIELER SELEKTIEREN
                      
                  $date date_time_now();
                      if (!
                  logged_in())
                      {
                          echo 
                  'Du bist nicht oder nicht mehr eingeloggt! Versuche es auf der 
                          <a href="index.php?site=login">Index-Seite</a> erneut.'
                  ;
                      }
                      else
                      {
                          echo 
                  '<html>'."\n";
                          echo 
                  '    <head>'."\n";
                          echo 
                  '        <title>Game</title>'."\n";
                          echo 
                  '        <link rel="stylesheet" type="text/css" href="inc/main.css">'."\n";
                          echo 
                  '        <script src="inc/main.js" type="text/javascript"></script>'."\n";
                          echo 
                  '    </head>'."\n";
                          echo 
                  '    <body>'."\n";
                          echo 
                  '        <div id="root">'."\n";
                          echo 
                  '            <div id="header">'."\n";
                          include 
                  'inc/header.php';
                          echo 
                  '            </div>'."\n";
                          echo 
                  '            <div id="main">'."\n";
                          include 
                  'inc/main.php';
                          echo 
                  '            </div>'."\n";
                          echo 
                  '            <div id="footer">'."\n";
                          include 
                  'inc/footer.php';
                          echo 
                  '            </div>'."\n";
                          echo 
                  '        </div>'."\n";
                          echo 
                  '    </body>'."\n";
                          echo 
                  '</html>'."\n";
                      }
                  ?>
                  diesen teil:
                  PHP-Code:
                          echo '<html>'."\n";
                          echo 
                  '    <head>'."\n";
                          echo 
                  '        <title>Game</title>'."\n";
                          echo 
                  '        <link rel="stylesheet" type="text/css" href="inc/main.css">'."\n";
                          echo 
                  '        <script src="inc/main.js" type="text/javascript"></script>'."\n";
                          echo 
                  '    </head>'."\n";
                          echo 
                  '    <body>'."\n"
                  läst er einfach beim erzeugen der seite weg.

                  Tannim

                  Kommentar


                  • #10
                    PHP-Code:
                    error_reporting(E_ALL); 
                    ?

                    Gruss

                    tobi
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #11
                      okay, hab ich jetzt drinne ... jetzt geht es und er sendet auch die html head daten mit ... aber wieso?
                      was hat das senden der html head daten mit
                      PHP-Code:
                      error_reporting(E_ALL); 
                      zutun?

                      bitte um kurze erklärung. danke!

                      Tannim

                      Kommentar


                      • #12
                        was hat das senden der html head daten mit error_reporting(E_ALL); zutun?
                        nix

                        http://de2.php.net/manual/de/functio...-reporting.php

                        php.net sollte dein freund werden
                        mfg

                        Kommentar


                        • #13
                          eben ...
                          es wird aber nach dem einfügen dieser code-zeile keine fehlermeldung ausgespcukt, sondern stattdessen, der html header einwandfrei geladen, ohne jede fehlermeldung.
                          hau ich die codezeile wieder raus, verschwindet der html header aber wieder ... ich bin

                          Tannim

                          Kommentar

                          Lädt...
                          X