Désolé de vous dérangez encore mais je viens d'entrer le code que vous m'avez dit et des erreurs apparaissent à l'écran.
Extrait du code :
Erreur : Warning: array_keys() expects parameter 1 to be array, boolean given in C:\wamp\www\Projet\upload.php on line 40
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?php if (isset($_FILES["fichier"])) { foreach ($_FILES["fichier"]["error"] as $key => $error) { $dossier = 'upload/'; $fichier = basename($_FILES['fichier']['name'][$key]); $taille_maxi = 20971520; $taille = filesize($_FILES['fichier']['tmp_name'][$key]); $extensions = array('png', 'gif', 'jpg', 'jpeg', 'mp3', 'doc', 'docx', 'avi', 'txt', 'pdf'); $extension = strtolower( substr( strrchr($_FILES['fichier']['name'][$key], '.') ,1) ); $upload_results = array(); //$extension = strrchr($_FILES['fichier']['name'][$key], '.'); //$move_upload = //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, doc, mp3 ou encore avi<br>'; } if($taille>$taille_maxi) { $erreur = 'Le fichier est trop volumineux'; } 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); $fichier = uniqId().$extension; $tmp_name = $_FILES["fichier"]["tmp_name"][$key]; $url = 'http://localhost/Projet/upload/'.$fichier; if($upload_results[$fichier] = move_uploaded_file($_FILES['fichier']['tmp_name'][$key], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné... { //echo '<p align=center> Upload effectué avec succès ! <br>'; echo count(array_keys($upload_results[$fichier], true, true)) . " fichiers envoyés avec succès <br>"; $com = 'Cliquez ici pour télécharger le fichier'; echo '<a href="'.$url.'">'.$com.'</a><br/>'; //Suppression fichier //unlink( "upload/$fichier" ); } else //Sinon (la fonction renvoie FALSE). { echo count(array_keys($upload_results[$fichier], false, true)) . " fichiers n'ont pas été envoyés"; echo 'Echec de l\'upload !'; } } else { echo $erreur; } } } ?>
Merci beaucoup de votre aide
Bonjour,
Dans tes deux array_keys($upload_results[$fichier], true, true), $upload_results[$fichier] n'est pas un tableau, essaye comme ceci : $upload_results.
Mais $upload_results[$fichier] a été déclaré comme un array en haut du fichier...
Lorsque j'enlève le [$fichier] le message apparait bien sans erreur mais il réapparait toujours 2,3 ou 4 fois selon le nombre d'uploads effectués..
Si vous pouvez m'aider pour que le message ne s'affiche que une fois même si l'utilisateur upload 3 fichiers
Merci de votre aide
Les deux lignes suivantespermettent d'afficher si les données dans ton tableau $upload_résults. Tu dois donc mettre ces deux lignes après l'upload de TOUS les fichiers.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 count(array_keys($upload_results, true, true)) count(array_keys($upload_results, false, true))
Les deux lignes :
ont bien été placées à la fin de la boucle mais la page upload.php m'affiche comme résultat lorsque j'upload 2 fichiers :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 echo count(array_keys($upload_results, true, true)) . " fichiers envoyés avec succès"; echo count(array_keys($upload_results, false, true)) . " fichiers n'ont pas été envoyés";
Cliquez ici pour télécharger le fichier
Cliquez ici pour télécharger le fichier
Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt, doc, mp3 ou encore avi
Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt, doc, mp3 ou encore avi
0 fichiers envoyés avec succès0 fichiers n'ont pas été envoyés
Les deux premières lignes sont donc juste, juste la dernière ligne qui est erronée..
Code :
Et je voudrais donc que même si 3 uploads sont effectués il n'y est qu'un message qui s'affiche pour l'utilisateur et que si les troisième ou quatrième uploads n'ont pas été réalisées, je souhaiterais que : Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt, doc, mp3 ou encore avi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?php if (isset($_FILES["fichier"])) { foreach ($_FILES["fichier"]["error"] as $key => $error) { $dossier = 'upload/'; $fichier = basename($_FILES['fichier']['name'][$key]); $taille_maxi = 20971520; $taille = filesize($_FILES['fichier']['tmp_name'][$key]); $extensions = array('.png', '.gif', '.jpg', '.jpeg', '.mp3', '.doc', '.docx', '.avi', '.txt', '.pdf'); $extension = strtolower(strrchr($_FILES['fichier']['name'][$key], '.')); $upload_results = array(); //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, doc, mp3 ou encore avi<br>'; } if($taille>$taille_maxi) { $erreur = 'Le fichier est trop volumineux'; } 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); $fichier = uniqId().$extension; $tmp_name = $_FILES["fichier"]["tmp_name"][$key]; $url = 'http://localhost/Projet/upload/'.$fichier; if($upload_results[$fichier] = move_uploaded_file($_FILES['fichier']['tmp_name'][$key], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné... { //echo '<p align=center> Upload effectué avec succès ! <br>'; $com = 'Cliquez ici pour télécharger le fichier'; echo '<a href="'.$url.'">'.$com.'</a><br/>'; //Suppression fichier //unlink( "upload/$fichier" ); } else //Sinon (la fonction renvoie FALSE). { echo 'Echec de l\'upload !'; } } else { echo $erreur; } } echo count(array_keys($upload_results, true, true)) . " fichiers envoyés avec succès"; echo count(array_keys($upload_results, false, true)) . " fichiers n'ont pas été envoyés"; } ?>
ne s'affiche pas.. Merci
Je ne comprends pas, tu fais une gestion d'erreur, mais tu ne veux pas afficher l'erreur à l'utilisateur ?
Si je veux que l'erreur d'extension s'afficher mais la je n'ai sélectionné que 2 fichiers avec un bon format et j'ai laissé deux input type="file" donc avec le bouton parcourir, vide. Et l'erreur s'affiche alors que ces deux inputs sont vides et la fonction count à la fin n'a pas l'air de marcher..
Tu ne testes pas si ton fichier existe avant de faire les autres vérifications.
Dans ta boucle foreach, tu peux faire un :
Si true => tu fais la suite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part if($_FILES['fichier']['tmp_name'][$key])
Si false => tu ne la fais pas.
Je regarde pour l'autre problème.
Avant les deux lignes suivantes :
Fais un print_r($upload_results); et dis moi le résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 echo count(array_keys($upload_results, true, true)) . " fichiers envoyés avec succès <br>"; echo count(array_keys($upload_results, false, true)) . " fichiers n'ont pas été envoyés";
Je l'ai déjà dit mais c'est quelque chose que tu devrais faire par toi même, on ne peut pas continuellement t'aider à faire ce genre de choses ni te donner la solution toute faite.
Si tu as des lacunes en PHP, je t'invite à consulter les tutoriaux proposés sur le forum comme celui ci.
Pour ton problème, tu devrais songer à améliorer le mécanisme de gestion des erreurs pour prendre en compte tous les aspects qu'on peut rencontrer (format invalide, fichier trop gros ou impossibilité de déplacer le fichier).
Tu peux faire ça avec des tableaux multi-dimentionnels (c'est à dire un tableau dont les cellules sont des tableaux) en utilisant les clés pour t'y retrouver.
Le résultat de print_r est : Array ( ) 0 fichiers envoyés avec succès0 fichiers n'ont pas été envoyés
Oui je lit actuellement des documentations php mais je ne peux pas aller plus vite que le temps..Désolé
Et merci de votre aide
Ce qui est normal vu qu'il ne passe pas sur le move_upladed_file.
C'est pour ça que tu dois étendre ton mécanisme d'erreur comme je l'ai mentionné plus haut afin que toutes les erreurs soient rapportées dans une seule structure.
Le mécanisme d'erreur est suffisant pour mon utilisation (extension, taille).. Pouvez-vous juste m'aider pour que le fichier n'affiche plus "Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt, doc, mp3 ou encore avi" alors qu'aucun fichier n'a été uploadé.
Merci
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager