<input type=file speichern??
domi
- html
halli hallo,
ich stehe vor folgedendem problem
ich baue derzeit ein bannertool, welches mir einen Banner per <input type="file" in eine Datenbank speichert. Das funktioniert alles einwandfrei.
mein Problem ist allerdings, dass wenn ich den banner zum bearbeiten in einem editor öffne (selber programmiert) ist dieses formularfeld (type="file") wieder leer. Wenn ich jetzt speicher überschreibt er mir den banner mit einem leeren value :-(
wie bekomme ich beim bearbeiten das geld genau so geladen, dass er den banner nicht auf leer setzt?
ich verzweifel hier langsam :-)
lg und vielen dank
Du kannst den Wert von einem input-file Element nicht per HTML setzten. Sonst könntest du ja von einem Benutzer eine beliebige Datei vom Computer ohne dessen wissen hochladen. Speichere doch stattdessen einfach die id von deinem Datenbankeintrag zum Banner in einem input-hidden Element.
Grüße
Poing
ps: Bilder in einer Datenbank zu speichern ist nicht besonders effizient.
ich speicher ja auch nicht das bild sondern das pfad zum bild - hatte ich mich falsch ausgedrückt.
also nochmal weger deinem input hidden tip
ich habe ein formular mit bannername, banner_url, banner_new_window, banner_file (um das es sich handelt). Das speicher ich nun ab und er speichert alle informationen. nun ehe ich mit der banner_id zurück in den eintrag um z.b. nur die banner_url zu ändern. jedoch ist dann das banner_file leer und er ändert mir beim speichern zwar die URL aber läd gleichzeitig auch den leeren pfad hoch :)
nun habe ich mir schon überlegt beim bearbeiten das file feld einfach auszublenden, was jedoch auch nicht sinnvoll ist, da ja vielleicht auch ein anderer banner hochgeladen will (weil der erste zu pixlig war z.b.)
also nützt das auch nichts :-(
ich hoff man versteht mein problem einigermaßen - ich brauch einfach eine möglichkeit den hochgeladenen banner (den pfad) zu speichern jedoch wenn ein neues bild (mit absicht) hochgeladen wird er diesen überschreibt
lg
ich speicher ja auch nicht das bild sondern das pfad zum bild - hatte ich mich falsch ausgedrückt.
Nee, das war schon richtig. Du kannst diesen Wert nicht vorgeben, das wäre eine grosse Sicherheitslücke.
ich habe ein formular mit bannername, banner_url, banner_new_window, banner_file (um das es sich handelt). Das speicher ich nun ab und er speichert alle informationen. nun ehe ich mit der banner_id zurück in den eintrag um z.b. nur die banner_url zu ändern. jedoch ist dann das banner_file leer und er ändert mir beim speichern zwar die URL aber läd gleichzeitig auch den leeren pfad hoch :)
Dann ändere das doch, du musst doch nicht alle Werte speichern und kannst diese in deinem Skript prüfen.
Struppi.
hi,
ich hoff man versteht mein problem einigermaßen - ich brauch einfach eine möglichkeit den hochgeladenen banner (den pfad) zu speichern jedoch wenn ein neues bild (mit absicht) hochgeladen wird er diesen überschreibt
type='file' liefert dem serverseitigen Parser zwei Dinge:
(1) den full qualifizierten Pfad/Dateiname der lokalen Datei
(2) einen Handle auf die Datei
(2) ist Voraussetzung dafür, dass der Upload überhaupt funktioniert und die Datei auf dem Server gespeichert werden kann. (1) ist ein Literal (Text) was Du selbstverständlich auch auf dem Server speichern kannst.
Je nach Browser 'merkt' sich dieser im Dateiauswahldialog zumindest das lokale Verzeichnis von dem aus die letzte Datei zum Upload ausgewählt wurde.
Hotte
type='file' liefert dem serverseitigen Parser zwei Dinge:
(1) den full qualifizierten Pfad/Dateiname der lokalen Datei
(2) einen Handle auf die Datei
Das (2) ist falsch. Den Handle den du meinst, liefert Perl und ist eine temporäre Datei, die das CGI Modul beim upload erstellt. Der hat nichts mit der lokalen Datei zu tun.
Struppi.
»» type='file' liefert dem serverseitigen Parser zwei Dinge:
»» (1) den full qualifizierten Pfad/Dateiname der lokalen Datei
»» (2) einen Handle auf die DateiDas (2) ist falsch. Den Handle den du meinst, liefert Perl und ist eine temporäre Datei, die das CGI Modul beim upload erstellt. Der hat nichts mit der lokalen Datei zu tun.
Ok, schauen wir mal genauer hin. Zum Schreiben einer Upload-Datei auf dem Server nehme ich die Funktion read():
read FILEHANDLE,SCALAR,LENGTH,OFFSET
read() liest also einen FILEHANDLE aus. Dabei wird eine temporäre Datei geschrieben.
Der FILEHANDLE wird von CGI.pm geliefert:
my $handle = $q->param('myfile'); # und auch der Name der Datei
Und hier eine komplette Funktion:
sub upload{
my $handle = $q->param('myfile'); # und auch der Name der Datei
my($remote_filename, $local_path) = fileparse $handle;
my ($buffer, $sum) = (0,0);
open (OUTFILE,">/home/$remote_filename");
binmode OUTFILE;
while (my $bytesread = read($handle, $buffer, 1024)) {
$sum += $bytesread;
print OUTFILE $buffer;
}
close OUTFILE;
print "Summe: $sum";
exit;
}
man CGI zu temp. Dateien beim Upload:
CGI.pm can process uploaded file. Ordinarily it spools the uploaded file to a temporary directory, then deletes the file when done.
Hotte
» »» type='file' liefert dem serverseitigen Parser zwei Dinge:
» »» (1) den full qualifizierten Pfad/Dateiname der lokalen Datei
» »» (2) einen Handle auf die Datei
»
» Das (2) ist falsch. Den Handle den du meinst, liefert Perl und ist eine temporäre Datei, die das CGI Modul beim upload erstellt. Der hat nichts mit der lokalen Datei zu tun.Ok, schauen wir mal genauer hin. Zum Schreiben einer Upload-Datei auf dem Server nehme ich die Funktion read():
genau, weil..
man CGI zu temp. Dateien beim Upload:
CGI.pm can process uploaded file. Ordinarily it spools the uploaded file to a temporary directory, then deletes the file when done.
...du damit auf die temporäre Datei zugreifst, hatte ich aber schon geschrieben.
Struppi.
Hi,
type='file' liefert dem serverseitigen Parser zwei Dinge:
(1) den full qualifizierten Pfad/Dateiname der lokalen Datei
(2) einen Handle auf die DateiDas (2) ist falsch.
Das (1) auch.
In halbwegs sicherheitsbewussten Browsern wird der lokale Pfad gar nicht übertragen - und selbst im IE ist es vom Nutzer konfigurierbar, ob er den Pfad mit übergeben möchte oder nicht.
MfG ChrisB
Hi,
»» > type='file' liefert dem serverseitigen Parser zwei Dinge:
»» > (1) den full qualifizierten Pfad/Dateiname der lokalen Datei
»» > (2) einen Handle auf die Datei
»»
»» Das (2) ist falsch.Das (1) auch.
In halbwegs sicherheitsbewussten Browsern wird der lokale Pfad gar nicht übertragen - und selbst im IE ist es vom Nutzer konfigurierbar, ob er den Pfad mit übergeben möchte oder nicht.
Das scheint hier eine Art Sport zu sein, an meinen Posts herumzunörgeln, ist auch nicht das erstemal.
Fakt ist: Zu (1) und (2) habe ich ein funktionierendes Beispiel abgeliefert, was sich in meiner Praxis auch bewährt hat.
Hotte
Fakt ist: Zu (1) und (2) habe ich ein funktionierendes Beispiel abgeliefert, was sich in meiner Praxis auch bewährt hat.
Fakt ist, das deine Aussagen falsch sind. (1) ist zumindest teilweise nicht richtig, da dies vom Browser abhängt und (2) ist insofern falsch, dass der Dateihandle, den dir das CGI Modul zurück gibt, die lokale temporäre Datei auf dem Server ist und eben nicht der Handler zu "der lokalen" Datei auf dem client. Aber vielleicht ist auch nur deine Formulierung etwas unglücklich.
type='file' liefert dem serverseitigen Parser zwei Dinge:
(1) den full qualifizierten Pfad/Dateiname der lokalen Datei
(2) einen Handle auf die Datei
Zumal das auch so nicht stimmt, type File überträgt die kodierten Daten der lokalen Datei.
Das ganze hat ja nichts, mit deinen funktionierenden Beispielen zu tun, nur mit den falschen Aussagen.
Struppi.
Hello,
Fakt ist, das deine Aussagen falsch sind. (1) ist zumindest teilweise nicht richtig, da dies vom Browser abhängt und (2) ist insofern falsch, dass der Dateihandle, den dir das CGI Modul zurück gibt, die lokale temporäre Datei auf dem Server ist und eben nicht der Handler zu "der lokalen" Datei auf dem client.
ist es denn überhaupt ein Handle oder ist es nicht vielmehr nur ein Name?
Und dass der Browser den ganzen Pfad zur Datei auf dem Client liefert, ist auch nicht normal. Normal ist, dass nur der Dateiname nebst Extension geleifert wird. _Möglich_ ist aber auch ein ganzer Pfad, was ja dann zur Sicherheitslücke auf dem Server gereicht.
Liebe Grüße aus dem Cyberspace
Tom vom Berg
Hi,
Das scheint hier eine Art Sport zu sein, an meinen Posts herumzunörgeln, ist auch nicht das erstemal.
Es ist hier eine Art Philosophie, fachlich nicht korrekte Aussagen zu berichtigen - schliesslich werden die hier auch archiviert, und damit später auch von anderen Personen konsumiert, die enthaltene Fehler ggf. nicht selbst aufdecken können.
Das ist Qualitätssicherung.
Wenn du den Eindruck hast, dass das gerade bei dir öfter passiert ... dann überdenke die Qualität deiner Aussagen.
Fakt ist: Zu (1) und (2) habe ich ein funktionierendes Beispiel abgeliefert, was sich in meiner Praxis auch bewährt hat.
Bzgl. (1) wird es in meinem Browser nicht so "funktionieren", wie du es beschrieben hast - und das nicht mit absonderlicher Individual-, sondern in dessen Standardkonfiguration.
Wenn du deine Beispiele nur unter ganz speziellen und limitierten Bedingungen testest, dann solltest du das auch dazu schreiben - und nicht verallgemeinernde Aussagen treffen, die dann definitiv nicht der Realität entsprechen.
MfG ChrisB
Hallo,
warum prüfst Du beim Verarbeiten der editierten Daten nicht einfach, ob in dem übertragenen file-Feld etwas drin ist - z.B. mit $_FILES['dein_feld']['size']?
Grüße Basti