Plusieurs upload

Fermé
Loic1983 Messages postés 98 Date d'inscription samedi 6 mars 2010 Statut Membre Dernière intervention 28 août 2011 - Modifié par Loic1983 le 24/03/2010 à 19:09
youkous2004 Messages postés 1 Date d'inscription dimanche 26 décembre 2010 Statut Membre Dernière intervention 26 décembre 2010 - 26 déc. 2010 à 23:57
Bonjour a tous,

j'ai fais un script en suivant un tuto, qui me permet d'uploader un fichier, j'aimerai le modifier pour pouvoir uploader 12 fichier.

Que faut il modifier sur le script? si quelqu'un pourrait m'indiqué a peu près les modifs a faire ce serait sympa.

je vous le donne bien sur,:

<form method="POST" action="upload.php" enctype="multipart/form-data">
<!-- On limite le fichier à 100Ko -->
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
Fichier : <input type="file" name="avatar">
<input type="submit" name="envoyer" value="Envoyer le fichier">
</form>

et une page upload.php qui contient:

<?php
$dossier = 'upload/';
$fichier = basename($_FILES['avatar']['name']);
$taille_maxi = 100000;
$taille = filesize($_FILES['avatar']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['avatar']['name'], '.');
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
}
if($taille>$taille_maxi)
{
$erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
//On formate le nom du fichier ici...
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo 'Upload effectué avec succès !';
}
else //Sinon (la fonction renvoie FALSE).
{
echo 'Echec de l\'upload !';
}
}
else
{
echo $erreur;
}
?>

merci

14 réponses

Loic1983 Messages postés 98 Date d'inscription samedi 6 mars 2010 Statut Membre Dernière intervention 28 août 2011 3
24 mars 2010 à 20:58
J'ai fais quelques test mais rien ne marche...

Si je fait un deuxieme input sur ma page upload.html comme ca:

<form method="POST" action="upload.php" enctype="multipart/form-data">

<input type="hidden" name="MAX_FILE_SIZE" value="100000">
Fichier : <input type="file" name="avatar">

<input type="hidden" name="MAX_FILE_SIZE" value="100000">
Fichier : <input type="file" name="avatar">

<input type="submit" name="envoyer" value="Envoyer le fichier">
</form>

ca upload seulement une photo (la premiere)...
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 503
24 mars 2010 à 22:21
Tu dois changer le name.
Ou bien tu peux ajouter des crochets à la fin du name.
Exemple :
<input type="file" name="avatars[]" />
Ainsi, $_FILES['avatars'] sera un array à explorer avec foreach.
Donc $_FILES['avatars'][0] sera le premier fichier, $_FILES['avatars'][1] le second, ...
0
Loic1983 Messages postés 98 Date d'inscription samedi 6 mars 2010 Statut Membre Dernière intervention 28 août 2011 3
25 mars 2010 à 00:35
Ok merci.

Donc si je met

<input type="file" name="avatars[0]" />
<input type="file" name="avatars[1]" />

sur ma page upload.html, je rajoute sur ma page upload.php

$fichier = basename($_FILES['avatar[0]']['name']);
$fichier = basename($_FILES['avatar[1]']['name']);
(ainsi de suite jusqu'a 11 vu que je veu 12 upload)

J'ai juste? ou j'ai mal compris?
0
Loic1983 Messages postés 98 Date d'inscription samedi 6 mars 2010 Statut Membre Dernière intervention 28 août 2011 3
25 mars 2010 à 18:50
Ca marche pas... enfin c'est pas ce que tu m'a dit qui ne marche pas, c'est ce que j'ai fais!

J'ai du mal faire un truc.

Voici ce que j'ai fait:

(sur la page upload.html)

<form method="POST" action="upload.php" enctype="multipart/form-data">
<!-- On limite le fichier à 100Ko -->
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
Fichier : <input type="file" name="avatar[0]">
Fichier : <input type="file" name="avatar[1]">
<input type="submit" name="envoyer" value="Envoyer le fichier">
</form>

(et sur la page upload.php)

<?php
$dossier = 'upload/';
$fichier = basename($_FILES['avatar[0]']['name']);
$fichier = basename($_FILES['avatar[1]']['name']);
$taille_maxi = 100000;
$taille = filesize($_FILES['avatar']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['avatar']['name'], '.');
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
....

Peut tu m'expliqué plus clairement? (j'ai du mal avec le language technique!)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 503
25 mars 2010 à 18:53
C'est juste.
0
Loic1983 Messages postés 98 Date d'inscription samedi 6 mars 2010 Statut Membre Dernière intervention 28 août 2011 3
25 mars 2010 à 18:59
J'avais juste! j'y crois pas... je deviens un peu moin nul!

En tout cas ca ne marche pas, c'a m'affiche:

Notice: Undefined index: avatar[0] in C:\wamp\www\test upload\upload.php on line 3

Notice: Undefined index: avatar[1] in C:\wamp\www\test upload\upload.php on line 4

Warning: filesize() expects parameter 1 to be string, array given in C:\wamp\www\test upload\upload.php on line 6

Warning: strrchr() expects parameter 1 to be string, array given in C:\wamp\www\test upload\upload.php on line 8
Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...


Voit tu d'ou viens le problême?
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 503
25 mars 2010 à 19:07
J'ai mal regardé.
Déjà c'est "avatars" (avec "s") puis $_FILES['avatars'] est un array.
Donc : $_FILES['avatars'][0], $_FILES['avatars'][1], ...
0
Loic1983 Messages postés 98 Date d'inscription samedi 6 mars 2010 Statut Membre Dernière intervention 28 août 2011 3
Modifié par Loic1983 le 25/03/2010 à 20:42
j'ai fait ca:

upload.html:

<form method="POST" action="upload.php" enctype="multipart/form-data">
<!-- On limite le fichier à 100Ko -->
<input type="hidden" name="MAX_FILE_SIZE" value="300000">
Fichier : <input type="file" name="avatars[0]">
Fichier : <input type="file" name="avatars[1]">
<input type="submit" name="envoyer" value="Envoyer le fichier">
</form>

upload.php:

<?php
$dossier = 'upload/';
$fichier = basename($_FILES['avatars'][0]), ($_FILES['avatars'][1]);
$taille_maxi = 300000;
$taille = filesize($_FILES['avatar']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['avatar']['name'], '.');
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
}

et ca me dit:

Parse error: parse error in C:\wamp\www\test upload\upload.php on line 3

aparament j'ai encore merdé quelque pars...
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 503
25 mars 2010 à 21:40
$fichier = basename($_FILES['avatars'][0]), ($_FILES['avatars'][1]);
Tu inventes tes propres structures maintenant ?
Il faut faire comme ceci :
$fichier1 = basename($_FILES['avatars'][0]['name']);
$fichier2 = basename($_FILES['avatars'][1]['name']);
0
Loic1983 Messages postés 98 Date d'inscription samedi 6 mars 2010 Statut Membre Dernière intervention 28 août 2011 3
25 mars 2010 à 21:57
Effectivement j'avais fais n'importe quoi....

J'ai fais comme ca maintenant:

<?php
$dossier = 'upload/';
$fichier1 = basename($_FILES['avatars'][0] ['name']);
$fichier2 = basename($_FILES['avatars'][1] ['name']);
$taille_maxi = 300000;
$taille = filesize($_FILES['avatar']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['avatar']['name'], '.');
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
}

et ca m'affiche:

Notice: Undefined offset: 0 in C:\wamp\www\test upload\upload.php on line 3

Notice: Undefined offset: 1 in C:\wamp\www\test upload\upload.php on line 4

Notice: Undefined index: avatar in C:\wamp\www\test upload\upload.php on line 6

Notice: Undefined index: avatar in C:\wamp\www\test upload\upload.php on line 8
Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 503
25 mars 2010 à 22:07
Tu comptes à chaque fois ajouter des erreurs qui ne sont pas présentes dans le code précédents ?
Il ne faut pas d'espace entre [0] ou [1] et ['name']

$taille = filesize($_FILES['avatar']['tmp_name']
Tu n'as toujours pas compris que c'est "avatars" et pas "avatar" et que c'est un array (tableau) ?
$tailleFichier1 = $_FILES['avatars'][0]['size'];
$tailleFichier2 = $_FILES['avatars'][1]['size'];

Et pour récupérer l'extension :
$pathinfoFichier1 = pathinfo($fichier1);
$extensionFichier1 = $pathinfoFichier1['extension'];
0
Loic1983 Messages postés 98 Date d'inscription samedi 6 mars 2010 Statut Membre Dernière intervention 28 août 2011 3
25 mars 2010 à 22:56
Désolé je doit être un peu lourd... déja que je n'y comprend pas grand chose, alors si je me met a mettre des éspaces sans faire attention je ne m'en sortirai jamais...

Donc cette fois je nous ait pondu ca:

<?php
$dossier = 'upload/';
$fichier1 = basename($_FILES['avatars'][0]['name']);
$fichier2 = basename($_FILES['avatars'][1]['name']);
$taille_maxifichier1 = 300000;
$taille_maxifichier2 = 300000;
$tailleFichier1 = filesize($_FILES['avatars'][0]['tmp_name']);
$tailleFichier2 = filesize($_FILES['avatars'][1]['tmp_name']);
$extensionsFichier1 = array('.png', '.gif', '.jpg', '.jpeg');
$extensionsFichier2 = array('.png', '.gif', '.jpg', '.jpeg');
$extensionFichier1 = strrchr($_FILES['avatars'][0]['name'], '.');
$extensionFichier2 = strrchr($_FILES['avatars'][1]['name'], '.');
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
}
if($taille>$taille_maxi)
{
$erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
//On formate le nom du fichier ici...
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
if(move_uploaded_file($_FILES['avatars']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo 'Upload effectué avec succès !';
}
else //Sinon (la fonction renvoie FALSE).
{
echo 'Echec de l\'upload !';
}
}
else
{
echo $erreur;
}
?>

Les
$pathinfoFichier1 = pathinfo($fichier1);
et $extensionFichier1 = $pathinfoFichier1['extension'];
j'ai pas compris ou les mettres, j'ai un doute? a la place de
$extensionsFichier1 = array('.png', '.gif', '.jpg', '.jpeg');
et
$extensionFichier1 = strrchr($_FILES['avatars'][0]['name'], '.');

Je pense bien que je doit te dire de belles conneries et que ca doit être lourd pour toi mais franchement je ne le fais pas exprès, j'y comprend vraiment pas grand chose à ce code...
je pédale dans la semoule...
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 503
26 mars 2010 à 18:26
Voilà une autre solution :
<?php
if(isset($_FILES)) {

	$dossier = 'upload/';
	$extensions = array('png', 'gif', 'jpg', 'jpeg');
	$taille_max = 1000000; //1Mo

	$i = 0;
	foreach($_FILES as $avatar) {
	$i++;
		if($avatar['error'] == 0) {
			if($avatar['size'] <= $taille_max) {
				$pathinfo = pathinfo($avatar['name']);
				if(in_array($pathinfo['extension'], $extensions) && preg_match('#^image/#i',$avatar['type'])) {
					move_uploaded_file($avatar['tmp_name'], $dossier.basename($avatar['name']));
					echo 'Envoie du fichier n°'.$i.' réussi.';
				} else {
					echo 'Le fichier n°'.$i.' n\'a pas une extension valide (png, gif, jpg ou jpeg).<br/>';
				}
			} else {
				echo 'L\'avatar n°'.$i.' fait plus de '.$taille_max.' octets';
			}
		} else {
			echo 'Une erreur s\'est produite pour l\'avatar n°'.$i.'<br/>';
		}
	}
}
?> 

<form method="post" action="" enctype="multipart/form-data">
	<p>
		<input type="file" name="avatar1" /><br/>
		<input type="file" name="avatar2" /><br/>
		<input type="file" name="avatar3" /><br/>
		<input type="file" name="avatar4" /><br/>
		<input type="submit" />
	</p>
</form>
0
youkous2004 Messages postés 1 Date d'inscription dimanche 26 décembre 2010 Statut Membre Dernière intervention 26 décembre 2010
26 déc. 2010 à 23:57
Salut, j'ai eu le mm pb, et donc j'ai repris la solution ci dessus,

je me suis juste permis de changer la place de l'incrémentation $i++

if(isset($_FILES)) {

$dossier = '..\upload/';
$extensions = array('doc', 'txt', 'pdf');
$taille_max = 1000000; //1Mo

$i = 0;
foreach($_FILES as $avatar) {

if($avatar['error'] == 0) {
if($avatar['size'] <= $taille_max) {
$pathinfo = pathinfo($avatar['name']);
if(in_array($pathinfo['extension'], $extensions))
//&& preg_match('#^image/#i',$avatar['type']))
{
move_uploaded_file($avatar['tmp_name'], $dossier.basename($avatar['name']));
echo 'Envoie du fichier n°'.$i.' réussi.';
echo '***************Origine'.$avatar['tmp_name'];
echo '#################DESTINATION'.$dossier.basename($avatar['name']);
} else {
echo 'Le fichier n°'.$i.' n\'a pas une extension valide (doc,txt,pdf).<br/>';
}
} else {
echo 'L\'avatar n°'.$i.' fait plus de '.$taille_max.' octets';
}
} else {
echo 'Une erreur s\'est produite pour l\'avatar n°'.$i.'<br/>';
}
$i++;
}
}
MERCI avion-f16, tu me sauves la mise.....

mimosa
0