Bonjour,
La classe en version 3.2 corrige une petite erreur dans le fichier d'exemple "Formulaire_inscription_simple.php".
Bonjour,
La classe en version 3.2 corrige une petite erreur dans le fichier d'exemple "Formulaire_inscription_simple.php".
Bonjour, ma question est simple, j'aimerais simplement savoir comment tester l'upload !
En gros :
SI l'upload a fonctionné ALORS insertion des données dans la base
SINON affichage du message d'erreur
Merci d'avance
Salut,
Tu peux récupérer le tableau de résultat des fichiers uploadés avec $tab_result = $up->Get_Tab_upload();Il y a un exemple dans le fichier "Formulaire_inscription_simple.php". Si tu fais un upload multiple fait un var_dump($tab_result); pour voir la structure du tableau et pouvoir lister les fichiers uploadés.
Après si tu veux des informations en temps réel, ou afficher la vignette image dès la sélection du fichier si le fichier est une image, ou encore pouvoir télécharger des très gros fichiers, tu peux utiliser directement ce module d'upload ajax.
Salut ,
petit problème qui a une idée ??
je me sert de la class pour uploader des images de fiche produit dans un backoffice (se sont des clients qui s'en servent au final).
le problème c'est que si ils utilisent des images ayant le même nom, cela écrase les précédentes, même avec le "Incr"
config :
je m'explique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 $up = new Telechargement('lmgco/tccadm/vehicule/photos/','envoyer','laphoto'); $extensions = array('jpg','jpeg'); $up->Set_Extensions_accepte ($extensions); $up->Set_Renomme_fichier('incr'); $up->Set_Redim ('200','150', array('','','min-')); $up->Set_Redim ('1024','768',array('','','max-')); $up->Set_Max_nombreFichers('10');
- Envoi fiche produit N°1 nomimage.jpg ->upload -> min-nomimage.jpg et max-nomimage.jpg
- Envoi fiche produit N°2 nomimage.jpg ->upload -> min-nomimage1.jpg et max-nomimage1.jpg
- Envoi fiche produit N°3 nomimage.jpg ->upload -> min-nomimage1.jpg et max-nomimage1.jpg
Lors de l’envoi de la fiche N° 3, les images de la fiche N°2 sont écrasé car il incrémente le nom de 1
Quelqu’un a une idée ???
Salut,
Je n'arrive pas à reproduire ton problème. Tu te sert de la dernière version en ligne ?
J'ai ouvert l'exemple "Redimensionnements_avec_suffixe_ou_prefixe.php" et recopié ton code. Si je charge trois fois consécutivement un fichier nommé "monimage.jpg", j'obtiens ceci dans le tableau des résultats :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 [0] => Array ( [nom_ini] => monimage.jpg [nom] => min-monimage.jpg [dim] => 200x150 ) [1] => Array ( [nom_ini] => monimage.jpg [nom] => max-monimage.jpg [dim] => 1000x750 )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 [0] => Array ( [nom_ini] => monimage.jpg [nom] => min-monimage_1.jpg [dim] => 200x150 ) [1] => Array ( [nom_ini] => monimage.jpg [nom] => max-monimage_1.jpg [dim] => 1000x750 )Donc c'est bien le résultat attendu... D'ailleurs je ne comprends pas que tu obtienne une incrémentation sans un underscore (comme dans mon résultat) puisque c'est le fonctionnement par défaut de la fonction de renommage.
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 [0] => Array ( [nom_ini] => monimage.jpg [nom] => min-monimage_2.jpg [dim] => 200x150 ) [1] => Array ( [nom_ini] => monimage.jpg [nom] => max-monimage_2.jpg [dim] => 1000x750 ) )
Fais le même test avec le même fichier d'exemple pour voir ce que ça donne.
Ou tu peux aussi utiliser la fonction de renommage sans argument ex: $up->Set_Renomme_fichier(); cela produira un renommage avec suffixe aléatoire unique.
Sinon pour info j'ai fais un autre module d'upload ici plus complet puisque il y a d'origine une prévisualisation des images avant upload, information d'upload en temps réel, et qui surpasse les configuration serveur concernant la taille et le nombre des fichiers. Il y a des exemples de redimensionnement mais aussi de recadrage avant upload. Bref c'est du web 2.0.
Après test je te confirme que lors de l'incrémentation il ne me met pas l'unserscore,
tu penses que le problème vient de la ???
Quel paramétres utilise tu pour tes test ?
Comme déjà dit c'est le fichier d'exemple 'Redimensionnements_avec_suffixe_ou_prefixe.php' dans lequel j'ai mis tes paramètres, soit :
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 <?php //Si on travaille en utf-8 (recommandé) header('Content-type: text/html; charset=UTF-8'); // Appel de la classe require('../Classe_Upload.php'); require('../adresses_dossiers.php'); $up = new Telechargement($dossier_photo,'form1','photo'); /* paramétrage extensions autorisées */ $extensions = array('jpg','jpeg'); $up->Set_Extensions_accepte ($extensions); // Renommage incrémentiel en cas de doublons (le contrôle se fera sur nomdufichier_min.jpg) $up->Set_Renomme_fichier('incr'); // redimensionnements $up->Set_Redim ('200','150', array('','','min-')); $up->Set_Redim ('1024','768',array('','','max-')); $up->Upload('reload'); $messages_upload = $up->Get_Tab_message(); $messages_upload_html = null; foreach ($messages_upload as $num) foreach ($num as $value) $messages_upload_html .= '<p>- '.htmlspecialchars($value).'</p>'; $tableau_resultat = $up->Get_Tab_result(); ?> <!doctype html> <html lang="fr"> <head> <meta charset="UTF-8" /> <title>Redimentionnements avec suffixes ou préfixes</title> <script type="text/javascript"> <!-- function Verif_attente(id_attente) { var id_attente = document.getElementById(id_attente); if (id_attente) { id_attente.innerHTML = 'Patientez...'; id_attente.style.fontWeight="bold"; id_attente.style.fontSize="1.5em"; } } --> </script> <style type="text/css"> body {font-family:Arial, Helvetica, sans-serif; font-size:12px;} </style> </head> <body> <form enctype = "multipart/form-data" action = "#" method = "post" onsubmit = "Verif_attente('message_tele')"> <input name = "photo[]" type = "file" multiple = "multiple" size = "70" /><br /> <input type="submit" value="Envoyer les images" id="envoyer" name = "form1"><br /> </form> <div id = "message_tele" style="margin-top:20px;"> <?= $messages_upload_html; ?> </div> <div style="margin-top:50px"> <?php if(!empty($tableau_resultat)) { echo 'tableau des résultats :'; echo '<pre>'; print_r($tableau_resultat); echo '</pre>'; } ?> </div> </body> </html>
Bon alors ça fonctionne puisque tu me poses maintenant une autre question par MP...?
Donc concernant ta dernière question pour récupérer le nom des fichiers uploadés, tu vois que le tableau des résultat est à trois dimensions. Il te faut donc lister ces trois dimensions.
Par exemple dans le code php juste après la ligne $tableau_resultat = $up->Get_Tab_result(); tu peux faire :
Code php : 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 //... $tableau_resultat = $up->Get_Tab_result(); $fichiers_uploads = array(); if(!empty($tableau_resultat['resultat'])) { foreach ($tableau_resultat['resultat'] as $img) if(is_array($img)) foreach ($img as $dossiers) if(is_array($dossiers)) foreach ($dossiers as $img_upload) if(isset($img_upload['nom'])) $fichiers_uploads[] = $img_upload['nom']; } var_dump($fichiers_uploads);
Enfin fais attention car je vois que tu mets un nombre de fichiers maximum égal à 10. Hors si le visiteur veut uploader des grosses images de 8Mo chacune par exemple, on va arriver à un total de 80Mo et ton serveur risque de te jeter car aujourd'hui sur un mutualisé les limites hautes sont plutôt vers 64Mo et vers 4 à 12Mo chez d'autres hébergeurs pour les limites basses.
Je te le redis car il ne faut pas te tromper d'outil. Celui-ci est très rapide à mettre en place mais il ne pourra pas surpasser les limitations serveur. Il est donc plutôt réservé à des "petits" besoins.
Pour des gros besoins et pouvoir surpasser ces limites serveur ou pour avoir des informations en temps réel il existe cet autre module d'upload.
Bon alors pour repondre,
j'ai essayé mais cela ne fonctionne toujours pas pour moi.
Le fichier est écrasé comme expliqué précédemment.
j'utilise donc la fonction $up->Set_Renomme_fichier(); sans paramètre ce qui permet d'avoir un nom aléatoire.
ensuite pour ton code pour récupérer les noms, cela a l'air de fonctionner, cela me ressort
la j'ai un peu de mal pourtant ca y est presque je pense.array(4) { [0]=> string(15) "min-00aston.jpg" [1]=> string(15) "max-00aston.jpg" [2]=> string(17) "min-00bugatti.jpg" [3]=> string(17) "max-00bugatti.jpg" }
j'ai besoin que de min-00aston.jpg et min-00bugatti.jpg
comment je fais pour insérer ce résultat dans ma BDD ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $sql="INSERT INTO catalogue (ref,categorie,photo1,photo2) VALUES ('$theref','$thecategorie', ??????? )"; $req= $mysqli->query($sql) or die ('Erreur SQL !<br />'.$sql.'<br />'.$mysqli->error);
Est-ce que tu es bien certain que tu utilises la dernière version 3.2 ?
Peut-être tu as eu un pb lors du dézippage, ça peut arriver. Alors recommence.
Encore une fois je viens de recharger la version 3.2 depuis le site, je l'ai mise sur mon serveur local et je l'ai testée avec le fichier "Redimensionnements_avec_suffixe_ou_prefixe.php" que j'ai modifié avec tes valeurs comme ceci (je te redonne une dernière fois le code) :
... Tout fonctionne correctement, y compris l'incrémentation si je charge plusieurs fois de suite une même série d'images.
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 <?php //Si on travaille en utf-8 (recommandé) header('Content-type: text/html; charset=UTF-8'); // Appel de la classe require('../Classe_Upload.php'); require('../adresses_dossiers.php'); $up = new Telechargement($dossier_photo,'form1','photo'); /* paramétrage extensions autorisées */ $extensions = array('jpg','jpeg'); $up->Set_Extensions_accepte ($extensions); // redimensionnements $up->Set_Redim ('200','150', array('','','min-')); $up->Set_Redim ('1000','800',array('','','max-')); // Renommage incrémentiel en cas de doublons (le contrôle se fera sur nomdufichier_min.jpg) $up->Set_Renomme_fichier('incr'); $up->Upload('reload'); $messages_upload = $up->Get_Tab_message(); $messages_upload_html = null; foreach ($messages_upload as $num) foreach ($num as $value) $messages_upload_html .= '<p>- '.htmlspecialchars($value).'</p>'; $tableau_resultat = $up->Get_Tab_result(); $fichiers_uploads = array(); if(!empty($tableau_resultat['resultat'])) { foreach ($tableau_resultat['resultat'] as $img) if(is_array($img)) foreach ($img as $dossiers) if(is_array($dossiers)) foreach ($dossiers as $img_upload) if(isset($img_upload['nom'])) $fichiers_uploads[] = $img_upload['nom']; } var_dump($fichiers_uploads); ?> <!doctype html> <html lang="fr"> <head> <meta charset="UTF-8" /> <title>Redimentionnements avec suffixes ou préfixes</title> <script type="text/javascript"> <!-- function Verif_attente(id_attente) { var id_attente = document.getElementById(id_attente); if (id_attente) { id_attente.innerHTML = 'Patientez...'; id_attente.style.fontWeight="bold"; id_attente.style.fontSize="1.5em"; } } --> </script> <style type="text/css"> body {font-family:Arial, Helvetica, sans-serif; font-size:12px;} </style> </head> <body> <form enctype = "multipart/form-data" action = "#" method = "post" onsubmit = "Verif_attente('message_tele')"> <input name = "photo[]" type = "file" multiple = "multiple" size = "70" /><br /> <input type="submit" value="Envoyer les images" id="envoyer" name = "form1"><br /> </form> <div id = "message_tele" style="margin-top:20px;"> <?= $messages_upload_html; ?> </div> </body> </html>
Ou alors tu utilises une version php serveur obsolète ? Laquelle utilises-tu ?
Pour ce qui concerne ta requête, ouvre un nouveau sujet dans le forum php. Ce n'est pas ici le sujet. En plus je vois que tu veux faire tenir 4 images dans deux champs photos ? Faut pas mettre des champs photos dans ta table "catalogue" mais créer une table photo qui sera en relation (jointure) avec ta table catalogue si tu veux un minimum de souplesse.
Donc bon il est probable que le schéma de tes tables soit à revoir. Ouvres un nouveau sujet qui pourrait être : "requête pour insertion de photo dans une table produits" dans le forum php !
re,
je te confirme j'ai bien la dernière version en court. 3.2.
je fait les tests en semi/local sur un Nas Synology en php 5.6.17
et j'utilise l'url rewritting (je sais pas si cela joue) mais l'incrémentation ne fonctionne toujours pas avec l'underscrore.
je vais essayer sur mon serveur dédié dés que j'ai un peux de temps.
j'essayerais également ta version ajax.
Merci d'avance de ton aide
Cdt
La fonction qui renomme les fichier est dans le fichier "Classe_Upload.php" (à la racine du dossier). Elle se nomme "public function Rename_fich" et voici son contenu :
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 public function Rename_fich($adresse_fichier, $incr = false, $unix = false, $stop = 0) { if (is_file($adresse_fichier)) { $info = pathinfo($adresse_fichier); $extension = isset($info['extension']) && $info['extension'] != '' ? '.'.$info['extension'] : null; $dossier = $info['dirname']; $filename = $info['filename']; if (trim($incr) != false && $stop < 90) { $file = addcslashes($filename,'.'); $ext = isset($extension) ? addcslashes($extension,'.') : null; $match = $unix ? '#^'.$file.'_[0-9]+'.$ext.'$#' : '#^'.$file.'_[0-9]+'.$ext.'$#i'; $tab_identique = array(); $files = new RegexIterator(new DirectoryIterator($dossier),$match); foreach ($files as $fileinfo) $tab_identique[] = $fileinfo->getFilename(); natsort($tab_identique); $dernier = array_pop($tab_identique); unset($tab_identique); $dernier = isset($dernier)? pathinfo($dernier, PATHINFO_FILENAME) : ''; $file = preg_replace_callback('#([0-9]+$)#', create_function('$matches','return $matches[1]+1;'), $dernier, '1', $count); $filename = !empty($count)? $file : $filename.'_1'; } else { $filename .= '_'.uniqid(); } $filename = isset($extension) ? $filename.$extension : $filename; $adresse = $dossier.'/'.$filename; if (!is_file($adresse)) return $adresse; else return $this->Rename_fich($adresse_fichier, $incr, $unix, ++$stop); } else { return $adresse_fichier; } }
Re, c'est encore le boulet
juste une petite question cette fois ci concernant les messages après l'upload
j'utilise
est il possible de récupérer que les messages d'erreurs uniquement ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $messages = $up->Get_Tab_message(); foreach ($messages as $num) { foreach ($num as $value) echo htmlspecialchars($value).'<br />'; }
et pas "redimensionné en ... optimisé en etc..."
Merci
Cdt
Salut,
Oui c'est possible.
T'as pas dû bien chercher quand même puisque c'est indiqué dans l'exemple "Basique.php" (que tout le monde devrait normalement commencer par consulter en premier).
En plus je l'ai mise en commentaire dans le code source de ce même fichier. Par ailleurs cette fonction Set_Message_court() est également utilisée dans l'exemple "Formulaire_inscription_complet_affichage_vignette.php", et on la retrouve aussi documentée dans le mode d'emploi au paragraphe H/ TRADUCTION OU PERSONNALISATION DES MESSAGES D'INFORMATIONS ET DE RESULTATS, chapitre "Autres fonctions de personnalisation des messages"...Il existe de nombreuses possibilités pour paramétrer le retour du tableau des messages obtenu par Get_Tab_message(). Notamment vous pourriez compléter ce code par l'utilisation de Set_Message_court() qui permet de retourner un message de votre choix passé en paramètre à cette fonction, ou uniquement les messages d'erreurs si cette fonction est utilisée sans paramètre.
Ok autant pour moi,
j'avais bien lu l'info mais j'avais placé l'instruction après l'upload
Merci
Cdt
Bonjour
Dommage que le fichier ne soit plus disponible en téléchargement.
Bonne journée
Cette discussion concernait une version différente d'upload (uniquement en Php) qui n'est plus en ligne depuis de nombreuses années, d'ailleurs je ne me souvenais plus de ce fil. La nouvelle version (php/ajax) est beaucoup plus puissante et complète, et elle est fournie avec de nombreux exemples prêts à l'emploi.
L'adresse pour télécharger le module d'upload est ici
Et l'adresse du topic de présentation/discussion/aide est là.
Merci de ne plus rien poster dans cette discussion.
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