Image aus Datenbank im Body ausgeben

smyle

Erfahrenes Mitglied
Hallo ich habe folgende Tabelle,
SQL:
CREATE TABLE IF NOT EXISTS `accounts` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`imagename` varchar(30) DEFAULT NULL,
`imagetype` varchar(30) DEFAULT NULL,
`imagesize` int(11) DEFAULT NULL,
`imagecontent` mediumblob,
`session` varchar(32) DEFAULT NULL,
`aenderung` varchar(50) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=81 ;

und folgender php Code:

HTML:
<?php
include '..\..\lib\mysql.inc.php';

//$id = $_GET['id'];  
$id = "1";

$query = mysql_query("SELECT * FROM `accounts` WHERE ID='".$id."'");
$row = mysql_fetch_array($query);
$content = $row['imagecontent'];

header('Content-type: image/jpg');
     echo $content;

?>
<html>
<head></head>
<body>
<?php
echo "<img src='show_image.php?id=1' width='150px'/>";  
?>
</body>
</html>

Ich kann das Bild mit echo $content am bestehenden Ort ausgeben.

Wenn ich jedoch das $content im Body ausgeben möchte, funktioniert das nicht. Ich erhalte immer folgende Meldung:

Die Grafik „http://localhost/projekt1/management/account/show_image.php“ kann nicht angezeigt werden, weil sie Fehler enthält.


Wie ihr im Code sehen könnt habe ich es auch schon mit img versucht. Hat aber nichts gebracht. Wisst ihr warum das so ist?

Ich habe auch schon verschiedene Tutorials aus dem Internet versucht.
Auch habe ich sehr viele Informationen zu diesem Thema gefunden, aber leider hat keine funktioniert.
Ich weiss leider nicht mehr wo suchen und was versuchen.

Was kann ich in meinem Code ändern, damit ich das Bild im Body ausgeben kann?

Danke im Voraus für die Hilfe

Gruss
Smyle :-*
 
Zuletzt bearbeitet von einem Moderator:
Hi,

du kannst das Bild nicht direkt im Body ausgeben, das geht so nicht. Du kannst im Body auf ein Bild referenzieren, jedoch nicht direkt ausgeben.

Teile deinen Code in 2 Dateien auf, dann gehts:
PHP:
<?php
// show_image.php
include '..\..\lib\mysql.inc.php';

//$id = $_GET['id'];  
$id = "1";

$query = mysql_query("SELECT * FROM `accounts` WHERE ID='".$id."'");
$row = mysql_fetch_array($query);
$content = $row['imagecontent'];

header('Content-type: image/jpg');
echo $content;
?>

HTML:
<!-- ansicht.html -->
<html>
<head></head>
<body>
<img src="show_image.php?id=1" width="150px" />
</body>
</html>

Gruß
BK
 
Hallo

Ich habe nun das
HTML:
<img src="show_image.php?id=1" width="150px" />
in einer anderen Datei eingefüht. Welche sich im selben Ordner befindet wie die Show_image.php Datei. Auf der Homepage zeigt es mir zwar keinen Fehler mehr an (denn vorher hat es mir immer irgendwelche Zeichen angezeigt), aber auch kein Bild. Irgendetwas ist noch falsch.

Muss man die schow_image.php im Header noch über include verbinden oder reicht das nur wenn ich das als img angebe?

Mir ist noch aufgefallen:

Im IE wenn ich den direkten Pfad zur show_image Datei eingebe, dann fragt es mich ob ich es öffnen oder speichern möchte.
Wenn ich auf öffne gehe, dann öffnet sich ein neuer IE Browser und das Bild wir angezeigt. Jedoch ist der Link der aus den Temporay Internet Files und nicht mein show_image Link.

Wenn ich den direkten Pfand im Firefox eingebe, dann wird das Bild direkt angezeigt.

Vielleicht hilft dieses Wissen etwas.
 
Zuletzt bearbeitet von einem Moderator:
Konnte das Problem lösen, war ein Fehler im Pfad. Habe jedoch ein anderes Problem. Da nicht alle Zeilen ein Bild haben, möchte ich einen Platzhalter setzten.
Das heisst wenn das $Conntent Null ist (denn in der Datenbank ist es NULL) dann soll es ein anderes Bild, welches ich in meinem Ordner habe, übernehmen.

Wie kann ich das machen?

Ich habe es mit folgendem Code versucht, hat aber nicht funktioniert :(
PHP:
<?php
include '..\..\lib\mysql.inc.php';

$id = $_GET['id'];  
//$id = "1";

$query = mysql_query("SELECT * FROM `accounts` WHERE ID='".$id."'");
$row = mysql_fetch_array($query);
$content = $row['imagecontent'];

header('Content-type: image/jpg');
 //echo $content;
 
 if($content === NULL)
 {
  echo"NEIN";
 }
 else
 {
   echo $content;
 }

?>
 
Hi,

dein Ansatz ist zwar richtig, aber dein Codeschnipsel oben funktioniert so nicht. Text ist kein Bild, daher wird auch nichts angezeigt.

Über die "header()" Zeile teilst du dem Browser mit: "Achtung, hier kommt ein Bild!". Daher ist das "echo" ein paar Zeilen weiter unten falsch / ungültig, da dies ja ein Text und kein Bild ist.

Im if-Teil musst du also dein Alternativ-Bild auslesen und ausgeben. Hierfür kannst du die Funktion readfile() verwenden.

Beispiel:
PHP:
if($content == NULL) {
  readfile("alternativ.jpg");
} else {
  echo $content;
}

//Edit: Noch ein Verbesserungsvorschlag um dich gegen SQL-Injection abzusichern:
PHP:
// entweder: (Mein Favorit wenn eine Zahl erwartet wird)
$id = intval($_GET['id']);

// oder weiter unten: (Alternativ, auch für Strings gültig)
$query = mysql_query("SELECT * FROM `accounts` WHERE ID='"
           . mysql_real_escape_string($id) . "'");

Gruß
BK
 
Zuletzt bearbeitet:
Zurück