[PHP] data persistentie van een input type="file" element

Pagina: 1
Acties:
  • 117 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Dextro
  • Registratie: April 2002
  • Niet online

Dextro

Druivensuiker.be

Topicstarter
Is het mogelijk om data persistentie te hebben op een <input type="file" /> element?

Dus wanneer andere form elementen nog niet in orde zijn bij het doorsturen van een form, is het dan mogelijk om de waarde die in een <input type="file" /> element zit terug op te vragen?

Acties:
  • 0 Henk 'm!

Anoniem: 88197

8)7 Wat bedoel je precies? Het form wordt in 1x doorgestuurd... De file is dan ook al geupload, wat bedoel je hiermee :)

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 10-06 18:45
Nee, je moet daar zelf iets op verzinnen. Bijvoorbeeld het input veld verbergen en er een melding plaatsen dat het veld al verwerkt is.

Ook kan je natuurlijk clientside controle doen. Dan maakt het niet uit of de gegevens verloren gaan als het formulier serverside afgekeurd wordt omdat er dan iemand probeert je beveiliging te omzeilen.

Acties:
  • 0 Henk 'm!

  • IEF
  • Registratie: Februari 2004
  • Laatst online: 09:21

IEF

Why so serious?

ik neem aan dat de TS iets bedoelt als:

een form heeft meerdere velden + file upload,

een van die velden is niet goed ingevuld en wil een error message laten zien waarbij alleen dat veld nog hoeft te worden ingevuld (en de file geupload blijft)

sla hem temp op als je error-checking gaat doen?

desnoods in een $_SESSION ofzo.

Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 27-05 22:50

r0b

Anoniem: 88197 schreef op woensdag 08 maart 2006 @ 12:27:
8)7 Wat bedoel je precies? Het form wordt in 1x doorgestuurd... De file is dan ook al geupload, wat bedoel je hiermee :)
Of de inhoud van $_POST['fileform'] onthouden wordt, me dunkt. Weet het zo zelf niet, maar ik zou zeggen van wel?
En die kan je later toch wel weer verwerken in je form :?

pseudo-code
PHP:
1
2
3
4
5
6
7
if(!isempty($_POST['fileform']) { 
echo "<input type=\"file\" value=\"$_POST['fileform']\";">" 
} 
else 
{ 
echo "<input type=\"file\">;" 
}


edit:
Ah, laat maar, zie dat je iets anders bedoelt. My bad. :)

[ Voor 57% gewijzigd door r0b op 08-03-2006 12:36 ]


Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 10-06 15:07

André

Analytics dude

Je zou 2 formulieren kunnen maken waarvan de ene alleen het file element bevat. Die kun je dan apart submitten.

Acties:
  • 0 Henk 'm!

  • DexterDee
  • Registratie: November 2004
  • Nu online

DexterDee

I doubt, therefore I might be

Volgens mij is dat niet mogelijk. Je kunt natuurlijk wel server-side valideren en de attachment alvast uploaden en op de server parkeren. Bij een validatiefout laad je opnieuw de pagina en zet je in de regel onder je <input type="file".... de naam van de uploaded attachment als indicatie dat deze op de server goed is aangekomen. Als de gebruiker een nieuwe file kiest overschijf je deze bij een succesvolle validatie. Anders hou je de eerder geuploade file en link je deze aan de ingevoerde data.

Je wilt trouwens ook niet de <input type="file".... persistent maken, omdat bij elke validatie de file opnieuw geupload moet worden. Als dit een grote file is, betekent dat een aanzienlijke vertraging voor de gebruiker bij meerdere validatieslagen.

Klik hier om mij een DM te sturen • 3245 WP op ZW


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 12-06 18:55

Gerco

Professional Newbie

Je kan een <input type="file> niet zetten met script, noch kun je een waarde meegeven vanuit het PHP script (in IE iig). Dit is by design vanwege security, zodat je het volgende niet kan doen:

1. <input type="file" value="eenbelangrijkbestand.doc">
2. form.submit();

Dan zou je namelijk met HTML/PHP gewoon ongevraagd files kunnen "downloaden" van iemands computer en dat is niet zo lief.

Kijk hier maar (view source).

[ Voor 16% gewijzigd door Gerco op 08-03-2006 12:59 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Gerco schreef op woensdag 08 maart 2006 @ 12:56:
Je kan een <input type="file> niet zetten met script, noch kun je een waarde meegeven vanuit het PHP script (in IE iig). Dit is by design vanwege security, zodat je het volgende niet kan doen:

1. <input type="file" value="eenbelangrijkbestand.doc">
2. form.submit();

Dan zou je namelijk met HTML/PHP gewoon ongevraagd files kunnen "downloaden" van iemands computer en dat is niet zo lief.
hij doelt waarschijnlijk alleen op het lokale path van de file (toch?)
in dat geval is het nog steeds 'nee' maar dan niet om security redenen, maar om technische.
jij upload een bestand, en de server wil echt niet weten waar op jouw pc die file stond..

als je persistentie wilt, kan je net als google bij gmail zoiets maken als de file al geupload is:
PHP:
1
<input type="checkbox"> <?=$filename?>

[ Voor 14% gewijzigd door BasieP op 08-03-2006 13:00 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 12-06 18:55

Gerco

Professional Newbie

BasieP schreef op woensdag 08 maart 2006 @ 12:58:
hij doelt waarschijnlijk alleen op het lokale path van de file (toch?)
in dat geval is het nog steeds 'nee' maar dan niet om security redenen, maar om technische.
jij upload een bestand, en de server wil echt niet weten waar op jouw pc die file stond..
Sterker nog, dat krijgt de server ook helemaal niet te horen, tenzij deze in de "Local" security zone zit.

De standaard zegt er niets over (behalve dat het nooit een file mag selecteren buiten medeweten van de user), maar verbied een default filename niet. De meeste browsers hebben dit echter niet geïmplementeerd. Zie ook hier.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Gerco schreef op woensdag 08 maart 2006 @ 13:04:
[...]

Sterker nog, dat krijgt de server ook helemaal niet te horen, tenzij deze in de "Local" security zone zit.
dat zeg ik toch :?

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 12-06 18:55

Gerco

Professional Newbie

Dan heb ik je verkeerd begrepen, aangezien je zei: "...dan wil de server...". Ik begreep hieruit dat je aangaf dat de server daar een keuze in had.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • George
  • Registratie: Maart 2006
  • Laatst online: 02-03 19:22
Zelf verplaats ik de geuploade bestanden meteen en geef ze een tijdelijke naam, meestal iets van "draft_1.jpg" of iets dergelijks. Ik controleer vervolgens bij elke aanroep van de pagina of er "drafts" aanwezig zijn, zo ja, dan is er dus al een file geupload.
Wanneer de form final is en wordt gesubmit rename ik de geuploade file naar de gewenste output en koppel er eventueel een DB entry aan vast mocht je zoiets willen.

Vervolgens maak ik een cleanup die draait elke keer wanneer de form voor de eerste keer "vers" wordt bezocht. Hierbij laat ik dan eventuele achtergelaten drafts verwijderen, mocht de voorgaande entry abrupt zijn afgebroken.

Dat is ruwweg het idee. Knutselen maar! :)

-George.


Acties:
  • 0 Henk 'm!

  • Dextro
  • Registratie: April 2002
  • Niet online

Dextro

Druivensuiker.be

Topicstarter
Thx voor al de nuttige reacties!
Pagina: 1