Jpgs aus Mysql in html ausgeben?

Alles, was PHP betrifft, kann hier besprochen werden.

Jpgs aus Mysql in html ausgeben?

Postby tobi berlin » 27. September 2009 00:19

Hallo liebe PHP-Freunde.

    EDIT:
    Hallo nochmal.
    Da dieser thread immer noch ziemlich weit oben ist, und da dies vielleicht allgemein eine interessante Fragestellung ist, und ich ein sehr gutes Tutorial gefunden habe, möchte ich das für alle weiteren Interessierten hier posten. Allerdings in Englisch, aber diese ist eine wahre Fundgrube für Einsteigertutorials:

    PHP Tutorials: File upload (Part 1) auf Youtube.


Ich beschäftige mich gerade mit der Aufgabe, aus der DB ein kleines Bild in einer Art "Newsblog" für die neue HP von unserem Betrieb anzufügen. Bisheriger Stand:
1.: In der DB ist es bereits zu sehen (Typ MEDIUMBLOB), habe probehalber eins "hochgeladen";
2.: die übrige Ein- und Ausgabe der Daten (Schlagzeile, Inhalt, Autor, Datum) in html funktionieren schon:
Code: Select all
include ("mysqlverbindung.php");   
  $abfrage = "SELECT * FROM meldungen ORDER BY counter DESC";
  $meldungen = mysql_query($abfrage);
  while($row = mysql_fetch_object($meldungen))   { /* Ausgabe der Ankündigungen mit PHP*/
    echo "<h2>".htmlentities ($row->header, ENT_QUOTES)."</h2>";
    echo "<p>".nl2br (htmlentities ($row->inhalt, ENT_QUOTES))."</p>";
    $datneu = explode ("-", $row->datum);
    echo "<h6>von ". htmlentities ($row->autor, ENT_QUOTES)." vom ".$datneu[2].".".$datneu[1].".".$datneu[0]. "</h6>" ;
    }

(ziemlich nach Schema F)

Nur mit dem Bild ist es jetzt sone Sache, denn ich bin leider noch völliger Neuling in php.

Ich habe länger auf php.net rumgesucht (aber das ist eher ein Nachschlagewerk als ein Tutorium, und ich suche sehr ungerne über google, denn da kommt man dann meistens auf sehr alte links und sucht oft lange ziellos rum bei so speziellen Fragen), auch hier und in einem anderen Forum und weiß jetzt immerhin die grundsätzliche Vorgehensweise: über ein Hilfsscript.

Btw., zu dem Vorschlag in anderen threads, das Bild einfach in einem Ordner zu speichern und über die DB zu referenzieren, geht in meinem Falle nicht, weil ich meinen Kollegen ermöglichen möchte, das Bild zusammen mit dem Eintrag hochzuladen, statt in die DB zu schreiben (das würden die nicht packen :? ).

Als erstes müsste also geprüft werden, ob $row->bild (so heißt das BD-Feld) NULL ist, denn es ist optional. Sonst muss das Hilfsscript mit Header( 'Content-type: image/jpeg') aufgerufen werden mit "<img src="hilfsscript.php"> zum ausgegeben.

Leider habe ich keine Ahnung, wie so ein Hilfsscript aufgebaut werden soll. (Es hat wohl mit include (); nichts zu tun. Eher eine funcion in der selben Datei, nehme ich an?)

Ich bin mir auch nicht sicher, ob man mit "INSERT INTO meldungen (bild) VALUES ('$bild')" das einfach reinschreiben kann, oder ob man den .jpg als besonderes Format anders behandeln muss. - Habs auch noch nicht ausprobiert.

Und noch eine andere kleine Ungewissheit: wie gesagt, der Typ ist MEDIUMBLOB, also "16 MiB" laut Mysql-interface, entspricht das 16 MB? Das wäre natürlich viel zu groß. Aber wenn ich nur BLOB einstelle, sind das 16 KB, was ziemlich knapp ist. (Wenn ich das richtig verstehe) Was würdet ihr dazu raten?


Das sind jetzt viele Fragen, und ich kann natürlich nicht erwarten, dass ihr mir fertige scripts schreibt. ;) Aber ihr habt bestimmt den einen oder anderen nützlichen Hinweis oder kennt einen Link, in dem ich mir den Rest aneignen kann.

Jedenfalls schonmal vielen Dank im vorraus,

mfg,tobi


edit: Ich habe jetzt doch schonmal folgendes ausprobiert:
Code: Select all
$bild=$_POST['bild'];
$abspeichern= "INSERT INTO meldungen (bild) VALUES ('$bild') ";
$gesp = mysql_query ($abspeichern);
if ($gesp){
echo "ok";
}

"ok" wird ausgegeben, aber in der DB ist nichts zu sehen... :roll: Geht vielleicht doch nicht so einfach?
Last edited by tobi berlin on 04. October 2009 22:16, edited 1 time in total.
tobi berlin
 
Posts: 16
Joined: 18. September 2009 01:29

Re: Jpgs aus Mysql in html ausgeben?

Postby Wiedmann » 27. September 2009 02:38

Btw., zu dem Vorschlag in anderen threads, das Bild einfach in einem Ordner zu speichern und über die DB zu referenzieren, geht in meinem Falle nicht, weil ich meinen Kollegen ermöglichen möchte, das Bild zusammen mit dem Eintrag hochzuladen, statt in die DB zu schreiben (das würden die nicht packen :? ).

Wiedersprichst du dir da nicht selbst? Und wenn du nichts in die DB schreiben willst, wie willst du dann was aus der DB auslesen (egal ob jetzt die Bilddaten oder der Pfad zum Bild)?
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Re: Jpgs aus Mysql in html ausgeben?

Postby tobi berlin » 27. September 2009 02:59

Ich meine damit nur: ich selbst könnte die Bilder in die Datenbank über phpMyadmin direkt speichern, oder direkt auf den Server in einen Folder hochladen, und sie dann mit php referenzeiren.
Es soll aber so sein, dass meine Kollegen/innen seblstständig die Newseinträge machen können - die Maske dafür habe ich auch schon gebaut - und bei dieser Gelegenheit über die Form (also via <input name="bild" type="file" accept="image/jpeg" /> ) Bilder beigeben können. Das muss von meiner Arbeit unabhängig sein, und ich kann ihnen nicht zutrauen, selbst die Bilder auf den Server hochzuladen. Deshalb muss das über html->php->mysql gehen. Und auf selbem Wege ausgegeben werden.

PS: zu den Hintergründen: Es ist eine Soziale Einrichtung. Neben den täglichen Arbeiten gibts es ab und zu Veranstaltungen, spezielle Bekanntmachungen oder kleine befristete Projekte. Das soll auf der HP alles in einer eigenen Seite stehen, eben wie ein Blog, wird im Schnitt 1-2 Mal im Monat etwas dazu kommen. Ist also nicht viel und sehr einfach gehalten, soll aber trotzdem so sein, das sie nicht jedesmal mich dafür brauchen müssen. :)
tobi berlin
 
Posts: 16
Joined: 18. September 2009 01:29

Re: Jpgs aus Mysql in html ausgeben?

Postby Nobbie » 27. September 2009 09:55

tobi berlin wrote:Es soll aber so sein, dass meine Kollegen/innen seblstständig die Newseinträge machen können - die Maske dafür habe ich auch schon gebaut - und bei dieser Gelegenheit über die Form (also via <input name="bild" type="file" accept="image/jpeg" /> ) Bilder beigeben können. Das muss von meiner Arbeit unabhängig sein, und ich kann ihnen nicht zutrauen, selbst die Bilder auf den Server hochzuladen. Deshalb muss das über html->php->mysql gehen. Und auf selbem Wege ausgegeben werden.


Ist ja auch kein Problem. Nur: wer oder was zwingt Dich denn, die empfangenen Bilder als BLOB in ein Datenbankfeld zu schreiben? Von außen sieht es doch kein Mensch, ob Du die Bilderdaten so in MySQL hineinschreibst, oder ob Du die Bilderdaten einfach in einen Ordner DEINER WAHL speicherst und in die MySQL Tabelle nur den Pfadnamen (inkl. Bildnamen) speicherst.

P.S..:
Code: Select all
$bild=$_POST['bild'];


Das ist sowieso falsch, wenn Du das Error Reporting eingeschaltet hast (und das solltest du unbedingt tun bei Entwicklungsarbeiten), dann würde Dir PHP melden, dass $_POST['bild'] nicht existiert. Bei type="file" heißen die PHP Variablen nicht $_POST sondern $_FILES und haben eine eigene Struktur (ein zweidimensionales Array). Vielleicht liest Du doch dazu mal eine Dokumentation, wie Dateien hochgeladen werden: http://de3.php.net/manual/de/features.file-upload.php
Nobbie
 
Posts: 8779
Joined: 09. March 2008 13:04

Re: Jpgs aus Mysql in html ausgeben?

Postby tobi berlin » 27. September 2009 13:02

edit: Öhm... jetzt verstehe ich glaube ich erst, was gemeint ist: also die Datei nicht in der DB speichern, sondern mittels PHP in einem Ordner ablegen? :shock: Habe das vorher gar nicht so gesehen. Das hat dann also trotzdem mit filezilla o.ä. nichts mehr zu tun... Und so soll es ja werden. Ich war nur immer davon ausgegangen, man müsse die Datei manuell mit einem FTP hochladen...

Was ist aber einfacher? Warum nicht in die DB direkt speichern? Denn den Dateinamen muss ich dann ja sowieso da ablegen. Warum nicht das Bild selbst? Gibt es da so einen großen Unterschied zwischen strings und bitmaps?

Und danke für den Link. Da werde ich mich jetzt mal vertiefen.

mfg

edit: ok, eine Antwort habe ich schonmal gefunden:
Generell ist eigentlich eher abzuraten, Binary Data in einer Datenbank zu speichern. Es ist langsam, _macht_ die Datenbank langsam und fehleranfällig.
Allerdings ist dieser post 8 jahre alt... Aber das macht die Sache natürlich um einiges komplizierter als ich dachte :( und ich werde wohl erstmal noch einige basics lernen gehen...
tobi berlin
 
Posts: 16
Joined: 18. September 2009 01:29


Return to PHP

Who is online

Users browsing this forum: No registered users and 2 guests