PHP-Code zwischen </head> und <body>?

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

  • PHP-Code zwischen </head> und <body>?

    Hallo

    Darf zwischen </head> und <body> PHP-Code stehen?

    In dem Bereich definiere ich nämlich momentan eine Variable die dann später im Body-Tag aufgerufen wird.

    <body <?php echo $onload ?>>

    Ist das erlaubt? Ich hab nämlich auf einmal massive Probleme mit "headers already sent ....". Leerzeichen und -zeilen hab ich schon gecheckt und seltsamerweise kommt die Fehlermeldung erst, wenn meine Javascriptfunktionen eine gewisse Länge erreichen .

    Irgendwie versteh ich das grad nicht.

    thx
    Boneman

  • #2
    Warum sollte das nicht erlaubt sein?
    gruss Chris

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

    Kommentar


    • #3
      Re: PHP-Code zwischen &lt;/head&gt; und &lt;body&gt;?

      Original geschrieben von Boneman
      Ist das erlaubt? Ich hab nämlich auf einmal massive Probleme mit "headers already sent ....". Leerzeichen und -zeilen hab ich schon gecheckt und seltsamerweise kommt die Fehlermeldung erst, wenn meine Javascriptfunktionen eine gewisse Länge erreichen .
      das hat aber nichts damit zutun, denn wenn du das </head>-Tag gesendet hast, ist der Header weg, ob du dann eine Variable ausgibst oder nicht, ist PHP total egal!

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Kommentar


      • #4
        Original geschrieben von hhcm
        Warum sollte das nicht erlaubt sein?
        Das war eine Vermutung wegen oben angesprochenem Problem mit "headers already sent ....".

        Ich hatte das schonmal (anderes Programm) und da war es wirklich ein Leerzeichen. Jetzt aber werd ich aus der Meldung einfach nicht schlau:

        Ich habe im Head-Bereich eine Javascript-Funktion in der folgende Zeile vor dem return steht

        Code:
        alert("Sie haben nicht alle Pflichtfelder ausgefüllt.\n
        Bitte prüfen Sie Ihre Eingabe in den farblich markierten 12.");
        Ich hatte die ganze Zeit nur den ersten Satz dort stehen. Jetzt wollte ich noch den Satz "Bitte prüfen Sie Ihre Eingabe in den farblich markierten Bereichen." schreiben und auf einmal kam die Fehlermeldung mit dem header.

        Da ich sonst nichts an der Datei verändert hatte und es vorher lief, hab ich den zweiten Satz einfach wieder rausgelöscht und auf einmal ging es wieder. Durch testen bin ich dann bis zu der 12 gekommen. Wenn ich noch eine 3 oder irgendein anderes Zeichen anhänge kommt die header-Fehlermeldung. Das ist doch nicht normal oder? Ich dachte wenn die kommt, dann kommt sie immer!?

        //EDIT
        wenn du das </head>-Tag gesendet hast, ist der Header weg, ob du dann eine Variable ausgibst oder nicht, ist PHP total egal!
        Ich weiß nicht, ob ich dich richtig verstanden habe. Soll mein PHP-Teil also in den <head>...</head> Bereich?
        Zuletzt geändert von Boneman; 03.09.2005, 15:49.

        Kommentar


        • #5
          Original geschrieben von Boneman
          Ich weiß nicht, ob ich dich richtig verstanden habe. Soll mein PHP-Teil also in den <head>...</head> Bereich?
          ...*trocken* nein

          es gibt HTTP-Header, wenn eine Website aufgerufen wird, sendet der Browser so einen Header an den Server und der Server antwortet mit so einem Header und schickt danach die Website.
          Wenn du einen Cookie setzen willst, musst du einen HTTP-Header schicken, dies geht nur, vor dem Schicken der Seite (ich sagte ja grade oben, dass zuerst der Header und dann die Website geschickt wird). Wenn du also schon das Tag </head> mit echo gesendet hast, dann sind die HTTP-Header schon längst beim Client, die kannst du also nicht mehr editieren. Ob du also nach </head> eine Variable ausgibst, oder nicht, interessiert PHP nicht

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar


          • #6
            Ich will ja mit PHP nichts im <head> </head> Bereich ändern, sondern im Body-Tag

            Ich häng mal den Code an, sonst reden wir glaube ich aneinander vorbei...

            PHP-Code:
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
            <html>
            <head>
                <title>Titel</title>
                <link rel="stylesheet" type="text/css" href="css/style.css"/>
                <SCRIPT LANGUAGE="JavaScript">
                    <!--
                    
                    function logout_confirm(){
                        return confirm("Möchten Sie sich wirklich ausloggen?\n
            Achtung! Alle zwischengespeicherten Daten gehen verloren!");
                    }
                    
                    function check_empty(textfeld){
                        var antwort = true;
                        if(textfeld.value == ''){
                            antwort = false;
                            alert("Bitte füllen Sie das Textfeld aus!");
                            textfeld.focus();
                        }
                        return antwort;
                    }
                    
                    function make_invisible_date_all(){
                        document.getElementById("form_date_day_time_left_firstline").style.visibility="hidden";
                        document.getElementById("form_date_day_time_left_secondline").style.visibility="hidden";
                        document.getElementById("form_date_day_time_right_firstline").style.visibility="hidden";            
                        document.getElementById("form_date_day_time_right_secondline").style.visibility="hidden";
                    }
                    
                    function make_invisible_date(){
                        document.getElementById("form_date_day_time_left_firstline").style.visibility="hidden";
                        document.getElementById("form_date_day_time_left_secondline").style.visibility="hidden";            
                        document.getElementById("form_date_day_time_right_secondline").style.visibility="hidden";
                        document.getElementById("form_date_day_time_right_firstline").style.visibility="visible";
                    }
                    
                    function make_visible_date(){
                        document.getElementById("form_date_day_time_left_firstline").style.visibility="visible";
                        document.getElementById("form_date_day_time_left_secondline").style.visibility="visible";
                        document.getElementById("form_date_day_time_right_secondline").style.visibility="visible";
                        document.getElementById("form_date_day_time_right_firstline").style.visibility="visible";
                    }
                    
                    function switch_radio(radio){
                        document.getElementById(radio).checked = true;
                    }
                    
                    function checkEnter(e){
                        if (e.keyCode == 13)
                            document.forms[0].submit();  
                    }
                    
                    function check_postcode(field){
                        var zugelassene_zeichen = "0123456789";
                        var Fehlermeldung = "";
                        
                        //prüfen, ob alle Zeichen im Feld zulässig sind. anderenfalls entsprechende Fehlermeldung ausgeben
                        for (var Pos = 0; Pos < field.value.length; Pos++){
                                        
                            //Wird ein Zeichen im String gefunden, welches nicht in "zugelassene_zeichen" steht, 
                            //wird eine entsprechende Fehlermeldung formuliert und alle nicht zugelassenen Zeichen aufgeführt
                            if(zugelassene_zeichen.indexOf(field.value.charAt(Pos)) == -1){
                            
                                if(Fehlermeldung == ""){
                                    Fehlermeldung = "Ihre Postleitzahl enthält folgende unzulässige Zeichen:\n";
                                }
                                
                                Fehlermeldung += "'"
                                Fehlermeldung += field.value.charAt(Pos)
                                Fehlermeldung += "'\n"
                            }
                        }
                        
                        //prüfen ob Plz zu kurz
                        if(field.value.length < 5)
                            Fehlermeldung += "Ihre Postleitzahl ist zu kurz.";
                            
                        if(Fehlermeldung != ""){ 
                            alert(Fehlermeldung);
                            field.focus();
                            return;
                        }
                    }
                    
                    function check_compulsory_fields(){
                    //Funktion zum prüfen der Pflichtfelder, welche anhand ihrer ID erkannt werden, die mit "p_" anfängt
                        var ok = true;
                        
                        input_fields = document.getElementsByTagName('input');
                            
                        for(i=0; i<input_fields.length; i++){
                            
                            if((document.getElementsByTagName('input')[i].id.match(/^p_/) == "p_")
            && (document.getElementsByTagName('input')[i].value == "")){
                            //falls die ID des Input Feldes mit "p_" anfängt, womit die Pflichtfelder gekennzeichnet sind
                            
                                //das entsprechende Feld farblich markieren
                                document.getElementsByTagName('input')[i].style.backgroundColor = "#FF00FF";
                                ok = false;
                            }
                            else
                                document.getElementsByTagName('input')[i].style.backgroundColor = "";
                        }            
                        if(!ok)
                            alert("Sie haben nicht alle Pflichtfelder ausgefüllt.\n
            Bitte prüfen Sie Ihre Eingabe in den farblich markierten 12.");
                        return ok;
                    }
                    
                    //-->
                </SCRIPT>
            </head>
            <?php
                session_start
            ();
                
            #Die folgenden php Zeilen sind nur für die Datei action_move.php wichtig 
            #und regeln die Anzeige der Termineingabe
                #alle Zeilen unsichtbar machen, wenn keine entsprechenden Daten in der Session gespeichert sind 
            #oder wenn Aufruf von vorhergehender Seite erfolgt
                
            if(($_POST['choosen_action'] == 1) || (isset($_POST['show_next_move_form'])) 
            || ((
            $_POST['choosen_action'] == "back_to_1"
                && (!isset(
            $_SESSION['a']['session_poa_date_end'])) && (!isset($_SESSION['a']['session_poa_date_start']))) 
                || ((isset(
            $_POST['back_to_show_next_move_form'])) && (!isset($_SESSION['b']['session_poa_date_end'])) 
                && (!isset(
            $_SESSION['b']['session_poa_date_start'])))){
                    
            $onload "onLoad=make_invisible_date_all()";
                }
                
            #nur die zweite Zeile unsichtbar machen, wenn innerhalb der Session Daten für die erste Zeile gespeichert sind, 
            #ABER NICHT für die zweite Zeile
                
            elseif((($_POST['choosen_action'] == "back_to_1") && (!isset($_SESSION['a']['session_poa_date_end'])) 
                && (isset(
            $_SESSION['a']['session_poa_date_start']))) || ((isset($_POST['back_to_show_next_move_form'])) 
                && (!isset(
            $_SESSION['b']['session_poa_date_end'])) && (isset($_SESSION['b']['session_poa_date_start'])))){
                    
            $onload "onLoad=make_invisible_date()";
                }
                else
                
            #alle beide Zeilen werden angezeigt, weil entsprechende Daten in der Session gespeichert sind
                    
            $onload "";
            ?>
            <body <?php echo $onload ?>>

            Kommentar


            • #7
              Ja ist klar...

              <SCRIPT LANGUAGE="JavaScript"> ist doch eine Ausgabe.. Danach kannst du session_start nicht mehr machen..

              Setz das ganz oben in die Datei

              PHP-Code:
              <?php
              session_start
              ();
              ?>
              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
              "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
              <html>
              <head>
                  <title>Titel</title>
                  <link rel="stylesheet" type="text/css" href="css/style.css"/>
                  <SCRIPT LANGUAGE="JavaScript">
              usw...
              gruss Chris

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

              Kommentar


              • #8
                Ok, scheint zu funktionieren. Danke

                Aber nur zum Verständnis, wieso kam die Fehlermeldung nicht immer, sondern erst, wenn die letzte Javascriptfunktion zu "lang" wurde?

                Ist das normal bei dem "headers already sent" problem?

                Kommentar


                • #9
                  Ich halte es für ein grücht das dieser Fehler erst da passiert ist.
                  KEINE AUSGABE vor session_start()...

                  Ob zu lang oder nicht..

                  Hast du zufällig am error_reporting rumgeschraubt oder ob_start() irgendwo in deinem Script entfernt? Das würde die sache noch erklären aber zu langes Javascript kann eigentlich nicht sein.
                  gruss Chris

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

                  Kommentar


                  • #10
                    Wie ich oben schon geschrieben habe, ist der Fehler erst aufgetaucht, als ich den einen Satz angehangen habe in der letzten Javascriptfunktion. Ich hab zu dem Zeitpunkt da nichts anderes verändert! Nachdem ich den Satz wieder gelöscht habe, ging es ja auch wieder und dann hab ich durch probieren getestet wie "weit" ich schreiben kann, bis der Fehler wiederkommt und das war dann eben hinter der 12.

                    - am error_reporting hab ich nichts gemacht
                    - ob_start() hab ich nicht in meinem Code

                    Kommentar


                    • #11
                      Original geschrieben von Boneman
                      - am error_reporting hab ich nichts gemacht
                      - ob_start() hab ich nicht in meinem Code
                      ev. automatisches Buffering in der php.ini aktiviert? AFAIK gibt's da sowas *zuck*

                      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                      Wie man Fragen richtig stellt

                      Kommentar


                      • #12
                        Original geschrieben von ghostgambler
                        ev. automatisches Buffering in der php.ini aktiviert? AFAIK gibt's da sowas *zuck*
                        output_buffering steht auf 4096, falls es das ist.

                        Kommentar


                        • #13
                          Original geschrieben von Boneman
                          output_buffering steht auf 4096, falls es das ist.
                          huh, das ist ja mal ein interessanter sonderfall ...

                          ja, laut manual kann man das output_buffering nicht nur auf on oder off stellen, sondern auch eine maximal bytegröße angeben - war mir bisher auch noch nicht bewusst.

                          in deinem fall hat dann die zusätzliche javascript-codezeile vor dem aufruf eines einen HTTP-header auslösenden befehls (session_start) diese buffergröße gesprengt - und damit ist dann die ausgabe erfolgt, also ergibt sich ein headers already sent-error.
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar

                          Lädt...
                          X