Announcement

Collapse
No announcement yet.

BILD (blob) in Datenbank

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • BILD (blob) in Datenbank

    Moin zusammen,

    ich benötige mal eure Hilfe.
    Ich habe eine Tabelle in der ich Bilder als "longblob" speichere.
    Nun kann man aber anscheinend nicht diese Bilder und Text ausgeben, da der Header dann verrückt spielt.

    Daher gibt es wohl die Lösung des Befehls "<IMG SCR ..."

    <IMG SRC="data:<? echo $type ?>;base64,<? echo $data ?>" />

    Jedoch ist der Inhalt der BLOB-Datei eine andere als die benötigte "Data URL".

    Nun die Frage:
    Wie wandel ich diese "BLOB" Information in "Data URL" Informationen um?
    Kann ich evtl. direkt beim hochladen der Informationen in die Datenbank diese informationen speichern?

    Tabellenaufbau:
    ID int(4) auto_increment Primärschlüssel
    description varchar(50) latin1_swedish_ci
    DATA longblob BINARY
    NAME varchar(50) latin1_swedish_ci
    SIZE varchar(50) latin1_swedish_ci
    TYPE varchar(50) latin1_swedish_ci
    VOTE varchar(50) latin1_swedish_ci
    USER varchar(50) latin1_swedish_ci

    Beispiel:
    @MYSQL_CONNECT($db_host,$db_username,$db_password) ;
    @mysql_select_db($db_name);
    $query = "select DATA,TYPE,NAME,ID from BILDER";
    $result = @MYSQL_QUERY($query);
    $data = @MYSQL_RESULT($result,0,"DATA");
    $type = @MYSQL_RESULT($result,0,"TYPE");
    $name = @MYSQL_RESULT($result,0,"NAME");
    $id = @MYSQL_RESULT($result,0,"ID");

    <IMG SRC="data:<? echo $type ?>;base64,<? echo $data ?>" />

    Gruß
    Scrat

  • #2
    Hallo Scrat,

    offensichtlich ist dir (noch) nicht ganz klar wie das Zusammenspiel von Webbrowser, HTTP, Webserver, HTML und PHP funktioniert und wer wofür zuständig ist.
    Wenn du ein Bild, welches im Binärformat auf dem Server vorliegt (erstmal egal ob als Datei oder in einer DB) im Browser anzeigen willst, mußt du diese Binärdaten mit dem entsprechenden Content-Type, also z.B. image/jpeg für ein jpg-Bild ausliefern. Diese Binärdaten dürfen natürlich nicht zwischendrin irgendwelchen Plain-Text enthalten. Genausowenig sollten Binärdaten enthalten sein wenn lt. Content-Type eine text/html Seite ausgeliefert wird.
    Um jetzt ein Bild im Browser (Client) anzuzeigen, welches sich als Binärdaten in einer DB befindet, kannst du z.B. ein PHP-Script verwenden. Dieses Script muß den Header für Content-Type auf einen zum Bildtyp passenden Wert setzen und anschließend nur und ausschließlich die Bilddaten ausgeben, nichts weiter - keinen Text, keinen zusätzlichen Zeilenumbruch - nur die reinen binären Bilddaten.
    Sollen im Browser mehrere Bilder zusammen mit Text angezeigt werden, mußt du dem Client zuerst diese Informationen als HTML-Seite liefern. Diese HTML-Seite kann dann Tags der Form <img src=".../> enthalten. Mit src kannst du jetzt die URL zu o.g. Bild-Script angeben (sinnvollerweise mit einem Parameter für die ID oder den Namen des Bildes)

    In Kurzfassung benötigst du also zwei Scripte:

    bilderliste.php
    PHP Code:
    ...
    $query "select NAME, ID from BILDER";
    $result = @MYSQL_QUERY($query);
    while (
    $row mysql_fetch_assoc($result)) {
      echo 
    '<img src="einbild.php?id='.$row['ID'].'" alt="'.$row['NAME'].'" />';
    }
    ... 
    einbild.php
    PHP Code:
    ...
    $id $_GET['id'];
    if (
    is_numeric($id)) {
      
    $id = (int) $id;

      
    $query "select DATA,TYPE from BILDER where ID = $id";
      
    $result = @MYSQL_QUERY($query);
      if (
    $row mysql_fetch_assoc($result) {
        
    header('Content-Type: '.$row['TYPE ']); // unter der Voraussetzung das im DB-Feld TYPE ein gültiger Content-Type steht
        
    print($row['DATA']);
        exit;
      }
    }

    header("HTTP/1.0 404 Not Found");
    exit; 
    Zumindest so im Prinzip .

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment

    Working...
    X