[PHP] Multiple File upload

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bdu
  • Registratie: Februari 2002
  • Laatst online: 17-09 20:49
Hoi,

Ik zit met een probleempje. Ik heb 2 file upload scripts, die werken ook. Ik zal ze hieronder laten zien.

Dit script upload meerder files.
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
$counter=count($HTTP_POST_FILES['bestandsnaam']['tmp_name']);
for($i=0;$i<$counter;$i++){
    if(is_uploaded_file($HTTP_POST_FILES['bestandsnaam']['tmp_name'][$i])){

        move_uploaded_file($HTTP_POST_FILES['bestandsnaam']['tmp_name'][$i],

        "uploads/".$HTTP_POST_FILES['bestandsnaam']['name'][$i]);
    }
}
?>


Het volgende script kan 1 file uploaden.
PHP:
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
<?php

$maxgrootte = 100; //grootte in kb's
$uploadmap = "uploads/"; //realatief aan map waarin script staat of absoluut pad

$newmaxgrootte = $maxgrootte*1024;

if(is_uploaded_file($bestand)) { // is het bestand een geüpload bestand?
    $bestand_name = $HTTP_POST_FILES['bestand']['name']; //naam van het geuploade bestand
    $bestand_type = $HTTP_POST_FILES['bestand']['type']; //MIME-header van het geuploade bestand (bijvoorbeeld image/pjpeg)
    $bestand_size = $HTTP_POST_FILES['bestand']['size']; //grootte in bytes van het geuploade bestand

    if ($bestand_size > $newmaxgrootte){
        $tegroot = round($bestand_size/1024);
        echo "Het bestand is groter dan ".$maxgrootte."kb (namelijk ".$tegroot."kb), wat niet toegstaan is.";
        exit;
    }
    if (file_exists($uploadmap.$bestand_name)){
        echo "Het bestand ".$bestand_name." bestaat al!<br>Hernoem het bestand op je harde schijf en probeer dan nog eens te uploaden.";
        exit;
    }
    move_uploaded_file($bestand,$uploadmap.$bestand_name);
    $nwbestandgrootte = round($bestand_size/1024);

echo "<FORM NAME='formulier1' METHOD='post' ACTION='doorsturen.php'>";
echo "<input type='text' name='foto' value='$bestand_name'><BR>";
echo "<INPUT TYPE='submit' NAME='Submit' VALUE='Artikel toevoegen'>";
echo "<INPUT TYPE='reset' NAME='Reset' VALUE='Wissen'>";
echo "</FORM>";

}
else {
    echo "Er is een fout opgetreden: ".$_FILES['bestand']['error'];
    echo "<br>Waarschijnlijk is het bestand geen geupload bestand.";
}
?>


Nu is mijn probleem dat er bij het 'multiple_file_upload'-script niet de "echo" komt die er bij het 'singel_file_upload'-script dat wel komt. Daarmee kan ik een form vullen en het vervolgens in een database voegen.

Nu wil ik het dus zo hebben dat die 'echo' ook verschijnt na het uploaden van de files bij het 'multiple_file_upload'-script. Waarna dus weer een form ingevult kan worden met de filenamen. En ik dat dus weer kan submitten naar de database.
  • Wie kan mij helpen met die ECHO??? Waar moet ik die plaatsen en hoe?
  • Wie kan mij eventueel ook helpen met het uitbreinden van het 'multiple_file_upload'script, zoals dat er alleen jpg geupload kunnen worden, en dat er alleen plaatje geupload kunnen worden van 100*100 pixels.
  • Ik wil het zo hebben dat plaatje 1 max 300 bij 300 pixels mag zijn en plaatje 2 max 100 bij 100 pixels mag zijn.
Bij vragen reageer aub, dan kan ik het misschien verduidelijken.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:47
bdu schreef op 18 november 2003 @ 23:42:
• Wie kan mij helpen met die ECHO??? Waar moet ik die plaatsen en hoe?
Als je een PHP script wilt schrijven, zul je moeten leren in PHP te programmeren. Als je ook maar enig idee hebt hoe de scripts werken, zou je zelf toch wel een beetje moeten kunnen gokken waar je die echo-statements moet plaatsen. Als je er zelf actief mee bezig bent geweest kun je in ieder geval met een concreter probleem komen.

GoT is niet voor script-requests; je zult dus zelf aan het programmeren moeten slaan!
• Wie kan mij eventueel ook helpen met het uitbreinden van het 'multiple_file_upload'script, zoals dat er alleen jpg geupload kunnen worden, en dat er alleen plaatje geupload kunnen worden van 100*100 pixels.
Dit specifieke onderwerp is al (meerdere keren) voorbij gekomen. Heb jij er al op gezocht?
• Ik wil het zo hebben dat plaatje 1 max 300 bij 300 pixels mag zijn en plaatje 2 max 100 bij 100 pixels mag zijn.
Niet te veel tegelijk doen; als je het tweede probleem opgelost hebt volgt de oplossing hiervoor vanzelf.

Acties:
  • 0 Henk 'm!

  • bdu
  • Registratie: Februari 2002
  • Laatst online: 17-09 20:49
Ik heb zeker gezocht, ik heb het hele internet afgezocht naar oplossingen. Maar helaas niet het resulaat gevonden wat de bedoeling is.

Ik ben inmiddels wel iets verder.

PHP:
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

echo "<FORM NAME='formulier1' METHOD='post' ACTION='doorsturen.php'>";

$counter=count($HTTP_POST_FILES['bestandsnaam']['tmp_name']);
for($i=0;$i<$counter;$i++){
    if(is_uploaded_file($HTTP_POST_FILES['bestandsnaam']['tmp_name'][$i])){

        move_uploaded_file($HTTP_POST_FILES['bestandsnaam']['tmp_name'][$i],

        "uploads/".$HTTP_POST_FILES['bestandsnaam']['name'][$i]);


echo "<input type='text' name='foto' value='bestandnaam'><BR>";





    }
}

echo "<INPUT TYPE='submit' NAME='Submit' VALUE='Artikel toevoegen'>";
echo "<INPUT TYPE='reset' NAME='Reset' VALUE='Wissen'>";
echo "</FORM>";

?>


Nu laat hij 2 textvelden zien waar 'bestandnaam' in staat. Deze kan ik nu ook submitten naar de database, maar wat ik wil is dat er in de

code:
1
value='bestandnaam'


field de bestandsnamen komen van het eerste bestand en het 2de bestand.

Kan iemand mij helpen, of misschien een tip geven.

Acties:
  • 0 Henk 'm!

  • bdu
  • Registratie: Februari 2002
  • Laatst online: 17-09 20:49
Ik ben al verder..

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

echo "<FORM NAME='formulier1' METHOD='post' ACTION='doorsturen.php'>";

$counter=count($HTTP_POST_FILES['bestandsnaam']['tmp_name']);
for($i=0;$i<$counter;$i++){
    if(is_uploaded_file($HTTP_POST_FILES['bestandsnaam']['tmp_name'][$i])){
       $bestand_name = $HTTP_POST_FILES['bestandsnaam']['name'][0];
       $bestand_name_thumb = $HTTP_POST_FILES['bestandsnaam']['name'][1];
        move_uploaded_file($HTTP_POST_FILES['bestandsnaam']['tmp_name'][$i],

        "uploads/".$HTTP_POST_FILES['bestandsnaam']['name'][$i]);
    }
}

echo "<input type='text' name='foto' value='$bestand_name'><BR>";
echo "<input type='text' name='foto' value='$bestand_name_thumb'><BR>";
echo "<INPUT TYPE='submit' NAME='Submit' VALUE='Artikel toevoegen'>";
echo "<INPUT TYPE='reset' NAME='Reset' VALUE='Wissen'>";
echo "</FORM>";

?>


Nu dus alleen nog een paar restrictie eraan hangen.

Iemand die kan helpen?

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Lees eens de documentatie door over $HTTP_POST_FILES, tegenwoordig schrijven we die btw als $_FILES.

Daar staat exact in wat jij wil weten.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • bdu
  • Registratie: Februari 2002
  • Laatst online: 17-09 20:49
Ik heb het gevonden.

Nu heb ik alleen nog 1 ding. Hoe kan ik het zo scritpten dan er bij upload mogelijk 1 alleen plaatjes van 100*100 pixel geupload kunnen worden.

En bij upload mogelijkheid 2 alleen plaatjes van 300*300 pixel geupload kunnen worden.

Wie kan mij helpen?

Acties:
  • 0 Henk 'm!

  • bdu
  • Registratie: Februari 2002
  • Laatst online: 17-09 20:49
Kan iemand mij misschien vertellen wat er hier fout is?

Ik krijg de volgende error:
code:
1
2
Warning: getimagesize: Unable to open '/tmp/phpPxQ4RS' for reading. in /home/httpd/vhosts/yoi.nl/httpdocs/form/upload.php on line 44
De gegevens zijn succesvol verstuurd


Hij geeft dus een error maar alles verloopt wel goed, en alles doet het dus.

Hieronder de code

PHP:
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php

mysql_connect("localhost","****","****");
mysql_select_db("****");

$vars1='[img]"../images/';
$vars2='"[/img]';
$maxgrootte = 100; //grootte in kb's
$uploadmap = "images/"; //realatief aan map waarin script staat of absoluut pad
$newmaxgrootte = $maxgrootte*1024;
$foto=$_POST['foto'];
$thumb=$_POST['thumb'];
$artikel=$_POST['artikel'];
$artikelnr=$_POST['artikelnr'];
$omschrijving=$_POST['omschrijving'];
$prijs=$_POST['prijs'];
$cat=$_POST['cat'];
$breedte= 250;
$hoogte= 300;
$breedte_thumb= 100;
$hoogte_thumb= 100;

$counter=count($HTTP_POST_FILES['bestandsnaam']['tmp_name']);
for($i=0;$i<$counter;$i++){

   if(is_uploaded_file($HTTP_POST_FILES['bestandsnaam']['tmp_name'][$i])){

       $bestand_name = $HTTP_POST_FILES['bestandsnaam']['name'][0];
       $bestand_name_thumb = $HTTP_POST_FILES['bestandsnaam']['name'][1];
       $bestand_tmp_name = $HTTP_POST_FILES['bestandsnaam']['tmp_name'][0];
       $bestand_tmp_name_thumb = $HTTP_POST_FILES['bestandsnaam']['tmp_name'][1];

       $bestand_size = $HTTP_POST_FILES['bestand']['size'][$i];

    if ($bestand_size > $newmaxgrootte){
        $tegroot = round($bestand_size/1024);
        echo "Het bestand is groter dan ".$maxgrootte."kb (namelijk ".$tegroot."kb), wat niet toegstaan is.";
        exit;
       }
    if (file_exists($uploadmap.$HTTP_POST_FILES['bestandsnaam']['name'][$i])){
        echo "Het bestand ".$HTTP_POST_FILES['bestandsnaam']['name'][0]." of het bestand ".$HTTP_POST_FILES['bestandsnaam']['name'][1]." bestaat al!<br>Hernoem 1 van de bestanden op je harde schijf en probeer dan nog eens te uploaden.";
        exit;
       }

$size = getimagesize($bestand_tmp_name);
$width = $size[0];
$height = $size[1];

    if ($width>$breedte or $height>$hoogte){

        echo "Het plaatje is breeder dan 250 pixels.";
        exit;
        }

$size_thumb = getimagesize($bestand_tmp_name_thumb);
$width_thumb = $size_thumb[0];
$height_thumb = $size_thumb[1];

    if ($width_thumb>$breedte_thumb or $height_thumb>$hoogte_thumb){

        echo "De thumb heeft niet de goede afmetingen";
        exit;
        }

        move_uploaded_file($HTTP_POST_FILES['bestandsnaam']['tmp_name'][$i],
        "images/".$HTTP_POST_FILES['bestandsnaam']['name'][$i]);
    }
}

if ($_POST['Submit']) { //als de persoon op submit heeft gedrukt

  $query="INSERT INTO formulier1 (foto, thumb, artikel, artikelnr, omschrijving, prijs, cat) VALUES ( '$vars1$bestand_name$vars2', '$vars1$bestand_name_thumb$vars2', '$artikel', '$artikelnr', '$omschrijving', '$prijs', '$cat')";
  mysql_query($query) or die (mysql_error());

  echo "De gegevens zijn succesvol verstuurd";
}

?>

Acties:
  • 0 Henk 'm!

  • Anders
  • Registratie: December 2000
  • Laatst online: 13-09 18:52
Volgens mij kun je getimagesize niet op tijdelijke bestanden gebruiken. Probeer het eens met

PHP:
1
getimagesize($uploadmap.$HTTP_POST_FILES['bestandsnaam']['name'][$i]);


Verder: weet je zeker dat je bestanden met hun originele bestandsnaam op de server wilt plaatsen? Bij onze klanten wil het nog wel eens voorkomen dat ze meerdere "logo.jpg"s hebben liggen, die ze allemaal moeten kunnen toevoegen zonder een "die bestaat al"-melding. We geven hier alle bestandsnamen een nieuwe naam met iig een (stuk) timestamp, een stuk random string en pas dan doen we een "bestaat deze reeds"-check.

Andere reden voor het geven van een nieuwe naam zijn problemen en ge-eikel met spaties in bestandsnamen (wanneer je het bijvoorbeeld commandline verder wilt verkleinen met ImageMagick). Windows is bovendien een stuk coulanter in vreemde tekens in bestandsnamen dan bv. unix-webservers.

Ik spoor veilig of ik spoor niet.


Acties:
  • 0 Henk 'm!

  • bdu
  • Registratie: Februari 2002
  • Laatst online: 17-09 20:49
bedankt, het uploaden van de bestanden was al gelukt, maar wat je zegt over die bestandsnamen, daar zit wel iets in, ik ga er ff naar kijken nogmaals bedankt.

Acties:
  • 0 Henk 'm!

  • bdu
  • Registratie: Februari 2002
  • Laatst online: 17-09 20:49
Anders, kan je me misschien helpen, uit je reactie kan ik opmaken dat je zelf ook zo'n script hebt, ik kom er namelijk niet uit, please...

ps. misschien dat je me het kan mailen :9

[ Voor 16% gewijzigd door bdu op 23-11-2003 14:43 ]


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

bdu schreef op 23 november 2003 @ 14:43:
Anders, kan je me misschien helpen, uit je reactie kan ik opmaken dat je zelf ook zo'n script hebt, ik kom er namelijk niet uit, please...

ps. misschien dat je me het kan mailen :9
• Gebruik de editknop eens als je iets toe te voegen hebt aan een vorige post.
• Kicken binnen 24 uur hoort niet.
• We zijn hier geen contacten uitwisselbureau, dus 'hey mail me ff' hoeft niet zo.
• En je bent nu een schaamteloze script request aan het bouwen, en daar zijn we ook niet voor.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
de size van de file zit gewoon in het $_FILES array erbij, geloof ik..

[edit]
das alleen de filesize.

[ Voor 20% gewijzigd door Grijze Vos op 23-11-2003 15:35 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • bdu
  • Registratie: Februari 2002
  • Laatst online: 17-09 20:49
dat is idd alleen de filesize idd...

Ik heb dat al, ik wil het alleen nu zo hebben dat de files worden gerenamed naar een unieke naam, zoals Anders zei.

Ik heb nu het volgende.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<HTML>
<form enctype="multipart/form-data" method="post" action="upload.php" name="form1">


<input type="hidden" name="MAX_FILE_SIZE" value="102400">
Naam foto:      <input type="file" name="bestand" accept="image/jpeg"><BR>
Thumb naam:     <input type="file" name="bestand_thumb" accept="image/jpeg"><BR>
Artikel:        <input type='text' name='artikel' value=''><BR>
Artikelnummer:  <input type='text' name='artikelnr' value=''><BR>
Omschrijving:   <input type='text' name='omschrijving' value=''><BR>
Prijs:          <input type='text' name='prijs' value=''><BR>
Categorie:      <input type='text' name='cat' value=''><BR><BR>
<INPUT TYPE='submit' NAME='Submit' VALUE='Artikel toevoegen'><BR>
<INPUT TYPE='reset' NAME='Reset' VALUE='Wissen'><BR>
</form>
</HTML>



PHP:
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?php

mysql_connect("localhost","bart1","school");
mysql_select_db("school");

$maxgrootte = 70; //grootte in kb's
$uploadmap = "images/"; //realatief aan map waarin script staat of absoluut pad
$breedte= 250;
$hoogte= 300;
$breedte_thumb= 100;
$hoogte_thumb= 100;
$foto=$_POST['foto'];
$thumb=$_POST['thumb'];
$artikel=$_POST['artikel'];
$artikelnr=$_POST['artikelnr'];
$omschrijving=$_POST['omschrijving'];
$prijs=$_POST['prijs'];
$cat=$_POST['cat'];
$vars1='[img]"../images/';
$vars2='"[/img]';


$newmaxgrootte = $maxgrootte*1024;

if(is_uploaded_file($bestand)) { // is het bestand een geüpload bestand?

    $bestand_name = $HTTP_POST_FILES['bestand']['name']; //naam van het geuploade bestand
    $bestand_type = $HTTP_POST_FILES['bestand']['type']; //MIME-header van het geuploade bestand (bijvoorbeeld image/pjpeg)
    $bestand_size = $HTTP_POST_FILES['bestand']['size']; //grootte in bytes van het geuploade bestand
    $bestand_tmp_name = $HTTP_POST_FILES['bestand']['tmp_name'];

    if ($bestand_size > $newmaxgrootte){
        $tegroot = round($bestand_size/1024);
        echo "Het bestand is groter dan ".$maxgrootte."kb (namelijk ".$tegroot."kb), wat niet toegstaan is.";
        exit;
    }
    if (file_exists($uploadmap.$bestand_name)){
        echo "Het bestand ".$bestand_name." bestaat al!<br>Hernoem het bestand op je harde schijf en probeer dan nog eens te uploaden.";
        exit;
    }

$size = getimagesize($bestand_tmp_name);
$width = $size[0];
$height = $size[1];

    if ($width>$breedte or $height>$hoogte){

        echo "Het plaatje is breeder dan 250 pixels breed.";
        exit;
        }

        move_uploaded_file($HTTP_POST_FILES['bestand']['tmp_name'],
        "images/".$HTTP_POST_FILES['bestand']['name']);
    echo "Bestand ".$bestand_name." van het type ".$bestand_type." en ".$nwbestandgrootte."KB is met succes ge-upload!";
}
else {

    $bestand_name= 'grote_artikel_foto.jpg';

}


if(is_uploaded_file($bestand_thumb)) { // is het bestand een geüpload bestand?

    $bestand_name_thumb = $HTTP_POST_FILES['bestand_thumb']['name']; //naam van het geuploade bestand
    $bestand_type_thumb = $HTTP_POST_FILES['bestand_thumb']['type']; //MIME-header van het geuploade bestand (bijvoorbeeld image/pjpeg)
    $bestand_size_thumb = $HTTP_POST_FILES['bestand_thumb']['size']; //grootte in bytes van het geuploade bestand
    $bestand_tmp_name_thumb = $HTTP_POST_FILES['bestand_thumb']['tmp_name'];

    if ($bestand_size_thumb > $newmaxgrootte){
        $tegroot = round($bestand_size_thumb/1024);
        echo "Het bestand is groter dan ".$maxgrootte."kb (namelijk ".$tegroot."kb), wat niet toegstaan is.";
        exit;
    }
    if (file_exists($uploadmap.$bestand_name_thumb)){
        echo "Het bestand ".$bestand_name_thumb." bestaat al!<br>Hernoem het bestand op je harde schijf en probeer dan nog eens te uploaden.";
        exit;
    }

$size_thumb = getimagesize($bestand_tmp_name_thumb);
$width_thumb = $size_thumb[0];
$height_thumb = $size_thumb[1];

    if ($width_thumb>$breedte_thumb or $height_thumb>$hoogte_thumb){

        echo "Het plaatje is breeder dan 250 pixels breed.";
        exit;
        }

        move_uploaded_file($HTTP_POST_FILES['bestand_thumb']['tmp_name'],
        "images/".$HTTP_POST_FILES['bestand_thumb']['name']);
    echo "Bestand ".$bestand_name_thumb." van het type ".$bestand_type_thumb." en ".$nwbestandgrootte."KB is met succes ge-upload!";
}
else {

$bestand_name_thumb= 'artikel_thumb.jpg';

}

if ($_POST['Submit']) { //als de persoon op submit heeft gedrukt

  $query="INSERT INTO formulier1 (foto, thumb, artikel, artikelnr, omschrijving, prijs, cat) VALUES ( '$vars1$bestand_name$vars2', '$vars1$bestand_name_thumb$vars2', '$artikel', '$artikelnr', '$omschrijving', '$prijs', '$cat')";
  mysql_query($query) or die (mysql_error());

  echo "De gegevens zijn succesvol verstuurd";
}


?>


Dit werkt, zoals ik het wil, maar door die opmerking van Anders, wil ik dat ook proberen, maar ik kom er zelf dus niet uit.

Iemand iets concretere tips?
Pagina: 1