Bild aus MySQL Datenbank anzeigen

willimc

Mitglied
Guten Tag allerseits,
ich habe seit löngerem das Problem, dass ich mittels eines PHP Scripts Bilder zwar in die Datenbank hinein bekomme, aber diese dann daraus nicht anzeigen kann. Bitte Bitte helft mir weiter... das ist mein Code:
PHP:
$result = mysql_query("SELECT bin_data ,filetype FROM binary_data WHERE id = 1");
$Zeile = mysql_fetch_row($result);

$data = $Zeile[0];                  
$type = $Zeile[1];                  
echo $data, "<br>";               //Ausgabe: GIF89ag
echo $type, "<br>";              //Ausgabe: image/gif
Header( "Content-type: $type");
print "<img src='$data'>";       //komischerweise hier die Ausgabe: <img src='GIF89ag
die echos habe ich mal testweise reingeschrieben. Was ich komisch finde ist, dass bei dem print das ganze so ausgegeben wird und nicht ein bild.

was ist denn da nun flasch

danke für eure Antworten im Voraus
Timo
 
Du kannst nicht HTML und GIF gleichzeitig ausgeben, da sie unterschiedliche Inhaltstypen sind.
Du hast nun zwei Möglichkeiten: entweder nutzt du das data-URI-Schema:
PHP:
echo '<img src="data:'.$type.';base64,'.base64_encode($data).'">';
Oder du bindest die Grafiken als externe Ressource ein:
PHP:
// image.php
$result = mysql_query("SELECT bin_data ,filetype FROM binary_data WHERE id = ".((int)$_GET['id']));
if( mysql_num_rows($result) && !headers_sent() ) {
	$row = mysql_fetch_assoc($result);
	header('Content-Type: '.$row['filetype']);
	echo $row['bin_data'];
}
Letzteres hat den Vorteil, dass dafür nicht die Unterstützung des data-URI-Schemas benötigt wird.
 
jo danke schonmal für die antwort.
wenn ich das so anstelle von meiner printzeile einfüge:
PHP:
echo '<img src="data:'.$type.';base64,'.base64_encode($data).'">';
bekomme ich dieses kleine Fenster welches bei einem Bild erscheint das es nicht gibt. Also das mit dem roten Kreuz in der Mitte. Die andere Variante hatte ich auch schonmal ausprbiert und da war es die gleiche situation.
kann es sein, dass das auf meinem server nicht geht? wenn man die bilder reinspeichern kann, müssten sie aber ja auch eigentlich wieder angezeigt werden können oder?
ich habe wirklich keine plan warum das nicht geht. gibt es noch einen trick?

bitte helft mir...
Timo
 
Dann bist du im Besitz eines Browsers, der das data-URI-Schema nicht kennt/unterstützt.

Dein Problem ist, dass du versuchst, zwei unterschiedliche Inhaltstypen (HTML und irgendein Grafikformat) gleichzeitig auszugeben. Und das ist eigentlich nicht möglich.
 
ich benutze momentan den internet explorer.
irgendwie muss ich aber doch die bilder aus der Datenbank anzeichen können. mit ftp upload habe ich auch schonmal versucht, so dass ich nur die pfade speichere aber dasgeht auch noch nicht.
man muss doch das bild aus der datenbank anzeigen können. Ich habe das auf meinem lokalen server von apache auch mal versucht und da geht das so... warum nicht auf dem server im internet?
 
Was du vorhast ist auch möglich. Nur nicht so wie du es dir vorstellst. Probier doch mal meinen zweiten Vorschlag und setzte ein zusätzliches Skript ein, das die Grafiken ausgibt.
 
danke das du so viel geduld mit mir hast ;)
die zweite variante hatte ich auch schonmal vorher ausprobiert und nun nochmal auf ein neues...
Das ist komplett nun das was ich für die ausgabe geschrieben habe:
PHP:
<?php 
//Datei: img_get.php

include 'DB.php'; 
verbinden();

$id = $_GET['id']; 
$strQuery= "select Bild, Bildtyp from user where Nick='$id'"; 
// $id ist ein String

$result=mysql_query($strQuery); 

$row=mysql_fetch_assoc($result); 
header('Content-Type: '.$row['Bildtyp']);
echo $row['Bild']; 

?>

PHP:
<!-- Datei: Profil.php-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>

...


			<!-- user Bild -->
    <span style="position: absolute; top:600; left: 800; z-index: -1">
                <?print "<img src='img_get.php?id=$Nick' width='300'>";?>
    </span>
		<!-- user Bild Ende -->



so füge ich das bild in die datenbank ein falls das wichtig ist (das geht aber)

PHP:
    				if (array_key_exists('img',$_FILES)) { 
                $tmpname = $_FILES['img']['tmp_name']; 
								if ($tmpname!=''){	//ist leer, wenn kein neues bild geladen wurde						 
                    $type = $_FILES['img']['type']; 
                    $hndFile = fopen($tmpname, "r"); 
                    $data = addslashes(fread($hndFile, filesize($tmpname))); 
								
											if (filesize($tmpname)>100000){//Dateigröße prüfen
				 								 $infotext = $infotext.'<br> Das eingef&uuml;ge Bild &uuml;bersteigt die zul&auml;ssige Dateigr&ouml;&szlig;e von 100kb. Alle anderen Daten wurden erfolgreich &uuml;bernommen';
												 $type = Null;
												 $data = Null;
											}
								 }
				    }




$query ="UPDATE user SET 
Bild = '$Bild',
Bildtyp = '$typ'
WHERE Nick = '$Nick'";
$result = mysql_query($query);


ich wäre sehr dankbar wenn du einen fehler findest nach dessen änderung das dann funktioniert.

mfg
Timo
 
Es wäre schön zu erfahren, was genau denn nicht funktioniert? Sind überhaupt Daten in der Datenbank vorhanden? Gibt es bestimmte Fehlermeldungen?
 
Ruf das Skript, das die Grafiken ausgibt, mal direkt auf. Dank des Aufbaus des Skripts sollten mögliche Fehlermeldungen direkt ausgegeben werden (allgemeine Ausgabe von Fehlermeldungen vorausgesetzt). Anderenfalls wäre ein Blick in die Fehler-Logdateien sicherlich aufschlussreich.
 
Zurück