Toon posts:

[php] uploaden van files, probleem met array

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een formulier waar een variabel aantal uploadvelden komen te staan met als naam userfile. Hier wordt dus automatisch een array van gemaakt met de naam 'userfile' (logisch totzover).

Toen heb ik in een lusje heel simpel zonder nog enkele controle uit te voeren dit gedaan:

PHP:
1
copy ($userfile, $path_naar_server)


Ook heb ik geprobeerd om steeds de indez aan $userfile mee te geven, maar ook dit sliktie niet?!?!?

O ja, ik heb WEL ge-CHMOD ;)

Waar ga ik de fout in?

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Verwijderd

gokje, gebruik eens $_FILES

Verwijderd

Topicstarter
Daar ben ik ook al mee bezig geweest... Heb zo'n beetje (naar mijn inziens) alles geprobeerd.

Had nml een werkend script voor een file, maar met een array kom ik er niet uit. Dus vandaar de vermelding in mijn topic titel dat het waarschijnlijk inde benadering van de array zit

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Verwijderd schreef op 03 oktober 2002 @ 08:41:
Ik heb een formulier waar een variabel aantal uploadvelden komen te staan met als naam userfile. Hier wordt dus automatisch een array van gemaakt met de naam 'userfile' (logisch totzover).
Weet je zeker dat je die uploadvelden wel de naam userfile[] hebt gegeven?? Anders wordt er dus geen array van gemaakt.. :)

Daarna kan je dan zoiets doen als:

PHP:
1
2
3
4
foreach ( $_FILES['userfile'] as $file )
{
    move_uploaded_file( $file['tmp_name'], $path_naar_server );
}

On track


Verwijderd

Topicstarter
Raar, maar waar: Ik ben mn warnings kwijt met dat stuk script ?!?!

Maar er wordt helemaal niks geupload!!!

Ik ga bijna iets mystieks voelen...

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Welke PHP versie? Als je een oudere versie dan 4.1.0 hebt moet je $HTTP_POST_FILES gebruiken ipv $_FILES..

En je moet natuurlijk ook voor ieder bestand je $path_naar_server (bestandsnaam iig) aanpassen..

On track


Verwijderd

Topicstarter
Nee das het probleem niet, heb PHP Version 4.2.3 dus dat moet gewoon werken..

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

wat is precies je probleem dan wel? wat heb je al geprobeerd, foutmeldingen, etc?

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Verwijderd

Topicstarter
Nou, mijn probleem: ik heb een normaalformulier:

code:
1
2
3
4
5
6
<form method="POST" enctype="multipart/form-data">
<input type="file" name="userfile[]">
<input type="file" name="userfile[]">
<input type="file" name="userfile[]">
<input type="submit" name="form3" value="opslaan">
</form>

en als ik op opslaan klik gaatie hierheen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
if ($form3){

$path_naar_server = "d:/www/revasa.nl/www/verstoep/upload/images";

foreach ( $HTTP_POST_FILES['userfile'] as $file ) 
{ 
    move_uploaded_file( $file['tmp_name'], $path_naar_server ); 
}

echo "<pre>"; 
print_r($userfile); 
echo "</pre>"; 
}


als output van mijn array krijg ik:
code:
1
2
3
4
5
6
Array 
( 
    [0] => C:WINNT\TEMP\php27B1.tmp 
    [1] => C:WINNT\TEMP\php27B2.tmp 
    [2] => C:WINNT\TEMP\php27B3.tmp 
)


Verder krijg ik geen errors... en er worden geen files geupload

Duidelijker???

PS Dit is gestripte code, maar dit zou eventueel ook moeten werken volgens mij

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

probeer het zo eens:

PHP:
1
2
3
error_reporting(E_ALL);
...
$path_naar_server = "d://www//revasa.nl//www//verstoep//upload//images//";

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Verwijderd

Topicstarter
Dan krijg ik dit als output bij het uploaden van drie files.

op regel 370 staat: move_uploaded_file (...... etc.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Notice: Undefined index: tmp_name in d:\www\revasa.nl\www\verstoep\ProjectCreator.php on line 370

Notice: Undefined index: tmp_name in d:\www\revasa.nl\www\verstoep\ProjectCreator.php on line 370

Notice: Undefined index: tmp_name in d:\www\revasa.nl\www\verstoep\ProjectCreator.php on line 370

Notice: Undefined index: tmp_name in d:\www\revasa.nl\www\verstoep\ProjectCreator.php on line 370

Notice: Undefined index: tmp_name in d:\www\revasa.nl\www\verstoep\ProjectCreator.php on line 370

Array
(
    [0] => C:\WINNT\TEMP\php2DE0.tmp
    [1] => C:\WINNT\TEMP\php2DE1.tmp
    [2] => C:\WINNT\TEMP\php2DE2.tmp
)

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

het eerste argument van je functie klopt niet:

hier staat bij de eerste usercomment:
Watch out: The 'string filename' in the function description
move_uploaded_file (string filename, string destination)
is not the file name but the file itself i.e. $userfile, not $userfile_name [$userfile is the name given in the upload form to the 'imput name="userfile" type="file"] See: Chapter 19. Handling File Uploads for more details.

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Uit de usernotes bij Handling file uploads
Just another way to handle multiple uploads:

<?
function upload($FVARS) {
for($i=0;$i<count($FVARS[file][tmp_name]);$i++) {
$size=$FVARS[file][size][$i]; // filesize
$type=$FVARS[file][type][$i]; // mime type
$name=$FVARS[file][name][$i]; // original name
$temp=$FVARS[file][tmp_name][$i]; // temporary name
if($size) {
//whatever to do with uploaded files
echo "original name: $name<br />";
echo "temporary name: $temp<br />";
echo "mime type: $type<br />";
echo "size: $size<hr />";
}
}
}

upload($HTTP_POST_FILES); // or $_FILES or whatever
?>

Using this function every <input type="file" name="file[]"> will be handled.
Dus je code wordt dan ongeveer:
PHP:
1
2
3
4
5
for($i = 0; $i < count( $_FILES['userfile']['tmp_name'] ); $i++)
{
    $path_naar_server = $directory . $new_filename;
    move_uploaded_file( $_FILES['userfile']['tmp_name'][$i], $path_naar_server );
}

On track


Verwijderd

Topicstarter
Heb nu ff geen tijd om te ff goed te testen en te proberen, zal wel vanavoond of vannacht worden.

Het resultaat gaat nog volgen...

In iedergeval bedankt!

Verwijderd

Topicstarter
Het is nog geen nacht, maar het is wel gelukt, nou ja... ik heb het voorbeeld script aangepast ;) Maar ik snap hem wel! Bedankt allemaal!

Hier onder de source:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
for($i=0; $i < count($HTTP_POST_FILES['file']['tmp_name']); $i++) {
$size=$HTTP_POST_FILES['file']['size'][$i]; // filesize
$type=$HTTP_POST_FILES['file']['type'][$i]; // mime type 
$name=$HTTP_POST_FILES['file']['name'][$i]; // original name
$temp=$HTTP_POST_FILES['file']['tmp_name'][$i]; // temporary name
if($size) { 
copy($file[$i], "$absolute_path/$name");
echo "original name: $name<br />";
echo "temporary name: $temp<br />";
echo "mime type: $type<br />";
echo "size: $size<hr />";
}
}

Ik heb dus gebruik gemaakt van copy. Daar had ik nml een werkend voorbeeld van voor het uploaden van één file. Is dit een slordige methode, of is deze minder breed ondersteunt???

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

move_uploaded_file is speciaal bedoeld (en alleen) voor het kopieëren van een upgeload bestand. Dat is dus in zekere zin veiliger. Daarom werkt move_uploaded_file() ook als PHP in safe mode draait.. copy() daarintegen meestal niet..

Ik zou je code dus aanpassen naar
PHP:
7
move_uploaded_file( $HTTP_POST_FILES['file']['tmp_name'][$i], $absolute_path . '/' . $name );

On track


Verwijderd

Topicstarter
OK, doen we dat, werkt overigens ook perfet :p

Hartstikke bedankt allemaal voor alle sugesties en tips!!!
Pagina: 1