Bonjour,
Je cherche à uploader plusieurs fichiers via php. Chaque fichier a un dossier de destination différent.
Mon code est simple et se compose d'un formulaire ou chaque input dépend d'un liste de joueurs via ma base sql. La pas de souci le voici pour info
Par contre je n'arrive pas à insérer dans différents dossier via mon fichier upload. Mais dès qu'un joueur n'a pas de fichier à insérer cela bloque et tous les autres renvoie une erreur et plus aucun upload n'est possible
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 <form method="POST" action="upload.php" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="100000"> <table id="example1" > <?php mysql_connect("localhost", "table", "mdp"); mysql_select_db("BD"); mysql_set_charset( 'utf8' ); $retour = mysql_query('SELECT * FROM players ORDER BY Players ASC' ); while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les players. { ?> <tr> <td><?php echo ''. $donnees['Players'] . ''; ?></td> <td><?php echo '<input type="file" name="avatar' .$donnees['id'] . '">'; ?></td> </form> </tr> <?php } // Fin de la boucle qui liste les players. ?> </table> <input type="submit" name="envoyer" value="Envoyer le fichier">
Pour info voici le code du fichier upload.php
Lorsque j'upload pour les joueurs id 1,4 et 9 voila ce que cela donne : (dans ma base de données les id sont dans l'ordre 1,4,6,7,8,9,10,11...quelques entrées ont été supprimé par avant comme 2 et 3 qui ne font plus parties de la BD)
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
55
56
57
58
59
60
61
62 <?php /* exemple foreach 1 : la valeur seulement */ $db = mysql_connect("localhost", "table", "mdp") or die('Erreur de connexion '.mysql_error()); mysql_select_db("BD") or die('Erreur de sélection '.mysql_error()); $req = mysql_query('SELECT * FROM players'); while ($tabl = mysql_fetch_array($req)) { $a[] = array( 'id' => (addslashes($tabl['id']))//'type' => (addslashes($tabl['type'])) ); } echo '<pre>'; print_r($a); echo '</pre>'; // On oublie pas addslashes pour éviter qu'un guillemet provoque une erreur ?> <?php foreach($a as $b => $element) { $dossier = 'upload' .$element['id']. '/'; $fichier = basename($_FILES['avatar' .$element['id']. '']['name']); $taille_maxi = 100000; $taille = filesize($_FILES['avatar' .$element['id']. '']['tmp_name']); $extensions = array('.png', '.gif', '.jpg', '.jpeg'); $extension = strrchr($_FILES['avatar' .$element['id']. '']['name'], '.'); //Début des vérifications de sécurité... if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau { $erreur = 'Extension mauvaise pour ' .$element['id']. '<br>'; } if($taille>$taille_maxi) { $erreur = 'Le fichier est trop gros...<br>'; } 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' .$element['id']. '']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné... { echo 'Upload effectué avec succès !<br>'; } else //Sinon (la fonction renvoie FALSE). { echo 'Echec de l\'upload !<br>'; } } else { echo $erreur; } } ?>
Upload effectué avec succès ! //joueur 1
Upload effectué avec succès ! //joueur 4
Extension mauvaise pour 6
Extension mauvaise pour 7
Extension mauvaise pour 8
Extension mauvaise pour 8
Extension mauvaise pour 10
Extension mauvaise pour 11
etc....
Si quelqu'un a une idée j'ai déjà pas mal cherché et bidouiller sans arriver à rien. Je ne suis pas un expert et je ne vois pas vers quoi m'orienter.
MERCI par avance
Partager