Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Eingebettetes PHP in HTML

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Eingebettetes PHP in HTML

    Hallo zusammen,

    nach mehreren Jahren der "Abstinenz", habe ich mal wieder Lust bekommen etwas zu scripten.
    Leider hadere ich nun seit mittlerweile 3 Tagen mit der FM des allseits bekannten "Headers already send by....blablabla".
    Bitte ruhig bleiben jetzt

    Mich interessiert nur ob meine Schlussfolgerung korrekt ist. Hab ja schon einiges gelesen dazu...(WIKI, hier im Forum und Google)

    Heißt das im Umkehrschluss das ich keine PHP Datei erzeugen darf die nur an der Stelle an der ich den dynamischen Teil haben möchte den PHP-Code enthält, weil vorangegangen eine HTML Ausgabe (die ja HTML-nativ war und nicht im PHP-Tag stand) erfolgt ist?

    Wenn das so ist, ist das bei anderen Scriptsprachen auch so? Sonst müsste ich mir über meine Zielscriptsprache Gedanken machen...

    Wie ist der vorgeschlagene Weg so etwas zu realisieren?
    Ich meine jetzt nicht die BOM, "ob_start();", Ausgaben vermeiden oder "Leerzeilen vermeiden" Methode. Irgendwo muss ich ja erst mal die Seite haben in der ich dann meine dynamische Ausgabe mache. Also erfolgt zwangsläufig doch immer eine Ausgabe vorher.

    Andere Ansätze bei denen man keine Header ändern muss, etc?

    Ich hoffe nur es regt sich jetzt keiner auf weil dies schon so oft besprochen wurde...mir geht es leider um das Verständnis

    Viele Grüße
    Frank


  • #2
    ich verstehe die frage noch nicht richtig, aber ich versuchs mal :
    du willst eine .php datei erstellen
    die soll mit html code beginnen und irgendwo drin mal php code enthalten

    - wo ist das problem? bevor der html code beginnt includierst du die notwendigen datein oder schreibst die php funktionen etc, dann normal html mit doctype, header, body etc. und innerhalb des html codes greifst du den einfach indem du ein neues <?php ?> aufmachst auf die benötigten variablen etc zu ?

    ich hoffe mal das war die frage^^

    Kommentar


    • #3
      So richtig verstehe ich gar nicht, was du eigentlich wissen möchtest. Eventuell interessiert dich: EVA-Prinzip (Standardverfahren) - PHP.de Wiki

      Gruß
      http://hallophp.de

      Kommentar


      • #4
        eigentlich ist das "headers already sent ..." nur ein Hinweis auf unsauberen Code bei dir ...

        logischerweise hat natürlich eine HTML - Seite bereits begonnen, wenn du den php-Code "mitten rein" schreibst ...

        danach hat in deinem php-Code alles was nach header(bla) aussieht nichts mehr verloren...

        wenn du das vermeiden willst , hat Luke schon die Hinweise gegeben

        lass PHP-Code zuerst in der Datei seine header senden , dann "könntest" du html anschließen - aber wenn du den header-typ mit php verbiegst, kommt wohl sowieso kein normales HTML

        und um auf deine Fragen ein wenig einzugehen - wenn du diesen Stil wählst HTML - Script-Code - weiteres HTML, dann ist es weitgehend egal ob du mit PERL oder PHP oder was anderem "SERVER-seitigem" darin herumprogrammierst, der Header der Seite wurde JEDESMAL schon von html (<doctype><html><head>) erzeugt und ensprechende Manipulationen werden dann in jeder der Sprachen zu einer gleichlautenden Fehlermeldung führen
        "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

        Kommentar


        • #5
          Ich wollte vermeiden zuviel über das generelle Problem des "Headers already send by" zu schreiben, weil das nur auf Unbehagen stürzt.

          Hoffentlich werden die weiteren Details nicht OT. Ist fürs Verständnis aber wohl nötig. Ich möchte es halt nur verstehen wie ich damit umgehe...

          Was ich machen möchte ist ein Bild, neben vieler weiterer DB-Inhalte, aus einer MySQL DB auslesen und an einer bestimmten Stelle darzustellen. Dazu habe ich mir (ich bin ein bequemer Mensch) die mehr oder weniger komplexe Webseite im WYSIWYG Editor erstellt und habe an der Stelle ander ich meine DB-Ausgabe darstellen möchte PHP Code eingefügt. Funktioniert ja auch sonst immer prima. Nur muss ich natürlich zur Darstellung meines Bildes den Header ändern auf "Content-Type:image/jpg".
          Das führt dann zum bekannten und viel diskutiertem Problem.
          Die Ursache ist mir schon klar. Es ist eine Ausgabe (in Form von HTML-Code) vor dem PHP-Tag erfolgt und macht nun eine Änderung des Headers nicht mehr möglich.
          Nur wie arbeiten denn andere damit? Die stellen doch auch Bilder die sie aus einer DB ausgelesen haben an einer beliebigen Stelle dar. Vielleicht sehe ich nach 3 Tagen damit auch den Wald vor lauter Bäumen nicht mehr...

          Gruß
          Frank

          Kommentar


          • #6
            Bilder gehören nicht in die Datenbank. Dort kannst du den relativen oder absoluten Pfad ablegen und das Bild dann wie gewohnt über das <img> - Tag einbinden. Wenn du eine durch PHP erzeugte Grafik einbinden möchtest, kannst du den Code in eine separate PHP-Datei auslagern, dort den header setzen und die Datei wieder über das <img> - Tag einbinden.
            http://hallophp.de

            Kommentar


            • #7
              Zitat von eagle275 Beitrag anzeigen
              lass PHP-Code zuerst in der Datei seine header senden , dann "könntest" du html anschließen - aber wenn du den header-typ mit php verbiegst, kommt wohl sowieso kein normales HTML
              Wenn ich das mache und vorher den Header auf "Content-Type:image/jpg" setze, kann ich doch keinen Text mehr anzeigen, oder? Dann wird meine gesamte Webseite als Grafik interpretiert vermute ich mal.

              Gruß
              Frank

              Kommentar


              • #8
                Zitat von Asipak Beitrag anzeigen
                Bilder gehören nicht in die Datenbank. Dort kannst du den relativen oder absoluten Pfad ablegen und das Bild dann wie gewohnt über das <img> - Tag einbinden. Wenn du eine durch PHP erzeugte Grafik einbinden möchtest, kannst du den Code in eine separate PHP-Datei auslagern, dort den header setzen und die Datei wieder über das <img> - Tag einbinden.
                Bilder in DB oder nicht ist auch eine Diskussion für sich
                Ich glaube das ich deinen Weg mal ausprobieren werde. Pfad zur Datei in die DB und die Datei selbst in Dateiform auf dem Webserver um sie dann über das IMG-Tag aufzurufen.
                Danke erst mal für die Antworten.
                Ich probiere mal weiter...

                Gruß
                Frank

                Kommentar


                • #9
                  also ich weiß sicher nicht, wie JEDER andere das programmiert - aber ich schätz mal 95% der Webprogrammierer legen "natürlich" nicht die Binärdaten des Bildes in die Datenbank, sondern in der Datenbank steht der Pfad und Dateiname des Bildes, wo es im Dateisystem liegt -

                  dann reicht an der Stelle eine Datenbank-Abfrage, die den Pfad liefert und du packst das Bild mit "normalem" <img src="Pfad aus Datenbank" alt="Text, kann auch aus datenbank kommen" > auf die Seite

                  für deinen Fall .. mit den Mitteln der gd (image-funktionen) kannst du mit imagefromstring oder so ähnlich die Binärdaten aus der Datenbank in ein Image-Objekt konvertieren, dieses Temporär auf dem Webserver speichern und dann wieder mit <img- Tag ausgeben, ohne den Header verbiegen zu müssen
                  "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

                  Kommentar


                  • #10
                    Bilder in DB oder nicht ist auch eine Diskussion für sich
                    Die hier auch schon häufiger geführt wurde. Kannst dich ja mal durchgraben.
                    http://hallophp.de

                    Kommentar


                    • #11
                      Zitat von venni Beitrag anzeigen
                      Ich wollte vermeiden zuviel über das generelle Problem des "Headers already send by" zu schreiben, weil das nur auf Unbehagen stürzt.

                      Hoffentlich werden die weiteren Details nicht OT. Ist fürs Verständnis aber wohl nötig. Ich möchte es halt nur verstehen wie ich damit umgehe...

                      Was ich machen möchte ist ein Bild, neben vieler weiterer DB-Inhalte, aus einer MySQL DB auslesen und an einer bestimmten Stelle darzustellen. Dazu habe ich mir (ich bin ein bequemer Mensch) die mehr oder weniger komplexe Webseite im WYSIWYG Editor erstellt und habe an der Stelle ander ich meine DB-Ausgabe darstellen möchte PHP Code eingefügt. Funktioniert ja auch sonst immer prima. Nur muss ich natürlich zur Darstellung meines Bildes den Header ändern auf "Content-Type:image/jpg".
                      Das führt dann zum bekannten und viel diskutiertem Problem.
                      Die Ursache ist mir schon klar. Es ist eine Ausgabe (in Form von HTML-Code) vor dem PHP-Tag erfolgt und macht nun eine Änderung des Headers nicht mehr möglich.
                      Nur wie arbeiten denn andere damit? Die stellen doch auch Bilder die sie aus einer DB ausgelesen haben an einer beliebigen Stelle dar. Vielleicht sehe ich nach 3 Tagen damit auch den Wald vor lauter Bäumen nicht mehr...

                      Gruß
                      Frank

                      Du hast hier einen gravierenden Denkfehler. Nur weil du ein Bild anzeigen willst, wird dadurch deine Webseite nicht plötzlich zum Bild, ein derartiger header() Aufruf hat da also ohnehin nichts verloren. Wenn dein Bild binär aus der DB kommt, kannst du es so einbinden:

                      PHP-Code:
                      <img src="data:image/jpeg;base64,<?php echo base64_encode($image); ?>">
                      Aber wie schon gesagt wurde: Das macht eigentlich niemand so
                      @fschmengler - @fschmengler - @schmengler
                      PHP Blog - Magento Entwicklung - CSS Ribbon Generator

                      Kommentar


                      • #12
                        ok, du erstellst ein Bild mit php und willst das auf deiner Seite anzeigen, versteh ich das richtig?

                        Du kannst natürlich nicht den php-Code zur Bilderzeugung in die HTML-Datei schreiben, da du ja dazu den Content-Type ändern müsstest. Und ein Bild kann keinen html-Code enthalten.

                        Also einfach die Methodik zur Bilderzeugung in eine eigene Datei auslegen und diese über das <img>-Tag wie jedes andere Bild darstellen.

                        Wo du das Bild speicherst ist hier irrelevant.

                        Kommentar


                        • #13
                          Platzier' den PHP-Teil mit allen Datenbankzugriffen und Berechnungen ganz an den Anfang der Datei, also vor den DOCTYPE, und gib innerhalb des HTML-Teils nur noch die fertigen Werte aus.
                          Ergibt sich die Notwendigkeit, mit header.location woandershin hüpfen zu müssen, was man bei passendem Scriptdesign eh meist nicht braucht, dann passiert das noch vor dem <html>-Tag.
                          PHP-Code:
                          if ($var != 0) {
                            
                          $var 0;

                          Kommentar


                          • #14
                            Oh, in der ganzen Scripterei ist mir garnicht aufgefallen das neue Beiträge gekommen sind
                            Ich versuche es jetzt mal so wie vorgeschlagen.
                            Also die Bilddatei selbst auf das Filesystem des Webservers. Und in der DB nur die Referenz auf die Datei.
                            Läuft auch schon soweit. Die Darstellung sollte dann nicht mehr das Problem sein über die Referenz auf das Bild des Webservers. Ist dann ja kein binärer Datenstrom mehr den ich ausgeben muss.

                            Trotzdem vielen, vielen Dank für die Erklärungen!
                            Hat mir super geholfen.

                            DANKE!!!

                            Kommentar

                            Lädt...
                            X