[PHP] Form file als array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Net als bijvoorbeeld op GoT, stop ik elk form-element in een array, die ik vervolgens server-side kan uitlezen, bijvoorbeeld:
HTML:
1
2
3
<input type="hidden" name="edit[id]">
<input type="text" name="edit[username]">
<input type="password" name="edit[password]">

Gisteren ben ik begonnen om een upload functie aan mijn CMS'je toe te voegen. Gebruikers kunnen een avatar uploaden, of althans - dat is de bedoeling:
HTML:
1
<input type="file" name="userfile">

Aan de serverkant heb ik dan (pseudo) de volgende functie:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$edit = $_POST['edit'];

edit($edit['id'], $edit['username'], $edit['password'], $_FILES);

function edit($id, $username, $password, $avatar) {
                
  $result = db_query("UPDATE profiles SET name = '%s', password = '%s' WHERE uid = %d", 
                     $username, $password, $id);

  $uploaddir = 'C:/test/';
  $uploadfile = $uploaddir . $_FILES['userfile']['name'];
  move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile);
}

Dit werkt perfect: de database wordt geupdate en de avatar staat in de test/ folder. Maar nu het volgende. Als ik 'userfile' toevoeg aan de edit-array, gaat het voud:
HTML:
1
<input type="file" name="edit[userfile]">

Dan heb ik geen idee hoe ik mijn scriptje werkend moet krijgen. Het maakt niet uit of ik:
PHP:
1
2
3
4
edit($edit['id'], $edit['username'], $edit['password'], $_FILES) of
edit($edit['id'], $edit['username'], $edit['password'], $_FILES['userfile']) of
edit($edit['id'], $edit['username'], $edit['password'], $edit[userfile]) of
edit($edit['id'], $edit['username'], $edit['password'], $edit['userfile'])

aanroep - ik krijg telkens de melding "Notice: Undefined index: userfile". Toch zie ik dat bijvoorbeeld hier op GoT de naam van een file input, ook een naam als edit[userfile] krijgt. Wat doe ik verkeerd?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Doe eens:

print_r($_POST) ;

Dan zie je in een keer alles wat verstuurt is van de vorige pagina. Want het is dus duidelijk dan $edit['userfile'] niet bestaat, hence de notice.

*Edit: Of werkt dit misschien dan:
$_FILES['edit']['userfile']

He, jakkes, Brakkie, niet stiekem reply'en! :+

[ Voor 36% gewijzigd door Cavorka op 31-07-2004 14:30 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Het is nu volgens mij $_FILES['edit']['userfile']

Systeem | Strava


Acties:
  • 0 Henk 'm!

Verwijderd

Gebruik je wel enctype="multipart/form-data" in je form?

Je vindt de naam van het geuploade bestand overigens in $_FILES['edit']['name']['userfile'], en de content-type in $_FILES['edit']['type']['userfile']

Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

edit:

Nee dus :+

[ Voor 79% gewijzigd door Brakkie op 31-07-2004 14:39 ]

Systeem | Strava


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
@cheetah - dat gebruik ik :)

Iedereen bedankt. Voor mensen die hier later nog wat aan hebben - print_r($_FILES) levert in deze situatie op:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Array
(
    [edit] => Array
        (
            [name] => Array
                (
                    [userfile] => erasmusbrug5.jpg
                )

            [type] => Array
                (
                    [userfile] => image/pjpeg
                )

            [tmp_name] => Array
                (
                    [userfile] => C:\Program Files\PHP\uploadtemp\php10.tmp
                )

            [error] => Array
                (
                    [userfile] => 0
                )

            [size] => Array
                (
                    [userfile] => 36535
                )

        )

)


Waardoor Cheetah de winnaar is van deze kleine quiz ;) De rest ook bedankt. Stom eigenlijk dat ik hier zelf niet op kwam. Soms heb je een duwtje in de goede richting nodig...

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

Verwijderd

Brakkie schreef op 31 juli 2004 @ 14:36:
$_FILES['edit']['type']['userfile']

Bedoel je die laatste 2 niet precies andersom? :)
Nee.
Pagina: 1