Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.php > #4337

Re: form - file - sumple question

From "Álvaro G. Vicario" <alvaro.NOSPAMTHANX@demogracia.com.invalid>
Newsgroups comp.lang.php
Subject Re: form - file - sumple question
Date 2012-01-09 09:38 +0100
Organization http://alvaro.es/
Message-ID <jee91o$g00$1@dont-email.me> (permalink)
References <4f08514c$0$5038$ba620e4c@news.skynet.be>

Show all headers | View raw


El 07/01/2012 15:06, Leo Decap escribió/wrote:
> I have a form which users can fill in.
> If the user hasn't filled in a required field, the form reloads after
> the Submit with all the data the user has entered filled in (and the
> opportunity to fill in the missing data).
> I get the data through $_POST and echo the allready filled in data on
> the form. Easy.
>
> I have 1 field - type File - where the user can choose a photo to upload.
> On reload of the form, I would love to see the entered data (path?)
> reappear, but I can't figure out how to do this..........

This approach hits against two walls:

1. The $_FILES array does not contain the original path, mainly because 
the browser does not send it to the server.

2. Most browsers ignore pre-filled <input type="file"> elements.

Additionally, you have no control about the uploaded file size until the 
file is actually received. If you force the user to upload the file 
again and it happens to be a large file, your form can become pretty 
unusable.

You need to use a different technique. The simplest one is to move 
successfully uploaded files to a temporary location you control and link 
them to your form through a reasonably large random ID (so it cannot be 
guessed) that can be transmitted through a set of <input type="hidden"> 
fields.

E.g., if the original $_FILES entry is this:

array(1) {
   ["avatar"]=>
   array(5) {
     ["name"]=>
     string(10) "Logo01.gif"
     ["type"]=>
     string(9) "image/gif"
     ["tmp_name"]=>
     string(27) "C:\WINDOWS\Temp\php1728.tmp"
     ["error"]=>
     int(0)
     ["size"]=>
     int(732)
   }
}

... you can use uniqid('tmp_') to generate a random name and save your 
file as:

C:\Sites\example.com\temp\tmp_4f0aa7072cb3e

... and add this to your form:

<input type="hidden" name="avatar[id]" value="tmp_4f0aa7072cb3e">
<input type="hidden" name="avatar[name]" value="Logo01.gif">
<input type="hidden" name="avatar[type]" value="image/gif">

When all the entered data is correct, you can move the temporary file to 
its definitive location.


-- 
-- http://alvaro.es - Álvaro G. Vicario - Burgos, Spain
-- Mi sitio sobre programación web: http://borrame.com
-- Mi web de humor satinado: http://www.demogracia.com
--

Back to comp.lang.php | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

form - file - sumple question Leo Decap <fcatus@yahoo.com> - 2012-01-07 15:06 +0100
  Re: form - file - sumple question Jerry Stuckle <jstucklex@attglobal.net> - 2012-01-07 09:09 -0500
    Re: form - file - sumple question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-01-07 15:40 +0100
    Re: form - file - sumple question Luuk <Luuk@invalid.lan> - 2012-01-07 15:40 +0100
      Re: form - file - sumple question Jerry Stuckle <jstucklex@attglobal.net> - 2012-01-07 09:53 -0500
        Re: form - file - sumple question Luuk <Luuk@invalid.lan> - 2012-01-07 16:24 +0100
  Re: form - file - sumple question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-01-07 15:39 +0100
  Re: form - file - sumple question "M. Strobel" <sorry_no_mail_here@nowhere.dee> - 2012-01-07 16:10 +0100
  Re: form - file - sumple question Leo Decap <fcatus@yahoo.com> - 2012-01-07 16:24 +0100
    Re: form - file - sumple question Jonathan Stein <jstein@image.dk> - 2012-01-08 16:41 +0100
  Re: form - file - sumple question "Álvaro G. Vicario" <alvaro.NOSPAMTHANX@demogracia.com.invalid> - 2012-01-09 09:38 +0100
  Re: form - file - sumple question "Peter H. Coffin" <hellsop@ninehells.com> - 2012-01-10 13:02 -0600

csiph-web