Versio

file upload

Overzicht Reageren

Mitchel V

Mitchel V

27/06/2010 17:14:03
Quote Anchor link
Hallo.

Zelf ben ik niet zo bekend met het uploaden van een file.
Maar ik loop tegen het volgende probleem op.

Ik wil controleren of een bestand is ingevoerd bij de input, maar dat gaat ergens fout.
Zelf weet ik niet hoe ik dit kan oplossen, zou iemand mij kunnen helpen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
33
34
35
36
37
38
39
40
<?php

$aantalp
= 0;
for ($i = 1; $i <= $_POST['aantal']; $i++) {
    $imagename = basename($_FILES['file']['name'.$i]);
    if(!$imagename == ""){
        $aantalp = $aantalp + 1;
    }

    echo $imagename;
}

$i = 0;
if($aantalp == 0){
    $error .= "Het is verplicht om minimaal <u>1</u> product toe te voegen aan een factuur.<br>";
}

if(!$error == ""){
    echo '<b>Foutmelding:</b><br>'.$error;
}
else{
// Rest van de code.
}

echo '<form method="post" enctype="multipart/form-data"><table>
<tr>
    <td></td>
    <td>Bijlage</td>
    <td>Omschrijving</td>
</tr>'
;

for ($i = 1; $i <= $_POST['aantal']; $i++) {
    echo '<tr>
            <td>'
.$i.'</td>
            <td><input name="file'
.$i.'" type="file" /></td>
            <td><input type="text" name="omschrijving'
.$i.'" value="'.$_POST['omschrijving'.$i].'" size="35"></td>
          </tr>'
;
    }

echo '<tr><td colspan="5"><br></td></tr>';

echo '<tr><td colspan="1"><input type="hidden" name="aantalproducten" value="'.$i.'"></td><td colspan="4"><input type="submit" name="submit" value="Zet factuur klaar"></td></tr>
</table>
</form>'
;
?>
 
PHP hulp

PHP hulp

24/05/2012 15:37:18
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Noppes Homeland

Noppes Homeland

27/06/2010 17:34:18
Quote Anchor link
name="file'.$i.'"

dit is toch echt niet handig, je kan dan beter
name="file[]" er van maken

En als je dan een kijkt naar de var_dump($_FILES), dan zie je hopelijk zelf wel hoe en wat.

Zo niet dan kijk je maar naar dit:
http://wiki.phpfreakz.nl/Upload
 
Mitchel V

Mitchel V

27/06/2010 18:40:05
Quote Anchor link
Ok,

Maar hoe kan ik ze in de POST dan uitlezen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
33
34
35
36
37
38
39
40
<?php
$aantal
= 5;

if($_SERVER['REQUEST_METHOD'] == 'POST'){
    if ($_FILES["file"]["error"] > 0){
        echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
else{
        $_FILES["file"]["name"] = date("dmYHis").$_FILES["file"]["name"];
        if (file_exists("uploadfactuur/" . $_FILES["file"]["name"])){
            echo $_FILES["file"]["name"] . " already exists. ";
        }
else{
            move_uploaded_file($_FILES["file"]["tmp_name"], "uploadsfactuur/" . $_FILES["file"]["name"]);
            echo "Stored in: " . "uploadfactuur/" . $_FILES["file"]["name"];
        }
    }
}

?>


<html>
<body>

<form method="post"
enctype="multipart/form-data">
<table>
<tr><td></td><td>Bestand</td><td>Omschrijving</td></tr>
<?php
for ($i = 1; $i <= $aantal; $i++) {
    echo '<tr>
            <td>'
.$i.'</td>
            <td><input name="file[]" type="file" /></td>
            <td><input type="text" name="omschrijving[]" value="'
.$_POST['omschrijving'.$i].'" size="35"></td>
          </tr>'
;
    }

?>

<tr><td></td><td><input type="submit" name="submit" value="Submit" /></td><td></td></tr>
</table>
</form>

</body>
</html>
 
Jan geen

Jan geen

27/06/2010 19:32:26
Quote Anchor link
Door middel van een foreach
 
Mitchel V

Mitchel V

27/06/2010 19:52:05
Quote Anchor link
Ok, Ik heb het geprobeerd maar ik krijg de volgende fout:
Return Code: Array
Return Code: Array
Return Code: Array
Return Code: Array
Return Code: Array

wat doe ik fout?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
33
34
35
36
37
38
39
40
41
<?php
$aantal
= 5;
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    foreach($_FILES["file"]["name"] as $key => $value){
        if ($_FILES["file"]["error"] > 0){
            echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
        }
else{
            if($_FILE["file"]["size"] > 0){
                $_FILES["file"]["name"] = date("dmYHis").$value;
                if (file_exists("uploadfactuur/" . $_FILES["file"]["name"])){
                    echo $_FILES["file"]["name"] . " already exists. ";
                }
else{
                    move_uploaded_file($_FILES["file"]["tmp_name"], "uploadsfactuur/" . $_FILES["file"]["name"]);
                    echo "Stored in: " . "uploadfactuur/" . $_FILES["file"]["name"];
                }
            }
        }
    }
}

?>


<html>
<body>

<form method="post" enctype="multipart/form-data">
<table>
<tr><td></td><td>Bestand</td><td>Omschrijving</td></tr>
<?php
for ($i = 1; $i <= $aantal; $i++) {
    echo '<tr>
            <td>'
.$i.'</td>
            <td><input name="file[]" type="file" /></td>
            <td><input type="text" name="omschrijving[]" value="'
.$_POST['omschrijving'.$i].'" size="35"></td>
          </tr>'
;
    }

?>

<tr><td></td><td><input type="submit" name="submit" value="Submit" /></td><td></td></tr>
</table>
</form>
</body>
</html>
 
Noppes Homeland

Noppes Homeland

27/06/2010 20:37:56
Quote Anchor link
je hebt geen eens keken naar een var_dump($_POST) / var_dump($_FILES).

als je dat bekeken hebt dan zal het ook zo moeten zjn dat je ziet wat je fout gedaan hebt.
 
Mitchel V

Mitchel V

27/06/2010 21:25:30
Quote Anchor link
ik heb gekeken op: http://nl.php.net/var_dump
maar nee, ik zie niet wat ik fout doe :S
 
Jelmer rrrr

Jelmer rrrr

27/06/2010 23:21:57
Quote Anchor link
$_FILES['file']['name'] is een array, zoals je zo te zien weet, want je gebruikt hem als argument voor de foreach-lus. Maar $_FILES['file']['error] is dat ook, en $_FILES['file']['size'] ook. Als je daar de juiste waarde uit wilt pakken, moet je die arrays benaderen via hun key, $key die je foreach-lus oplevert.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
foreach($_FILES['file']['name'] as $key => $file_name) {
   echo 'Bestand ' . $_FILES['file']['name'][$key] . ' is tijdelijk opgeslagen als ' . $_FILES['file']['tmp_name'][$key];
}

?>


Als je vlak voor je foreach-lus var_dump($_FILES) zet, dan laat PHP je zien hoe de $_FILES array is opgebouwd. Dat bedoelde Noppes.
 
Mitchel V

Mitchel V

28/06/2010 00:09:31
Quote Anchor link
Ohh ok,

Maar dan snap ik de output niet van de var_dump..
Ik upload 1 bestand, nl.gif

dan krijg ik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
array(1) { ["file"]=> array(5) { ["name"]=> array(5) { [0]=> string(6) "nl.gif" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(0) "" [4]=> string(0) "" } ["type"]=> array(5) { [0]=> string(9) "image/gif" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(0) "" [4]=> string(0) "" } ["tmp_name"]=> array(5) { [0]=> string(14) "/tmp/phprwAerP" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(0) "" [4]=> string(0) "" } ["error"]=> array(5) { [0]=> int(0) [1]=> int(4) [2]=> int(4) [3]=> int(4) [4]=> int(4) } ["size"]=> array(5) { [0]=> int(360) [1]=> int(0) [2]=> int(0) [3]=> int(0) [4]=> int(0) } } } Bestand nl.gif is tijdelijk opgeslagen als /tmp/phprwAerPBestand is tijdelijk opgeslagen als Return Code: 4


Hij slaat niets op in de ftp...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
33
34
35
36
37
38
39
40
41
42
43
<?php
var_dump($_FILES);

$aantal = 5;
if($_SERVER['REQUEST_METHOD'] == 'POST'){
foreach($_FILES['file']['name'] as $key => $file_name) {
   echo 'Bestand ' . $_FILES['file']['name'][$key] . ' is tijdelijk opgeslagen als ' . $_FILES['file']['tmp_name'][$key];
            if ($_FILES["file"]["error"][$key] > 0){
            echo "Return Code: " . $_FILES["file"]["error"][$key] . "<br />";
        }
else{
            if($_FILE["file"]["size"][$key] > 0){
                if (file_exists("uploadfactuur/" . $_FILES["file"]["name"][$key])){
                    echo $_FILES["file"]["name"][$key] . " already exists. ";
                }
else{
                    move_uploaded_file($_FILES["file"]["tmp_name"][$key], "uploadsfactuur/" . $_FILES["file"]["name"][$key]);
                    echo "Stored in: " . "uploadfactuur/" . $_FILES["file"]["name"][$key];
                }
            }
        }
    }
}

?>


<html>
<body>

<form method="post" enctype="multipart/form-data">
<table>
<tr><td></td><td>Bestand</td><td>Omschrijving</td></tr>
<?php
for ($i = 1; $i <= $aantal; $i++) {
    echo '<tr>
            <td>'
.$i.'</td>
            <td><input name="file[]" type="file" /></td>
            <td><input type="text" name="omschrijving[]" value="'
.$_POST['omschrijving'.$i].'" size="35"></td>
          </tr>'
;
    }

?>

<tr><td></td><td><input type="submit" name="submit" value="Submit" /></td><td></td></tr>
</table>
</form>
</body>
</html>
 
Niels Kieviet
Beheerder

Niels Kieviet

28/06/2010 09:15:01
Quote Anchor link
Kijk anders even bij deze tutorial, daarin heb ik beschreven hoe je een file upload

http://www.phphulp.nl/php/tutorial/overig/uploadsysteem/705/uploaden-php/1859/

Later deze dag zal ik nog een upload class bij de scripts plaatsen, maar dan moet je nog even geduld hebben
 
Piet Verhagen

Piet Verhagen

28/06/2010 09:25:55
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
33
34
35
36
37
38
39
array(1) {
    ["file"]=> array(5) {
        ["name"]=> array(5) {
            [0]=> string(6) "nl.gif"
            [1]=> string(0) ""
            [2]=> string(0) ""
            [3]=> string(0) ""
            [4]=> string(0) ""
        }
        ["type"]=> array(5) {
            [0]=> string(9) "image/gif"
            [1]=> string(0) ""
            [2]=> string(0) ""
            [3]=> string(0) ""
            [4]=> string(0) ""
        }
        ["tmp_name"]=> array(5) {
            [0]=> string(14) "/tmp/phprwAerP"
            [1]=> string(0) ""
            [2]=> string(0) ""
            [3]=> string(0) ""
            [4]=> string(0) ""
        }
        ["error"]=> array(5) {
            [0]=> int(0)
            [1]=> int(4)
            [2]=> int(4)
            [3]=> int(4)
            [4]=> int(4)
        }
        ["size"]=> array(5) {
            [0]=> int(360)
            [1]=> int(0)
            [2]=> int(0)
            [3]=> int(0)
            [4]=> int(0)
        }
    }
}

Even wat mooiere weer gegeven. Dat word het een stuk duidelijker. Jammer dat je dat zelf niet doet.
php.net:
If filename is a valid upload file, but cannot be moved for some reason, no action will occur, and move_uploaded_file() will return FALSE. Additionally, a warning will be issued.

Je kunt dus doen in regel 12 - 17 van jou laatste code blokje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
                if (file_exists("uploadfactuur/"  . $_FILES["file"]["name"][$key])){
                    echo $_FILES["file"]["name"][$key] . " already exists. ";
                } elseif(move_uploaded_file($_FILES["file"]["tmp_name"][$key], "uploadsfactuur/" . $_FILES["file"]["name"][$key])) {
                    echo "Stored in: " . "uploadfactuur/" . $_FILES["file"]["name"][$key];
                } else {
                    echo 'Opslaan mislukt.';
                }

Maak van de destination eens een absuluut pad. En chmod naar 777.
 
Niels Kieviet
Beheerder

Niels Kieviet

28/06/2010 09:35:37
Quote Anchor link
Ik heb de uploader bij de scripts toegevoegd.

http://www.phphulp.nl/php/script/classes/uploader-class/1792/
 
Jan Koehoorn

Jan Koehoorn

28/06/2010 10:31:27
Quote Anchor link
Bij uploadscripts gaat het vaak fout met de rechten die de map heeft waarnaar je je bestanden wilt uploaden. Wat ook vaak fout gaat, is de verwijzing naar de goede map.
Probeer maar eens:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    echo $_SERVER['DOCUMENT_ROOT'] . '/uploadsfactuur/';
?>
 
Arjan -

Arjan -

28/06/2010 12:10:51
Quote Anchor link
Je had aardig wat foutjes in je code staan. Probeer het eens middels onderstaande code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

$map
= $_SERVER['DOCUMENT_ROOT'].'/uploadsfactuur/';

$aantal = 5;
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    foreach($_FILES['file']['name'] as $key => $file_name) {
           
        echo 'Bestand ' . $file_name . ' is tijdelijk opgeslagen als ' . $_FILES['file']['tmp_name'][$key];
        
        if ($_FILES['file']['error'][$key] < 1){
            if($_FILES['file']['size'][$key] > 0){
                if (file_exists($map . $file_name)){
                    echo $file_name . " already exists. ";
                }
else{
                    move_uploaded_file($_FILES['file']['tmp_name'][$key], $map . $file_name);
                    echo "Stored in: " . $map . $file_name;
                }
            }
        }
else{
            echo "Return Code: " . $_FILES['file']['error'][$key] . "<br />";
        }
    }
}



?>
Gewijzigd op 28/06/2010 12:42:04 door Arjan -
 
Mitchel V

Mitchel V

28/06/2010 12:28:19
Quote Anchor link
bij het controleren van de groote van een bestand:

if($_FILES["file"]["size"][$key] > 0){

)

Ik heb gezien, als ik een file wil uploaden, dan krijg ik geen size mee :S
wat doe ik dan fout?
array:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
array(1) {
    ["file"]=> array(5) {
        ["name"]=> array(5) {
            [0]=> string(15) "middenboven.png"
            [1]=> string(15) "middenonder.png"
            [2]=> string(0) ""
            [3]=> string(0) ""
            [4]=> string(0) ""
        }
        ["type"]=> array(5) {
            [0]=> string(9) "image/png"
            [1]=> string(9) "image/png"
            [2]=> string(0) ""
            [3]=> string(0) ""
            [4]=> string(0) ""
        }
        ["tmp_name"]=> array(5) {
            [0]=> string(14) "/tmp/php746Dv6"
            [1]=> string(14) "/tmp/phpYY9hfT"
            [2]=> string(0) ""
            [3]=> string(0) ""
            [4]=> string(0) ""
        }
        ["error"]=> array(5) {
            [0]=> int(0)
            [1]=> int(0)
            [2]=> int(4)
            [3]=> int(4)
            [4]=> int(4)
        }
        ["size"]=> array(5) {
            [0]=> int(56083)
            [1]=> int(50727)
            [2]=> int(0)
            [3]=> int(0)
            [4]=> int(0)
        }
    }
}


Bestand middenboven.png is tijdelijk opgeslagen als /tmp/php746Dv6
Return Code: 0
Bestand middenonder.png is tijdelijk opgeslagen als /tmp/phpYY9hfT
Return Code: 0
Bestand is tijdelijk opgeslagen als
1
size: 0Bestand is tijdelijk opgeslagen als
1
size: 0Bestand is tijdelijk opgeslagen als
1


Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
$rootmap
= $_SERVER['DOCUMENT_ROOT'].'/';

$aantal = 5;
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    foreach($_FILES['file']['name'] as $key => $file_name) {
          
        echo 'Bestand ' . $file_name . ' is tijdelijk opgeslagen als ' . $_FILES['file']['tmp_name'][$key].'<br>';
        
        if ($_FILES["file"]["error"][$key] > UPLOAD_ERR_OK){
            echo '1<br>
            size: '
. $_FILES["file"]["size"][$key];
            if(!$_FILES["file"]["size"][$key] == 0){
                echo '2';
                if (file_exists($rootmap."uploadsfactuur/" . $file_name)){
                    echo $file_name . " already exists. ";
                }
else{
                    move_uploaded_file($_FILES["file"]["tmp_name"][$key], $rootmap."uploadsfactuur/" . $file_name);
                    echo "Stored in: " . $rootmap . "uploadsfactuur/" . $file_name;
                }
            }
        }
else{
            echo "Return Code: " . $_FILES["file"]["error"][$key] . "<br />";
        }
    }
}

?>
 
Arjan -

Arjan -

28/06/2010 12:40:58
Quote Anchor link
Gebruik nog even de aangepast versie van mijn post, want ik had zelf een foutje gemaakt en snel aangepast.

En je krijgt in je var_dump wel een size mee, zie onderaan je output:

["size"]=> array(5) {
[0]=> int(56083)
[1]=> int(50727)
[2]=> int(0)
[3]=> int(0)
[4]=> int(0)
}

De eerste 2 bestanden hebben een attribuut size met als waarde een integer. Dus dat is correct.
Gewijzigd op 28/06/2010 12:45:09 door Arjan -
 
Arjan -

Arjan -

28/06/2010 12:40:58
Quote Anchor link
Dubbelpost
Gewijzigd op 28/06/2010 12:41:13 door Arjan -
 
Mitchel V

Mitchel V

28/06/2010 12:56:26
Quote Anchor link
ok top.

Waar vind ik de error codes?
Zodat ik kan uitlezen wat Return Code: 4 is
 
Arjan -

Arjan -

28/06/2010 13:19:03
Quote Anchor link
http://www.php.net/manual/en/features.file-upload.errors.php

Je kan deze functie gebruiken (code uit bovenstaande link):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

function file_upload_error_message($error_code) {
    switch ($error_code) {
        case
UPLOAD_ERR_INI_SIZE:
            return 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
        case
UPLOAD_ERR_FORM_SIZE:
            return 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
        case
UPLOAD_ERR_PARTIAL:
            return 'The uploaded file was only partially uploaded';
        case
UPLOAD_ERR_NO_FILE:
            return 'No file was uploaded';
        case
UPLOAD_ERR_NO_TMP_DIR:
            return 'Missing a temporary folder';
        case
UPLOAD_ERR_CANT_WRITE:
            return 'Failed to write file to disk';
        case
UPLOAD_ERR_EXTENSION:
            return 'File upload stopped by extension';
        default:

            return 'Unknown upload error';
    }
}


if ($_FILES['file']['error'] === UPLOAD_ERR_OK)
    // upload ok
else
    $error_message = file_upload_error_message($_FILES['file']['error']);

?>
Gewijzigd op 28/06/2010 13:20:45 door Arjan -
 
Mitchel V

Mitchel V

28/06/2010 14:11:36
Quote Anchor link
ok dit begind er op te lijken :D

Maar nu, buiten dat ik een file mee geef, wil ik ook een omschrijving mee geven..
Hoe kan ik die in de zelfde foreach zetten?

Dit werkt niet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
foreach($_FILES['file']['name'] as $key => $file_name && $_POST['omschrijving'] as $key2=> $omschrijving){

}

?>
Gewijzigd op 28/06/2010 14:12:20 door Mitchel V
 
Arjan -

Arjan -

28/06/2010 14:44:59
Quote Anchor link
Je zal dan dit moeten doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

foreach($_FILES['file']['name'] as $key => $file_name){

echo $omschrijving[$key];

}


?>


De key van $_FILES['file']['name'] komt overeen met de omschrijving array. Dus dit zal moeten werken.

Ik denk dat het goed is dat je even goed kijkt hoe een array werkt en hoe je er mee kan werken. Want wanneer je in html een input de naam omschrijving[] mee geeft en je hebt hier nog 10x dezelfde inputs staan, dan krijg je dus een array zoals:

$omschrijving[0] = 'Omschrijving 1';
$omschrijving[1] = 'Omschrijving 2';
$omschrijving[2] = 'Omschrijving 3';
etc...

Hier zijn dus de cijfers tussen de brackets de keys van de array en die komen overeen met de keys in je $_FILES['file']['name'] array omdat die ook weer keys bevat, beginnend vanaf 0:

$_FILES['file']['name'][0] = 'Naam bestand 1';
$_FILES['file']['name'][1] = 'Naam bestand 2';
$_FILES['file']['name'][2] = 'Naam bestand 3';
Etc...
Gewijzigd op 28/06/2010 14:48:25 door Arjan -
 



Overzicht Reageren