![]() |
PHP-Problem - Bildübermittlung
Liebe Gemeinde,
schön langsdam kommt meine Datenbank auf Touren (endlich harmonieren der Apache mit MySQL & PHP) - danke wegen des Links zu www.NuSphere.com Die Voraussetzungen: 1. Datenbank unter mySQL erfolgreich angelegt 2. dazu eine Tabelle - dies beinhaltet die "VARCHAR"-Felder wie Name, Adresse, etc. UND ein Feld namens "Bild" vom Typ BLOB Ich habe für PHP im Internet eine Eingabemaske gefunden - http://www.blindschleiche.de/Artikel...ysql-einf.php3 - und angepasst, wo eben Daten eingegeben werden können, die dann in meine Datenbank wandern. NUR: Wie ermögliche ich die Übernahme eines Bildes? (Es wird im Datensatz nicht das Bild als BLOB eingefügt, sondern nur die Ladeadresse - z.B.: C:\Bilder\Haus.jpg :( ) Hier ein Auszug aus dem PHP, wo die Dateneingabe passiert, das Problem mit dem BILD aber nicht klappt: . . . <form action= <? echo $PHP_SELF ?>> <pre> <input type=hidden name=funktion value= <? echo $funktion ?>> Kontaktperson: <input type=text name=K_person value= <? echo $K_person ?>> Strasse mit Hausnummer: <input type=text name=Str value= <? echo $Str ?>> Ort: <input type=text name=Ort value= <? echo $Ort ?>> Bild anfügen: <input type="hidden" name="MAX_FILE_SIZE" value="2097152"> <input type="file" class="bginput" name=Bild> <input type=submit value= <? echo $funktion ?>> </pre> </form> . . . Herzlichen Dank für Eure Mühe!!! |
Mir fällt nur auf daß das name=Bild in deinem Formular
nicht in Anführungszeichen steht name="Bild" |
Das Bild musst Du extra behandeln, dass wird nicht in einer Variablen abgelegt, von wo Du es einfach in die DB spielen kannst.
http://at.php.net/manual/de/features.file-upload.php Genau durchlesen!!! |
Das Bild soll direkt in die Datenbank...
der zitierte Artikel http://at.php.net/manual/de/features.file-upload.php hilft mir nicht sehr -
ich möchte das Bild ja NICHT als Datei, sondern direkt in meine Datenbank bei der Tabelle "adressen" ins Feld "Bild" vom Typ "BLOB" schreiben. Wer könnte mir dabei bitte helfen??? danke! |
Ich sagte ja - GENAU lesen!
Das Bild wird Dir von PHP nicht automatisch in eine Variable gestellt, die Du dann einfach in die DB schreiben kannst, sondern du musst das Kopieren der Datei in die DB selber ausprogrammieren! D.h. Datei oeffnen, in eine Variable einlesen, und dann diese Variable in ein Feld der DB inserten. Jetzt klarer? Code:
$filecontent = fread(fopen("/usr/local/myfile.jpg", "r"), |
danke!!!
Ein Problem besteht noch wenn ich Dein beschriebenes fopen("/usr/local/myfile.jpg", "r"), mache: WO in meiner Umgebung liegt dieses Bild, nachdem ich es in der FORM eingegeben habe? Muss ich da im INI des Apache bzw. PHP oder MySQL was verändern, bzw. überhaupt erst was definieren, um das von Dir zitierte "/usr/local/myfile.jpg" irgendwo zu sehen? wenn ich mir meine Daten aus der Bank aufliste, hatte ich nämlich schon einmal beim Herumprobieren mit meiner Eingabemaske einen Text-Eintrag ins Feld "Bild" hineinbekommen. einmal "H:WINDOWSphp1A.tmp" (ohne "\" ) und ein weiteres Mal: "G:\Bilder\Julia.jpg" (weiss aber nicht mehr, wie ich zu diesem eher aussagekräftigem Dateinamen kam???) momentan sehe ich den Wald vor lauter Bäumen nicht mehr ;) |
Oida voda!
Meinen Link hast Du nicht gelesen, oder? :( Der Dateiname im Script war ja nur fuer Demo-Zwecke, den richtigen "temporaeren Namen bekommst Du ueber Zitat:
|
Felder mit dem Datentyp BLOB können mit LOAD_FILE(filename) gefüllt werden (der Datentyp BLOB erlaubt maximal 64 KB Dateninhalt)
|
TINYBLOB, TINYTEXT L+1 bytes, where L < 2^8
BLOB, TEXT L+2 bytes, where L < 2^16 MEDIUMBLOB, MEDIUMTEXT L+3 bytes, where L < 2^24 LONGBLOB, LONGTEXT L+4 bytes, where L < 2^32 Ein Beispiel zu load_file gibts hier: http://gd.tuwien.ac.at/db/mysql/doc/...functions.html |
Ein Verweis auf die Bilddatei mittels VARCHAR Textfeld 'Dateiname' - z.B. - funzt wesentlich besser. Weniger Segmentierung, weniger Daten in der Datenbank bla bla bla ...
Ein einfaches echo "<img src=\"$Dateiname\">"; im php Teil eines *.php / *.phtml Skripts sollte die Datei vom Dateisystem aus laden. Sollte der 'Pfad zur Datei' ein absoluter sein, muß man den HTML Code um "file:" erweitern. echo "<img src=\"file:$Dateiname\">"; |
Lieber kikakater: Tschuldigung, aber das ist ein Blödsinn.
Mit dem file-Schema (file:.....) kann man nur Files auf dem lokalen Rechner, auf dem der Browser läuft, referenzieren. Eine "absoluter"-URI besteht aus "<scheme>:<scheme-specific-part>", also bei http aus "http://Servername_oder_IP-Adresse/Pfad_zu_Datei/Datei", für eine gif-Datei am WCM-WebServer zum Beipiel "http://www.wcm.at/bilder/200205/0ti4200.jpg". Wenn die HTML-Datei, in der ich das Bild einbauen will, im root-Verzeichnis des WebServers steht, reicht bei vorigem Beispiel "bilder/200205/0ti4200.jpg", oder wenn ich im Verzeichnis "html" bin ein "../bilder/200205/0ti4200.jpg", um auf das Bild über eine relative URI zuzugreifen. Siehe auch http://www.rfc-editor.org/rfc/rfc1630.txt und http://www.rfc-editor.org/rfc/rfc2396.txt |
Gelöst!
Unter http://www.phpbuilder.com/columns/fl...3?print_mode=1 habe ich das für mich passende im Quelltext gefunden :)
danke Euch allen für die aufgebrachte Geduld mit mir "PHP-mySQL-Dummy"! :lol: |
Filetypen unter "Datei auswählen" beschränken
...obwohl ich bereits google bemühte, wurde ich leider nicht fündig, darum nochmals hier:
Dies ist natürlich nur eine kleine optische Korrektur - Wie kann ich meinem Dateiauswahlfeld mitteilen, dass der eingebenden Person beim Auswählen der upload-Datei z.B. nur Dateien vom Typ *.jpg und *.gif angezeigt werden sollen? danke! |
AFAIK ist das mit HTML-Mitteln nicht möglich.
|
spät aber...
ich muss mal die provokante frage stellen:
wozu soll man eine binär-datei in eine datenbank reinwürgen, um sie dann mit header und allem drum un dran wieder mühsam auszulesen, wenn es dafür auch ein altes aber gutes ding namens "filesystem" gibt. kikakater hats ja schon angesprochen. dafür ist die datenbank nicht gedacht. dafür wurde das filesystem erfunden. man lege also in der datenbank ein feld namens "dateiname" und meinetwegen auch noch irgendwelche metafelder an, und speichere das bild als bild, wie es sich gehört. my 2 cents roland |
Der Grund um so etwas zu tun heißt Datenkapselung, Betriebssystemunabhängigkeit, Verbergen von Daten mittels SQL im Gegensatz zu Java Servlets und Dateizugriff. Einfacher ist es für homogene Systeme die Bilder vom Dateisystem aus zu laden und sich derart des Streßes mit der Verwaltung der Bilder in der Datenbank zu entledigen.
|
ich folge Euch und möchte mein Bild im filesystem ablegen...
Liebe Gemeinde,
nachdem das Projekt länger geruht hat, wird es wieder aktuell... Nun habe ich Euren Rat beherzigt und möchte das Bild nicht in die DB reinquetschen, sondern ins Filesystem legen: NUR: Auch nach GENAUEM Lesens der Tips von "_m3" bringe ich das Bild nicht ins Filesystem??? :( Hier mein Ansatz: Ich habe meine Eingabefelder in einem FORM-Feld (für die Eingabe der Daten und des Bildes) Auszug daraus: Code:
<INPUT type="hidden" name="MAX_FILE_SIZE" value="62000">Ich möchte nun, dass das lokale Bild ins Dateisystem meines SQL-servers ins Unterverzeichnis "BILDER" übertragen wird: Dieser Ordner heisst in meiner lokalen Testumgebung "H:\APACHE\mysql\data\VDB\Bilder" (Die Datenbank selbst hat den Namen "VDB" bzw. der für mich relevante Table "adressen", der halt im Ordner "H:\APACHE\mysql\data\VDB\" liegt) Im bereits oben zitierten PHP habe ich folgende Zeilen zwecks Übergabe der Daten eingebaut: Code:
if ($submit) {Es erscheint aber auch keine Fehlermeldung gemäß "Possible file upload attack", der Bildname selbst ist natürlich in der Datenbank aufgenommen... Danke für Eure Hilfe!!! |
Kommt er überhaupt in die
if ($submit) { hinein - sprich ist $submit TRUE? Weiters solltest Du den Rückgabewert von copy($HTTP_POST_FILES['userfile']['tmp_name'], "/Bilder"); abfangen und entsprechend auswerten. Und "/Bilder" sollte wohl eher dem kompletten Pfad inkl. Dateinamen das Files enstsprechen, wo du es hinkopieren willst. |
Es funktioniert fast:
Das submit passt - ich habe vergessen, den Dateinamen anzufügen: {copy($HTTP_POST_FILES['userfile']['tmp_name'], "H:/APACHE/mysql/data/VDB/Bilder/$Bild") funktioniert... Aber: mit "/bilder/$Bild" geht es nicht - gibt es da eine environment-Variable, da mir folgende Fehlermeldung kommt??? Warning: Unable to create '/bilder/testfoto.jpg': No such file or directory in h:\apache\apache\htdocs\eingabe.php on line 24 die sich auf den Pfad der PHP-Maske bezieht? danke! |
"/bilder/$Bild" ist Unix-Notation. Damit speichert er das Bild Im Verzeichnis "bilder", das auf der ersten Eben unterhalb von "/" (so wie tmp, usr, ...) liegt, ab.
Entweder gibst Du den Pfad relativ zur Lokation des Scripts an "../../mysql/data/VDB/bilder/$Bild" oder eben ansolut "H:/APACHE/mysql/data/VDB/Bilder/$Bild". Alles klar? |
@_m3: danke für Deine Hilfe!
Noch eine letzte Frage: Wenn es dann in meiner "echten" DB läuft, gebe ich dort einfach "http://servername.at/Bilder/$Bild" ein? |
Wenn Du den Server richtig konfigurierts, dann geht das schon ;)
|
...ich fürchte, dass ich Dich - wenn es denn endlich soweit ist - wieder nerven muss ;)
Hier nochmals ein dickes DANKE für Deine Geduld & Hilfe !!! |
| Alle Zeitangaben in WEZ +2. Es ist jetzt 17:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag