Bilddatenbank in mySQL
komet007
- php
Hallo zusammen,
Ich bin am verzweifeln, ich habe mir eine Bilddatenbank gebastelt, in die ich Bilder in ein Blob-Format übertrage. Das klappt auch wunderbar, ich kann sie nur auf meiner Seite nicht mehr auslesen lassen. Dazu bin ich folgendermaßen vorgegangen:
Einlesen durch Erzeugen eines Strings:
$data = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));
Ausleseskript:
<?
include("dbopen.php");
$query = "SELECT bilddaten,bildtyp FROM bilddatenbank where number=$id";
$result = @mysql_query($query);
$data = @mysql_result($result,0,"bilddaten");
$type = @mysql_result($result,0,"bildtyp");
header( "Content-type: image/jpeg");
echo $data;
?>
Dieses PHP-Skript speichere ich nun separat ab und rufe es durch folgendes IMG-Tag in der gewünschten Seite auf:
<img src="bilder.php?id=1">
Das obere Skript funktioniert definitiv, wenn ich es als PHP-Seite aufrufe, kommen auf alle Fälle binäre Daten im Browser an, nur scheint es, als ob der Browser mit dem Aufruf im Image-Tag nichts anfangen kann. Über eure Hilfe dazu wäre ich äußerst dankbar.
Gruß
Wolfgang
hi,
Einlesen durch Erzeugen eines Strings:
$data = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));
Nutze mysql_real_escape_string, nicht addslashes.
Ausleseskript:
<?
include("dbopen.php");
$query = "SELECT bilddaten,bildtyp FROM bilddatenbank where number=$id";
Woher kommt $id?
Bitte berücksichtige register_globals=off.
$data = @mysql_result($result,0,"bilddaten");
$type = @mysql_result($result,0,"bildtyp");
Du bist noch in der Debug-Phase - wieso unterdrückst du da mögliche Fehlermeldungen?
Das obere Skript funktioniert definitiv, wenn ich es als PHP-Seite aufrufe, kommen auf alle Fälle binäre Daten im Browser an,
Kommen irgendwelche "Zeichen" an, oder kann der Browser es als Bild interpretieren?
gruß,
wahsaga
hi,
Einlesen durch Erzeugen eines Strings:
$data = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));
Nutze mysql_real_escape_string, nicht addslashes.
Ausleseskript:
<?
include("dbopen.php");
$query = "SELECT bilddaten,bildtyp FROM bilddatenbank where number=$id";Woher kommt $id?
Bitte berücksichtige register_globals=off.
Die ID wird über
<img src="bilder.php?id=1">
übergeben, dies ist allerding nicht relevant, da es sich lediglich um den Datensatz handelt in dem sich das gewünschte Bild befindet.
$data = @mysql_result($result,0,"bilddaten");
$type = @mysql_result($result,0,"bildtyp");Du bist noch in der Debug-Phase - wieso unterdrückst du da mögliche Fehlermeldungen?
...ja, wenn ich mal eine Fehlermeldung bekommen würde...
Das obere Skript funktioniert definitiv, wenn ich es als PHP-Seite aufrufe, kommen auf alle Fälle binäre Daten im Browser an,
Kommen irgendwelche "Zeichen" an, oder kann der Browser es als Bild interpretieren?
es kommen irgendwelche Zeichen an, da wo sich das Image-Tag befindet wird lediglich ein leerer Platzhalter angezeigt.
hi,
bitte vernünftig zitieren, Danke.
Woher kommt $id?
Die ID wird über
<img src="bilder.php?id=1">
übergeben,
Gut, frage ich noch mal anders: Wie wird sie im Script in Empfang genommen?
Ich wiederhole:
Bitte berücksichtige register_globals=off.
$id muss nämlich nicht "automatisch" gesetzt sein, das hängt von der Konfugiration ab. Also mache es bitte gleich vernünftig.
dies ist allerding nicht relevant, da es sich lediglich um den Datensatz handelt in dem sich das gewünschte Bild befindet.
Natürlich ist das relevant - keine ID, kein ausgelesener Datensatz, kein Bild.
Kommen irgendwelche "Zeichen" an, oder kann der Browser es als Bild interpretieren?
es kommen irgendwelche Zeichen an, da wo sich das Image-Tag befindet wird lediglich ein leerer Platzhalter angezeigt.
Nochmal:
Wenn du das Bilderscript über die Adresszeile im Browser direkt aufrufst(!) - werden dann nur "komische Zeichen" angezeigt, oder interpretiert der Browser die Daten als gültiges Bild?
gruß,
wahsaga
hi,
bitte vernünftig zitieren, Danke.
Woher kommt $id?
Die ID wird über
<img src="bilder.php?id=1">
übergeben,Gut, frage ich noch mal anders: Wie wird sie im Script in Empfang genommen?
$query = "SELECT bilddaten,bildtyp FROM bilddatenbank where number=$id";
Ich wiederhole:
Bitte berücksichtige register_globals=off.
$id muss nämlich nicht "automatisch" gesetzt sein, das hängt von der Konfugiration ab. Also mache es bitte gleich vernünftig.
dies ist allerding nicht relevant, da es sich lediglich um den Datensatz handelt in dem sich das gewünschte Bild befindet.
Natürlich ist das relevant - keine ID, kein ausgelesener Datensatz, kein Bild.
nee, der Datensatz wird über den Select-Befehl von oben auf alle Fälle richtig ausgelesen.
Kommen irgendwelche "Zeichen" an, oder kann der Browser es als Bild interpretieren?
es kommen irgendwelche Zeichen an, da wo sich das Image-Tag befindet wird lediglich ein leerer Platzhalter angezeigt.
Nochmal:
Wenn du das Bilderscript über die Adresszeile im Browser direkt aufrufst(!) - werden dann nur "komische Zeichen" angezeigt, oder interpretiert der Browser die Daten als gültiges Bild?
nein es kommen einfach nur irgendwelche Zeichen an.
Das Bild in der Datenbank hat gerade mal 3kb.
ich setze jetzt mal noch register_globals=off und melde mich gleich wieder.
gruß
Wolfgang
Nochmal:
Wenn du das Bilderscript über die Adresszeile im Browser direkt aufrufst(!) - werden dann nur "komische Zeichen" angezeigt, oder interpretiert der Browser die Daten als gültiges Bild?
also die Geschichte mit register_globals=off hat lediglich mit nicht Zulassen von Variablen von extern zu tun, generell trägt dies nicht zur Lösung meines Problemes bei. Wie gesagt, der Datensatz in dem sich das Bild befindet, wird einwandfrei gefunden, nur kann der Browser mit den Binären Daten die er erhält nichts anfangen. Soweit ich bis jetzt im Internet darüber etwas gefunden habe, muss das Bild über einen Image-Tag aufgerufen werden und an den Header
header( "Content-type: image/jpeg");
übergeben werden, da der Browser sonst mit dem Bildformat nichts anfangen kann.
<img src="bilder.php">
Mir kommt es eben so vor, als ob der Aufruf der PHP-Seite über das Image-Tag nicht funktioniert.
hi,
also die Geschichte mit register_globals=off hat lediglich mit nicht Zulassen von Variablen von extern zu tun, generell trägt dies nicht zur Lösung meines Problemes bei.
Hat niemand behauptet - aber du schaffst dir damit _mutwillig_ neue Probleme.
Soweit ich bis jetzt im Internet darüber etwas gefunden habe, muss das Bild über einen Image-Tag aufgerufen werden und an den Header
header( "Content-type: image/jpeg");
übergeben werden, da der Browser sonst mit dem Bildformat nichts anfangen kann.
Und, ist das das verwendete Bildformat?
Mir kommt es eben so vor, als ob der Aufruf der PHP-Seite über das Image-Tag nicht funktioniert.
Mir kommt es so vor, als ob du nur ständig das gleiche wiederholst.
Wie du so bei der Problemlösung weiterkommen willst, ist mir rätselhaft.
gruß,
wahsaga
Und, ist das das verwendete Bildformat?
Format stimmt soweit
Hell-O!
Und, ist das das verwendete Bildformat?
Format stimmt soweit
Überprüfe bitte mal den im Header der Serverantwort übermittelten Content-type (z.B. mit HTTP trace). Könntest du dein Bild-Script zudem mal verlinken?
Siechfred
Hell-O!
Und, ist das das verwendete Bildformat?
Format stimmt soweitÜberprüfe bitte mal den im Header der Serverantwort übermittelten Content-type (z.B. mit HTTP trace). Könntest du dein Bild-Script zudem mal verlinken?
gerne: http://www.no-13.de/bild.php
allerdings hast du mir glaube ich mit HTTP trace schon geholfen. Mein Server spuckt mir den Content-Type nicht aus, obwohl ich ihn sogar fest im Head-Berecht der Seite getestet hatte, mit:
<head>
<meta http-equiv="Content-Type" content="image/jpeg">
</head>
liegts wohl doch am Apache-Server?
Gruß
Mein Server spuckt mir den Content-Type nicht aus
Ja, Content-type ist text/html, nicht image/jpeg. Würdest du jetzt bitte noch am Anfang deines Scriptes ein [link:http://php.net/error_reporting@title=error_reporting](E_ALL)
ergänzen, solltest du sowas wie "Cannot modify header information, header already sent" bekommen.
<head>
<meta http-equiv="Content-Type" content="image/jpeg">
</head>
In deinem Bild-Script hat HTML *nichts* verloren!
liegts wohl doch am Apache-Server?
Das glaube ich nicht.
Siechfred
Hi Siechfred,
hab' nun alles so wie von dir empfohlen gemacht, bekomme nun auch:
"Cannot modify header information, header already sent"
HTML hab' ich auch raus, ich dachte es wäre zum Debuggen sinnvoll, war wohl falsch gedacht.
Ich habe die bild.php nun auf einen anderen Server geladen
http://www.der-kosmos.de/bilder.php
nun erhalte ich zwar keine Fehlermeldung mehr über error_reporting, das Bild wird allerdings auch nicht angezeigt.
http trace bringt allerdings immer noch Content-Type: text/html
langsam blick' ich's gar nicht mehr????
Gruß
Wolfgang
hi,
hab' nun alles so wie von dir empfohlen gemacht, bekomme nun auch:
"Cannot modify header information, header already sent"
Absoluter Klassiker - wieder mal jemand, der das Manual bzgl. header offenbar nicht aufmerksam gelesen hat.
Hole das bitte nach; Weitere Infors findest du im Web, bspw. hier: http://www.php-fehlermeldungen.de/artikel,24,warning-cannot-modify-header-information---headers-already-sent-by,.html
gruß,
wahsaga
Hallo Wahsaga
nein, hab' ich auch nicht, ich bin PHP-technisch leider noch absoluter Anfänger
danke dir
Gruß
Wolfgang
Hi Wahsaga,
ES FUNKTIONIEEEEEERT!!!!
header( "Content-type: image/jpeg");
muss wirklich die erste Anweisung sein, die der Browser erhält. Ich kann den Link für das Bild nun auch über das Image-Tag in die Seite einbinden.
Allerdings bin ich davon ausgegangen, dass das Bespielskript, das ich im Internet dazu fand, richtig ist. Das kommt davon, wenn man man dem Internet blind vertraut.
Danke dir nochmal
Gruß
Wolfgang
Hell-O!
Woher kommt $id?
Bitte berücksichtige register_globals=off.
Die ID wird über
<img src="bilder.php?id=1">
übergeben
Jetzt beachte wahsagas Hinweis auf register_globals und lies den Hinweis zu den vordefinierten Variablen.
es kommen irgendwelche Zeichen an, da wo sich das Image-Tag befindet wird lediglich ein leerer Platzhalter angezeigt.
Welchen BLOB-Typ hat die Tabellenspalte? Eventuell könnte das Bild zu groß sein und wird von MySQL zusammengekürzt. Wenn du das Script aufrufst, kommen da "irgendwelche Daten" oder tatsächlich ein Bild?
Siechfred