Ankündigung

Einklappen
Keine Ankündigung bisher.

Php Blob auslesen

Einklappen

Neue Werbung 2019

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

  • Php Blob auslesen

    Hallo miteinander,

    ich weiß zwar dass dieses Thema schon oft diskutiert und besprochen wurde.
    Nur ich verzweifle mitlerweile. Ich bekomme das einfach nicht hin.

    Irgendwo muss ich einen dummen Fehler haben.
    Ich versuche aus meiner MySQL Datenbank ein BLOB Feld auszulesen.
    Hier der Quelltext:
    PHP-Code:
    include("incl/connect.inc.php");
    $sql="SELECT * FROM `images`";
    $result mysql_query ($sql); 
    while(
    $row_datei mysql_fetch_array($result))
    {
    $id=($row_datei['id']);
    $imgdata=($row_datei['imgdata']);
    $imgtype=($row_datei['imgtype']);
    echo 
    "<tr>";
    echo 
    "<td>".$id."</td>";                                    
    $schreib="Content-Type: ".$imgtype;
    Header($schreib);
    echo 
    "<td>".$imgdata."</td>";
    echo 
    "<td>".$imgtype."</td>";
    echo 
    "</tr>";
    }
    include(
    "incl/disconnect.inc.php"); 
    Wenn ich es genau so ausführe, bekomme ich nur kryptische Zeichen und diese Fehlermeldung:

    Code:
    Cannot modify header information - headers already sent by [....]
    Wenn ich den Header-Befehl auskommentiere bekomme ich nur die kryptischen Zeichen. Ohne die Fehlermeldung.
    Irgendwas muss ich doch falsch machen.
    Ich hab über 2 Stunden gelesen und wirklich alles versucht.

    Mache ich einen groben Fehler irgendwo? Oder kann auch ein Fehler beim Einlesen passiert sein?

    Danke und Grüße ^^

  • #2
    Standardantwort: http://www.php.de/wiki-php/index.php...s_already_sent

    Wieso speicherst du die Bilder in der Datenbank und legst sie nicht auf dem Server ab?
    [URL]http://hallophp.de[/URL]

    Kommentar


    • #3
      Hallo und danke für deine schnelle Antwort.

      Erstmal warum ich die Bilder nicht auf dem Server speichere.
      Ich hab es vorher so gemacht. Also Bild in einen Ordner auf den Server. Link zum Bild in die DB.
      Hat bei mir lokal wunderbar funktioniert. Dann habe ich alles so wie es war bei Strato hochgeladen (natürlich Connect zur DB angepasst; Rechte vergeben).
      Dann funktionierte der Vorgang des Hochladens nicht mehr.
      Bin bereits da verzweifelt^^

      Dann Alternative gesucht.
      Jetzt zu deinem Link: Heißt das, dass ich nur die Zeile
      Code:
      Header(xxxxxxx);
      irgendwo anders in den Quellcode packen muss.
      So wie ich das verstanden habe, stört sich der Header Befehl mit Sessions (benutze ich auch) usw.

      Aber richtig durchblicken tue ich nicht so ganz.

      Kommentar


      • #4
        Also...

        Zitat von Junge1337 Beitrag anzeigen
        Jetzt zu deinem Link: Heißt das, dass ich nur die Zeile
        Code:
        Header(xxxxxxx);
        irgendwo anders in den Quellcode packen muss.
        Nein! Nicht nur...

        a) ich würde MEDIUM- oder LONGBLOB verwenden, falls die Bilder mal größer sind
        b) Wie du in dem Link von Asipak lesen kannst: Dein Header() ist falsch gesetzt
        c) Du speicherst Bilddaten in der DB und willst die nun wieder als Bild auf der Webseite ausgeben.
        So wie du es machst, ist es vollkommen richtig, das du die "kryptischen" Daten siehst.
        Bilder in der Datenbank speichern und Auslesen funktioniert nun mal anders.

        Inhalt der Datei "dateiname.php":
        PHP-Code:

        include("incl/connect.inc.php");   
        $sql="SELECT id, imgdate,imgtype FROM images where id = ".intval($_GET['bildid']);
        $result mysql_query ($sql); 
        $row mysql_fetch_row($result);

        $id $row[0];
        $imgdata $row[1];
        $imgtype $row[2];     
                       
        $schreib "Content-Type: ".$imgtype;
        Header($schreib);
        echo 
        $imgdata;

        include(
        "incl/disconnect.inc.php"); 
        Und diese Datei ruft du dann mittels
        PHP-Code:
        <img src="dateiname.php?bildid=123"
        in einer anderen Datei auf.

        In diesem Beispiel erzeugt "dateiname.php" ein Bild. Da kannst du keine Tabellen oder andere HTML-Ausgaben verwenden.
        Und... Speichern von Bilddaten in einer Datenbank? Wieso überhaupt das...???

        Im Übrigen:
        Dein Thread-Titel ist falsch.
        Dein Problem ist NICHT das Auslesen eines BLOB-Feldes, sondern das Speichern von Bildern in der Datenbank und Auslesen
        "Nein, nein das Beste an Zombieland ist: Keine Facebook-Status-Updates mehr.
        'Rob Curtis freut sich schon auf Freitag', wen interessierts?"

        Kommentar


        • #5
          So,

          ich hab mir jetzt alles durchgelesen und umgebaut.
          kryptische Zeichen gibt er mir nicht mehr aus. Sondern gar nix^^

          Ich bin mir sehr sicher, dass ich das jetzt alles richtig aufgebaut habe.
          Hier mein Aufbau:

          Da wo die Informationen und das Bild selber angezeigt werden sollen.
          PHP-Code:
          <?php
          include("incl/connect.inc.php");
          $sql="SELECT * FROM `images`";
          $result mysql_query ($sql); 
          while(
          $row_datei mysql_fetch_array($result))
          {
          $id=($row_datei['id']);
          $imgdata=($row_datei['imgdata']);
          $imgtype=($row_datei['imgtype']);
          echo 
          "<tr>";
          echo 
          "<td>".$id."</td>";
          ?> <td><img src="dateiname.php?bildid=<?php echo $id ?>"></td> <?php
          echo "<td>".$imgtype."</td>";
          echo 
          "</tr>";
          }
          include(
          "incl/disconnect.inc.php");
          ?>
          Und hier dateiname.php:
          PHP-Code:
          <?php
          include("incl/connect.inc.php");   
          $sql="SELECT id, imgdate,imgtype FROM images where id = ".intval($_GET['bildid']);
          $result mysql_query ($sql); 
          $row=mysql_fetch_row($result);

          $id $row[0];
          $imgdata $row[1];
          $imgtype $row[2];     
                         
          $schreib "Content-Type: ".$imgtype;
          Header($schreib);
          echo 
          $imgdata;

          include(
          "incl/disconnect.inc.php"); 

          ?>
          Wenn ich es so aufrufe (dateiname.php?bildid=1) bekomme ich diese Meldung:

          Code:
          Fehlermeldung: 
          Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\XAMPP\xampp\htdocs\wolf\Admin\dateiname.php on line 5
          
          und
          
          Warning: Cannot modify header information - headers already sent by
          Ich gucke mir schon so lange diese Zeilen an. Ich glaube ich finde die einfachsten Problem nicht mehr.

          Kommentar


          • #6
            Warning: Cannot modify header information - headers already sent by
            ist diesmal ein Folgefehler, den brauchst du erstmal nicht beachten.


            Wenn ich es so aufrufe bekomme ich diese Meldung:
            Übergibst du dabei auch den Parameter bildid?

            http://www.php.de/wiki-php/index.php/Debugging:SQL

            kryptische Zeichen gibt er mir nicht mehr aus. Sondern gar nix^^
            Das rührt daher, weil die dateiname.php nicht fehlerfrei ist und kein Bild erzeugt wird und du das alt="" - Attribut im <img> - Tag nicht angegeben hast.
            [URL]http://hallophp.de[/URL]

            Kommentar


            • #7
              Toll das ihr so schnell Antwortet!
              Übergibst du dabei auch den Parameter bildid?
              Ja übergebe ich. Es wird so aufgerufen: dateiname.php?bildid=1

              Das rührt daher, weil die dateiname.php nicht fehlerfrei ist und kein Bild erzeugt wird und du das alt="" - Attribut im <img> - Tag nicht angegeben hast.
              Ja das mit dem alt-Tag ist ja wohl egal oder?
              Wenn ich das mit angebe

              PHP-Code:
              ?> <td><img src="dateiname.php?bildid=<?php echo $id ?>" alt="Alternativer Text"></td> <?php
              geht das trotzdem nicht.
              Das noch ein Fehler in der dateiname.php ist kann ich mir vorstellen.
              Aber ich muss doch nicht in dieser Datei auch ein <img> Tag mit angeben.
              Das mache ich doch nur da, wo das Bild angezeigt werden soll.

              Edit:
              So habe ein weiteres Problem gelöst. Der Select war falsch. Vertippt. Könnt das was oben steht fast vergessen^^
              Wenn ich jetzt dateiname.php?bildid=1 aufrufe bekomme ich wieder die kryptischen Zeichen.
              Mit der Fehlermeldung
              Cannot modify header information - headers already sent by
              In der Datei wo es aufgerufen wird bekomme ich nur den Alternativen Text zusehn.

              Ich weiß mittlerweile nicht mehr weiter. Ich hab das jetzt so programmiert wie in einem Link beschrieben. Es will trotzdem nicht gehn.
              Kann der Fehler beim Upload sein? Oder mache ich noch was anderes falsch?

              Kommentar


              • #8
                Wenn die Fehlermeldung immer noch erscheint, musst du noch mal zurück ins Wiki: http://www.php.de/wiki-php/index.php...s_already_sent

                Kann der Fehler beim Upload sein?
                Nein.
                [URL]http://hallophp.de[/URL]

                Kommentar


                • #9
                  Ich glaube ich hab das verstanden mit dem Header Befehl.

                  Bevor irgendwas an den Browser geschickt wird, muss der Header Befehl ausgeführt werden.

                  Jetzt verstehe ich das so, dass ich den Befehl möglichst in den ersten Zeilen des Quelltextes packen muss. Nur egal in welche Zeile ich das Packe, es will nicht funktionieren.
                  Auch nicht wenn ich es einfach in die allererste Zeile packe.
                  Oder denke ich da wieder falsch?

                  Kommentar


                  • #10
                    Bevor irgendwas an den Browser geschickt wird, muss der Header Befehl ausgeführt werden.
                    Das ist richtig.
                    Jetzt verstehe ich das so, dass ich den Befehl möglichst in den ersten Zeilen des Quelltextes packen muss.
                    Das liegt nahe. Doch im Grunde ist die Zeile egal, wenn
                    Bevor irgendwas an den Browser geschickt wird, muss der Header Befehl ausgeführt werden.
                    erfüllt ist.
                    Nur egal in welche Zeile ich das Packe, es will nicht funktionieren.
                    Hast du auch mal den Teil zu BOM überprüft und die Empfehlung am Ende des Artikels umgesetzt?
                    [URL]http://hallophp.de[/URL]

                    Kommentar

                    Lädt...
                    X