Bonjour,

J'ai un gros soucis. En effet j'utilise une classe upload php trouvée sur le net :

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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
<?php
/**
 * @version   2.2a, dernière révision le 17 mars 2008
 * @author    Olivier VEUJOZ
 * 
 * Modifications version 2.2a
 *   - Correction du paramètrage par défaut de la propriété $Permission (string => integer)
 * 
 * Modifications version 2.2 :
 *   - Ajout des derniers messages d'erreurs retournés par PHP (UPLOAD_ERR_EXTENSION, UPLOAD_ERR_CANT_WRITE, UPLOAD_ERR_NO_TMP_DIR)
 *   - Ajout de la propriété 'octets' dans le tableau des informations sur un fichier (taille du fichier en octets)
 *   - Ajout du test sur la présence du tableau $_FILES
 *   - Modifications mineures sur la logique de la classe (fonction checkUpload() et sur la fonction de nettoyage du nom de fichier, qui supprime tout caractère de fichier Windows invalide.
 * 
 * SECURITY CONSIDERATION: If you are saving all uploaded files to a directory accesible with an URL, remember to filter files not only by mime-type (e.g. image/gif), but also by extension. The mime-type is reported by the client, if you trust him, he can upload a php file as an image and then request it, executing malicious code. 
 * I hope I am not giving hackers a good idea anymore than I am giving it to good-intended developers. Cheers.
 * Some restrictive firewalls may not let file uploads happen via a form with enctype="multipart/form-data".
 * We were having problems with an upload script hanging (not returning content) when a file was uploaded through a remote office firewall. Removing the enctype parameter of the form allowed the form submit to happen but then broke the file upload capability. Everything but the file came through. Using a dial-in or other Internet connection (bypassing the bad firewall) allowed everything to function correctly.
 * So if your upload script does not respond when uploading a file, it may be a firewall issue.
 * 
 * Compatibilité :
 *  - compatible safe_mode
 *  - compatible open_basedir pour peu que les droits sur le répertoire temporaire d'upload soient alloués
 *  - Version minimum de php : 5.x
 * 
 * Par défaut :
 *  - autorise tout type de fichier
 *  - autorise les fichier allant jusqu'à la taille maximale spécifiée dans le php.ini
 *  - envoie le(s) fichier(s) dans le répertoire de la classe
 *  - n'affiche qu'un champ de type file
 *  - permet de laisser les champs de fichiers vides
 *  - écrase le fichier s'il existe déjà
 *  - n'exécute aucune vérification
 *  - utilise les entêtes renvoyés par le navigateur pour vérifier le type mime.
 * 
 * Notes :
 *  - le chemin de destination peut être défini en absolu ou en relatif
 *  - set_time_limit n'a pas d'effet lorsque PHP fonctionne en mode safe mode . Il n'y a pas d'autre solution que de changer de mode, ou de modifier la durée maximale d'exécution dans le php.ini
 *  - Intégration depuis la version 2.0b des fonctions Mimetype de php (http://fr3.php.net/manual/fr/ref.mime-magic.php).
 * 
 * Notes sur l'intégration des fonctions MimeType de PHP:
 *      - PHP doit être compilé avec l'option --enable-mime-magic. Sous Windows, il suffit de s'assurer de l'existence de la dll php_mime_magic.dll et de l'activer dans le php.ini
 *      - Déclarer ensuite une nouvelle section dans votre php.ini et renseignez là comme suit :
 *          [MIME_MAGIC]
 *          ;PHP_INI_SYSTEM Disponible depuis PHP 5.0.0. 
 *          mime_magic.debug = 0
 *          ;PHP_INI_SYSTEM Disponible depuis PHP 4.3.0. 
 *          mime_magic.magicfile = "$PHP_INSTALL_DIR\magic.mime" où $PHP_INSTALL_DIR fait référence à  votre chemin jusqu'à l'exécutable PHP
 *      - Le fichier magic.mime n'est pas fourni avec PHP. Il est téléchargeable http://gnuwin32.sourceforge.net/packages/file.htm (dans l'arborescence \share\file\)
 *        Il est recommandé de le copier à la racine de l'exécutable PHP. (étape nécessaire sous windows, pas sûr pour les autres OS)
 * 
 * Notes sur l'installation de la librairie PECL plateforme windows
 *      - Télécharger la collection de modules PECL depuis la page de téléchargement général de PHP en adéquation avec la version de PHP utilisée ("Collection of PECL modules", http://www.php.net/downloads.php)
 *      - Installez la dll "php_fileinfo.dll" dans le répertoire classique d'installation de php
 *      - Ajoutez la ligne suivante dans votre php.ini
 *          [extension=php_fileinfo.dll]
 *      - Assurez-vous que la dll dispose des permissions suffisantes pour être exécutée par le serveur web.
 *      - Pour éviter des erreurs à la limite du compréhensible sous windows, le fichier "magic" est livré avec la classe upload. Il est issu de l'installation d'Apache 2.0.59.
 */
 
// Déprécié, gardé pour compatibilité descendante. Utiliser le booléen renvoyé par la méthode Execute() en lieu et place.
global $UploadError;
 
class Upload {
 
    // constantes méthode de vérification des entêtes 
    const CST_UPL_HEADER_BROWSER  = 0; // Navigateur
    const CST_UPL_HEADER_MIMETYPE = 1; // librairie mime_type
    const CST_UPL_HEADER_FILEINFO = 2; // librairie fileinfo (PECL)
 
    // constantes méthode d'écriture des fichiers
    const CST_UPL_WRITE_ERASE  = 0;
    const CST_UPL_WRITE_COPY   = 1;
    const CST_UPL_WRITE_IGNORE = 2;
 
    // constantes types d'erreurs 1 : appairage avec les erreurs retournées par PHP
    const CST_UPL_ERR_NONE                  = UPLOAD_ERR_OK;            // Aucune erreur, le téléchargement est valide
    const CST_UPL_ERR_EXCEED_INI_FILESIZE   = UPLOAD_ERR_INI_SIZE;      // la taille du fichier excède la directive max_file_size (php.ini)
    const CST_UPL_ERR_EXCEED_FORM_FILESIZE  = UPLOAD_ERR_FORM_SIZE;     // la taille du fichier excède la directive max_file_size (formulaire)
    const CST_UPL_ERR_CORRUPT_FILE          = UPLOAD_ERR_PARTIAL;       // le fichier n'a pas été chargé complètement
    const CST_UPL_ERR_EMPTY_FILE            = UPLOAD_ERR_NO_FILE;       // champ du formulaire vide
    const CST_UPL_ERR_NO_TMP_DIR            = UPLOAD_ERR_NO_TMP_DIR;    // Un dossier temporaire est manquant. Introduit en PHP 4.3.10 et PHP 5.0.3.
    const CST_UPL_ERR_CANT_WRITE            = UPLOAD_ERR_CANT_WRITE;    // Échec de l'écriture du fichier sur le disque. Introduit en PHP 5.1.0.
    const CST_UPL_ERR_EXTENSION             = UPLOAD_ERR_EXTENSION;     // L'envoi de fichier est arrêté par l'extension. Introduit en PHP 5.2.0.
 
    // constantes types d'erreurs 2 : erreurs supplémentaires détectées par la classe
    const CST_UPL_ERR_UNSAFE_FILE           = 20; // fichier potentiellement dangereux
    const CST_UPL_ERR_WRONG_MIMETYPE        = 21; // le fichier n'est pas conforme à la liste des entêtes autorisés
    const CST_UPL_ERR_WRONG_EXTENSION       = 22; // le fichier n'est pas conforme à la liste des extensions autorisées
    const CST_UPL_ERR_IMG_EXCEED_MAX_WIDTH  = 23; // largeur max de l'image excède celle autorisée
    const CST_UPL_ERR_IMG_EXCEED_MAX_HEIGHT = 24; // hauteur max de l'image excède celle autorisée
    const CST_UPL_ERR_IMG_EXCEED_MIN_WIDTH  = 25; // largeur min de l'image excède celle autorisée
    const CST_UPL_ERR_IMG_EXCEED_MIN_HEIGHT = 26; // hauteur min de l'image excède celle autorisée
 
    const CST_UPL_EXT_FILEINFO  = 'fileinfo';
    const CST_UPL_EXT_MIMEMAGIC = 'mime_magic';
    const CST_UPL_PHP_VERSION   = '5.0.4';
 
 
    /**
     * Etant donné qu'entre les différents navigateurs les informations sur les entêtes de fichiers peuvent différer, 
     * il est dorénavant possible de laisser PHP s'occuper du type MIME. L'ajout de cette fonctionnalité nécessite 
     * l'activation de la librairie mime_magic ou fileinfo.
     * 
     * Positionné à self::CST_UPL_HEADER_BROWSER, la vérification des entêtes de fichiers se fera comme auparavant, cad via les informations retournées par le navigateur.
     * Positionné à self::CST_UPL_HEADER_MIMETYPE, la vérification est basé sur les fonctions Mimetype de php (extension mime_magic)
     * Positionné à self::CST_UPL_HEADER_FILEINFO, la vérification est basé sur la classe fileinfo() (librairie PECL)
     * 
     * @var integer
     */
    public $phpDetectMimeType = self::CST_UPL_HEADER_BROWSER;
 
 
    /**
     * Initialisée dynamiquement dans la fonction loadPECLInfoLib() suivant le paramétrage
     * de la propriété $phpDetectMimeType.
     *
     * @var string $path . $filename
     */
    public $magicfile = '';
 
 
    /**
     * Par défaut la classe génère des champs de formulaire à la norme x-html.
     * 
     * @var boolean
     */
    public $xhtml = true;
 
 
    /**
     * Taille maximale exprimée en kilo-octets pour l'upload d'un fichier.
     * Valeur par défaut : celle configurée dans le php.ini (cf. constructeur).
     * 
     * @var integer
     */
    public $MaxFilesize = null;
 
 
    /**
     * Largeur maximum d'une image exprimée en pixel.
     * 
     * @var int
     */
    public $ImgMaxWidth = null;
 
 
    /**
     * Hauteur maximum d'une image exprimée en pixel.
     * 
     * @var int
     */
    public $ImgMaxHeight = null;
 
 
    /**
     * Largeur minimum d'une image exprimée en pixel.
     * 
     * @var int
     */
    public $ImgMinWidth = null;
 
 
    /**
     * Hauteur minimum d'une image exprimée en pixel.
     * 
     * @var int
     */
    public $ImgMinHeight = null;
 
 
    /**
     * Répertoire de destination dans lequel vont être chargés les fichiers.
     * Accepte les chemins relatifs et absolus.
     * 
     * @var string
     */
    public $DirUpload = '';
 
 
    /**
     * Nombre de champs de type file que la classe devra gérer.
     *
     * @var integer 
     */
    public $Fields = 1;
 
 
    /**
     * Paramètres à ajouter aux champ de type file (ex: balise style, évenements JS...)
     * 
     * @var string
     */
    public $FieldOptions = '';
 
 
    /**
     * Définit si les champs sont obligatoires ou non.
     * 
     * @var boolean
     */
    public $Required = false;
 
 
    /**
     * Politique de sécurité max : ignore tous les fichiers exécutables / interprétable.
     * Déprécié. Gardé pour compatibilité descendante.
     * 
     * @var boolean
     */
    public $SecurityMax = false;
 
 
    /**
     * Permet de préciser un nom pour le fichier à uploader.
     * Peut être utilisé conjointement avec les propriétés $Suffixe / $Prefixe
     * 
     * @var string
     */
    public $Filename = '';
 
 
    /**
     * Préfixe pour le nom du fichier sur le serveur.
     * 
     * @var string
     */
    public $Prefixe = '';
 
 
    /**
     * Suffixe pour le nom du fichier sur le serveur.
     * 
     * @var string
     */
    public $Suffixe = '';
 
 
    /**
     * Méthode à employer pour l'écriture des fichiers si un fichier de même nom est présent dans le répertoire :
     * self::CST_UPL_WRITE_ERASE  : le fichier du serveur est écrasé par le nouveau fichier.
     * self::CST_UPL_WRITE_COPY   : le nouveau fichier est uploadé mais précédé de la mention 'copie_de_'.
     * self::CST_UPL_WRITE_IGNORE : le nouveau fichier est ignoré.
     * 
     * @var integer
     */
    public $WriteMode = self::CST_UPL_WRITE_ERASE;
 
 
    /**
     * Chaine de caractères représentant les entêtes de fichiers autorisés (mime-type).
     * Les entêtes doivent être séparées par des points virgules.
     * <code>$Upload->MimeType = 'image/gif;image/pjpeg';</code>
     * 
     * @var string
     */
    public $MimeType = '';
 
 
    /**
     * Positionné à [true], une erreur de configuration du composant sera envoyé en sortie écran et bloquera le script
     * en cours d'exécution.
     * 
     * @var boolean
     */
    public $TrackError = true;
 
 
    /** 
     * Réaffection des droits utilisateur après écriture du document sur le serveur.
     * 
     * @var string
     */
    public $Permission = 0666;
 
 
    /**
     * Liste des extensions autorisées séparées par un point virgule.
     * <code>$Upload->Extension = ".dat;.csv;.txt";</code>
     * 
     * @var string
     */
    public $Extension = '';
 
 
    /**
     * En remplacement de la variable globale $UploadError.
     *
     * @var boolean.
     */
    private $uplSuccess = true;
 
 
    /**
     * Tableau des erreurs rencontrés durant l'upload.
     *
     * @var array
     */
    private $ArrOfError = array();
 
 
    /**
     * Propriétés temporaires utilisées lors du parcours de la variable globale $_FILES
     */
    private $_field = 0;                // position du champ dans le formulaire à partir de 1 (0 étant réservé au champ max_file_size)
    private $_size  = 0;                // poids du fichier
    private $_type  = '';               // type mime renvoyé par le navigateur
    private $_name  = '';               // nom du fichier
    private $_temp  = '';               // emplacement temporaire
    private $_ext   = '';               // extension du fichier
    private $_error = UPLOAD_ERR_OK;    // Erreur upload retournée par PHP
 
 
    /**
     * Tableaux des messages d'erreurs sur l'échec d'une upload.
     *
     * @see setError()
     * @var array
     */
    private $errorMsg = array(
        self::CST_UPL_ERR_EXCEED_INI_FILESIZE   => 'Le document [%FILENAME%] excède la directive [upload_max_filesize] du fichier de configuration [php.ini].',
        self::CST_UPL_ERR_EXCEED_FORM_FILESIZE  => 'Le document [%FILENAME%] excède la directive MAX_FILE_SIZE spécifiée dans le formulaire.',
        self::CST_UPL_ERR_CORRUPT_FILE          => 'Document [%FILENAME%] corrompu.',
        self::CST_UPL_ERR_EMPTY_FILE            => 'Le champ [parcourir] du formulaire d\'upload n\'a pas été renseigné.',
        self::CST_UPL_ERR_NO_TMP_DIR            => 'Un dossier temporaire est manquant.',
        self::CST_UPL_ERR_CANT_WRITE            => 'Échec de l\'écriture du fichier [%FILENAME%] sur le disque.',
        self::CST_UPL_ERR_EXTENSION             => 'L\'envoi du fichier [%FILENAME%] est arrêté par l\'extension.',
        self::CST_UPL_ERR_UNSAFE_FILE           => 'Document [%FILENAME%] potentiellement dangereux.',
        self::CST_UPL_ERR_WRONG_MIMETYPE        => 'Le document [%FILENAME%] n\'est pas conforme à la liste des entêtes autorisés.',
        self::CST_UPL_ERR_WRONG_EXTENSION       => 'Le document [%FILENAME%] n\'est pas conforme à la liste des extensions autorisées.',
        self::CST_UPL_ERR_IMG_EXCEED_MAX_WIDTH  => 'La largeur de l\'image [%FILENAME%] excède celle autorisée.',
        self::CST_UPL_ERR_IMG_EXCEED_MAX_HEIGHT => 'La hauteur de l\'image [%FILENAME%] excède celle autorisée.',
        self::CST_UPL_ERR_IMG_EXCEED_MIN_WIDTH  => 'La largeur de l\'image [%FILENAME%] est inférieure à celle autorisée.',
        self::CST_UPL_ERR_IMG_EXCEED_MIN_HEIGHT => 'La hauteur de l\'image [%FILENAME%] est inférieure à celle autorisée.'
    );
 
 
 
    /**
     * Constructeur.
     */
    public function __construct() {
        $this->MaxFilesize = ereg_replace('M', '', @ini_get('upload_max_filesize')) * 1024;
    }
 
 
 
    /**
     * Lance l'initialisation de la classe pour la génération du formulaire
     * 
     * @access public
     */
    public function InitForm() {
        $this->SetMaxFilesize();
        $this->CreateFields();
    }
 
 
 
    /**
     * Retourne le tableau des erreurs survenues durant l'upload
     *
     * <code>
     * if (!$Upload->Execute()) {
     *     print_r($Upload-> GetError);
     * }
     * </code>
     *
     * @access public
     * @param integer $num_field numéro du champ 'file' sur lequel on souhaite récupérer l'erreur
     * @return array
     */
    public function GetError($num_field='') {
        return (Empty($num_field)) ? $this->ArrOfError : $this->ArrOfError[$num_field];
    }
 
 
 
    /**
     * Retourne le tableau contenant les informations sur les fichiers uploadés
     *
     * <code>
     * if (!$Upload->Execute()) {
     *     print_r($Upload->GetSummary());
     * }
     * </code>
     *
     * @access public
     * @param integer $num_field    numéro du champ 'file' sur lequel on souhaite récupérer les informations
     * @return array                tableau des infos fichiers
     */
    public function GetSummary($num_field = null) {
 
        if (!isSet($num_field)) {
            $result = (isSet($this->Infos)) ? $this->Infos : false;
        }
        else {
            $result = (isSet($this->Infos[$num_field])) ? $this->Infos[$num_field] : false;
        }
 
        return $result;
    }
 
 
 
    /**
     * Lance les différents traitements nécessaires à l'upload
     * 
     * @return boolean
     */
    public function Execute(){
        @set_time_limit(0);
 
        $this->CheckConfig();
        $this->CheckUpload();
 
        return $this->uplSuccess;
    }
 
 
 
    /**
     * Permet de modifier le message d'erreur en cas d'échec d'une upload.
     * Le libellé peut contenir le mot clé %FILENAME%.
     * 
     * @var int    $code_erreur
     * @var string $libelle
     * @see AddError()
     * @return boolean
     */
    public function setErrorMsg($code_erreur, $libelle) {
 
        if (!isSet($this->errorMsg[$code_erreur])) {
            $this->Error('le paramètre $code_erreur passé à la méthode [setErrorMsg] est erroné.');
            return false;
        }
 
        $this->errorMsg[$code_erreur] = $libelle;
 
        return true;
    }
 
 
 
    /**
     * Méthode de définition des propriétés sur les dimensions des images.
     * La vérification sur le bon format est géré dans la méthode CheckImgPossibility().
     *
     * @param integer $maxWidth
     * @param integer $minWidth
     * @param integer $maxHeight
     * @param integer $minHeight
     */
    public function SetImgDim($maxWidth = null, $minWidth = null, $maxHeight = null, $minHeight = null) {
        $this->ImgMaxHeight = $maxHeight;
        $this->ImgMaxWidth  = $maxWidth;
        $this->ImgMinHeight = $minHeight;
        $this->ImgMinWidth  = $minWidth;
    }
 
 
 
    /**
     * Méthode lançant les vérifications sur les fichiers.
     * Initialisation de la propriété $uplSuccess à false si erreur, lance la 
     * méthode d'écriture toutes les vérifications sont ok.
     * @access private
     */
    private function CheckUpload() {
 
        if (!isSet($_FILES['userfile']['tmp_name'])) {
            $this->Error('Le tableau contenant les informations des fichiers téléchargés est vide.' . PHP_EOL .
                         'Si vous avez renseigné un champ de fichier, il est probable que la taille de ce dernier excède les capacités de chargement du serveur.');
        }
 
        $nbFiles = count($_FILES['userfile']['tmp_name']);
 
        // Parcours des fichiers à uploader
        for ($i=0; $i < $nbFiles; $i++)  {
 
            // Récup des particularité du fichier dans les propriétés temporaires
            $this->_field++;
            $this->_size  = $_FILES['userfile']['size'][$i];
            $this->_type  = $_FILES['userfile']['type'][$i];
            $this->_name  = $_FILES['userfile']['name'][$i];
            $this->_temp  = $_FILES['userfile']['tmp_name'][$i];
            $this->_ext   = strtolower(substr($this->_name, strrpos($this->_name, '.')));
            $this->_error = $_FILES['userfile']['error'][$i];
 
            // On exécute les vérifications demandées
            if ($this->_error == UPLOAD_ERR_OK && is_uploaded_file($_FILES['userfile']['tmp_name'][$i])) {
 
                // Vérification du type mime via la librairie "mime_magic" : on surcharge la propriété _type avec le type renvoyé par la fonction mime_content_type
                if ($this->phpDetectMimeType === self::CST_UPL_HEADER_MIMETYPE) {
                    $this->_type = mime_content_type($_FILES['userfile']['tmp_name'][$i]);
                }
 
                // Vérification du type mime via la librairie "file_info" : on surcharge la propriété _type avec le type renvoyé par la fonction fileinfo()
                else if ($this->phpDetectMimeType === self::CST_UPL_HEADER_FILEINFO) {
 
                    $fInfo = new finfo(FILEINFO_MIME, $this->magicfile);
 
                    // La classe retourne une chaine de type "mime; charset". Seul la partie mime nous intéresse.
                    $mime = explode(';', $fInfo->file($_FILES['userfile']['tmp_name'][$i]));
 
                    $this->_type = trim($mime[0]);
 
                    unset($fInfo, $mime);
                }
 
                // Vérification des erreurs suplémentaires détectées par la classe
                if (!$this->CheckSecurity() || !$this->CheckMimeType() || !$this->CheckExtension() || !$this->CheckImg()) {
                    continue;
                }                
            }
            else {
                // Erreur retournée par PHP
                $this->AddError($this->_error);
                continue;
            }
 
            // Le fichier a passé toutes les vérifications, on procède à l'écriture
            $this->WriteFile($this->_name, $this->_type, $this->_temp, $this->_ext, $this->_field);
        }
    }
 
 
 
    /**
     * Ecrit le fichier sur le serveur.
     *
     * @access private
     * @param string $name        nom du fichier sans son extension
     * @param string $type        entete du fichier
     * @param string $temp        chemin du fichier temporaire
     * @param string $temp        extension du fichier précédée d'un point
     * @param string $num_fied    position du champ dans le formulaire à compter de 1
     * @return bool               true/false => succes/erreur
     */
    private function WriteFile($name, $type, $temp, $ext, $num_field) {
 
        $new_filename = null;
 
        if (is_uploaded_file($temp)) {
 
            // Nettoyage du nom original du fichier
            $new_filename = (Empty($this->Filename)) ? $this->CleanFileName(substr($name, 0, strrpos($name, '.'))) : $this->Filename;
 
            // Ajout préfixes / suffixes + extension :
            $new_filename = $this->Prefixe . $new_filename . $this->Suffixe . $ext;
 
            switch ($this->WriteMode) {
 
                case self::CST_UPL_WRITE_ERASE :
                    $uploaded = @move_uploaded_file($temp, $this->DirUpload . $new_filename);
                break;
 
                case self::CST_UPL_WRITE_COPY :
 
                    if ($this->AlreadyExist($new_filename)) {
                        $new_filename = 'copie_de_' . $new_filename;
                    }
 
                    $uploaded = @move_uploaded_file($temp, $this->DirUpload . $new_filename);
 
                 break;
 
                case self::CST_UPL_WRITE_IGNORE : 
 
                    if ($this->AlreadyExist($new_filename)) $uploaded = true;
                    else                                    $uploaded = @move_uploaded_file($temp, $this->DirUpload . $new_filename);
 
                break;
            }
 
            // Informations pouvant être utiles au développeur (si le fichier a pu être copié)
            if ($uploaded) {
 
                $filesize = filesize($this->DirUpload . $new_filename);
 
                $this->Infos[$num_field]['nom']          = $new_filename;
                $this->Infos[$num_field]['nom_originel'] = $name;
                $this->Infos[$num_field]['chemin']       = $this->DirUpload . $new_filename;
                $this->Infos[$num_field]['poids']        = number_format($filesize/1024, 3, '.', '');
                $this->Infos[$num_field]['octets']       = $filesize;
                $this->Infos[$num_field]['mime-type']    = $type;
                $this->Infos[$num_field]['extension']    = $ext;
            }
            else {
                $this->Error('move_uploaded_file() a généré une erreur. Vérifiez les droits d\'écriture du répertoire temporaire d\'upload [' . @ini_get('upload_tmp_dir') . '] et celui du répertoire de destination [' . $this->DirUpload . '].');
                return false;
            }
 
            // Mise en place des droits
            if (function_exists('chmod')) {
                @chmod($this->DirUpload . $new_filename, $this->Permission);
            }
 
            return true;
 
        } // End is_uploaded_file
 
        return false;
    }
 
 
 
    /**
     * Vérifie si le fichier passé en paramètre existe déjà dans le répertoire DirUpload
     * 
     * @access private
     * @return bool
     */
    private function AlreadyExist($file) {
        return (file_exists($this->DirUpload . $file));
    }
 
 
 
    /**
     * Vérifie la hauteur/largeur d'une image
     * 
     * @access private
     * @return bool
     */
    private function CheckImg() {
 
        $dim = @getimagesize($this->_temp);
        $res = true;
 
        // On travaille sur un fichier image
        if ($dim != false) {
 
            if (!Empty($this->ImgMaxWidth) && $dim[0] > $this->ImgMaxWidth)  {
                $this->AddError(self::CST_UPL_ERR_IMG_EXCEED_MAX_WIDTH);
                $res = false;
            }
 
            if (!Empty($this->ImgMaxHeight) && $dim[1] > $this->ImgMaxHeight) {
                $this->AddError(self::CST_UPL_ERR_IMG_EXCEED_MAX_HEIGHT);
                $res = false;
            }
 
            if (!Empty($this->ImgMinWidth)  && $dim[0] < $this->ImgMinWidth) {
                $this->AddError(self::CST_UPL_ERR_IMG_EXCEED_MIN_WIDTH);
                $res = false;
            }
 
            if (!Empty($this->ImgMinHeight) && $dim[1] < $this->ImgMinHeight) {
                $this->AddError(self::CST_UPL_ERR_IMG_EXCEED_MIN_HEIGHT);
                $res = false;
            }
        }
 
        return $res;
    }
 
 
 
    /**
     * Vérifie l'extension des fichiers suivant celles précisées dans $Extension
     * @access private
     * @return bool
     */
    private function CheckExtension() {
 
        $ArrOfExtension = explode(';', strtolower($this->Extension));
 
        if (!Empty($this->Extension) && !in_array($this->_ext, $ArrOfExtension)) {
            $this->AddError(self::CST_UPL_ERR_WRONG_EXTENSION);
            return false;
        }
 
        return true;
    }
 
 
 
    /**
     * Vérifie l'entête des fichiers suivant ceux précisés dans $MimeType
     * @access private
     * @return bool
     */
    private function CheckMimeType() {
 
        $ArrOfMimeType = explode(';', $this->MimeType);
 
        if (!Empty($this->MimeType) && !in_array($this->_type, $ArrOfMimeType)) {
            $this->AddError(self::CST_UPL_ERR_WRONG_MIMETYPE);
            return false;
        }
 
        return true;
    }
 
 
    /**
     * Ajoute une erreur pour le fichier en cours de lecture dans le tableau des erreur.
     * Voir http://www.php.net/manual/fr/features.file-upload.errors.php
     * 
     * @access private
     */
    private function AddError($code_erreur) {
 
        // Déprécié. Gardé pour compatibilité.
        global $UploadError;
 
        $positionnerEnErreur = true;
 
        switch ($code_erreur) {
 
            case self::CST_UPL_ERR_NONE :
               $positionnerEnErreur = false;
            break;
 
            case '' :
                $msg = 'Exception levée mais non décelée pour le document %FILENAME%.';
            break;
 
            case self::CST_UPL_ERR_EMPTY_FILE :
                $msg = $this->errorMsg[$code_erreur];
                $positionnerEnErreur = $this->Required;
            break;
 
            default :
                $msg = $this->errorMsg[$code_erreur];
                $positionnerEnErreur = true;
            break;
 
        }
 
        if ($positionnerEnErreur) {
 
            $msg              = str_replace('%FILENAME%', $this->_name, $msg);
            $UploadError      = true;
            $this->uplSuccess = false;
 
            $this->ArrOfError[$this->_field][$code_erreur] = $msg;
        }
    }
 
 
 
    /**
     * Vérifie les critères de la politique de sécurité
     * OV : 26/10/07 => déprécié.
     * 
     * @access private
     * @return bool
     */
    private function CheckSecurity() {
 
        // Bloque tous les fichiers executables, et tous les fichiers php pouvant être interprété mais dont l'entête ne peut les identifier comme étant dangereux
        if ($this->SecurityMax === true && ereg ('application/octet-stream', $this->_type) || preg_match("/.php$|.inc$|.php3$/i", $this->_ext)) {
            $this->AddError(self::CST_UPL_ERR_UNSAFE_FILE);
            return false;
        }
 
        return true;
    }
 
 
 
    /**
     * Vérifie et formate le chemin de destination :
     *     - définit comme rep par défaut celui de la classe
     *     - teste l'existance du répertoire et son accès en écriture
     * @access private
     */
    private function CheckDirUpload() {
 
        // Si aucun répertoire n'a été précisé, on prend celui de la classe
        if (Empty($this->DirUpload)) $this->DirUpload = dirname(__FILE__);
 
        $this->DirUpload = $this->FormatDir($this->DirUpload);
 
        // Le répertoire existe?
        if (!is_dir($this->DirUpload)) $this->Error('Le répertoire de destination spécifiée par la propriété DirUpload n\'existe pas.');
 
        // Anciennement, le test sur le droit en écriture était géré via la fonction is_writeable() ici.
        // Malheureusement, pour des raisons inconnus, ce test pouvait généré une erreur alors que le répertoire de destination était correctement configuré (Windows Server 2003).
        // Le test est finalement délocalisé lors de l'écriture du fichier via la fonction move_uploaded_file().
    }
 
 
 
    /**
     * Formate le répertoire passé en paramètre
     * - convertit un chemin relatif en chemin absolu
     * - ajoute si besoin le dernier slash (ou antislash suivant le système)
     * 
     * @access private
     */
    private function FormatDir($Dir) {
 
        // Convertit les chemins relatifs en chemins absolus
        if (function_exists('realpath')) {
            if (realpath($Dir)) $Dir = realpath($Dir);
        }
 
        // Position du dernier slash/antislash
        if ($Dir[strlen($Dir)-1] != DIRECTORY_SEPARATOR) $Dir .= DIRECTORY_SEPARATOR;
 
        return $Dir;
    }
 
 
 
    /**
     * Formate la chaine passée en paramètre en nom de fichier standard (pas de caractères spéciaux ni d'espaces)
     * @access private
     * @param  string $str   chaine à formater
     * @return string        chaine formatée
     */
    private function CleanFileName($str) {
 
        $return = '';
 
        for ($i=0; $i <= strlen($str)-1; $i++) {
            if (eregi('[a-z]',$str{$i}))              $return .= $str{$i};
            elseif (eregi('[0-9]', $str{$i}))         $return .= $str{$i};
            elseif (ereg('[àâäãáåÀÁÂÃÄÅ]', $str{$i})) $return .= 'a';
            elseif (ereg('[æÆ]', $str{$i}))           $return .= 'a';
            elseif (ereg('[çÇ]', $str{$i}))           $return .= 'c';
            elseif (ereg('[éèêëÉÈÊËE]', $str{$i}))    $return .= 'e';
            elseif (ereg('[îïìíÌÍÎÏ]', $str{$i}))     $return .= 'i';
            elseif (ereg('[ôöðòóÒÓÔÕÖ]', $str{$i}))   $return .= 'o';
            elseif (ereg('[ùúûüÙÚÛÜ]', $str{$i}))     $return .= 'u';
            elseif (ereg('[ýÿÝŸ]', $str{$i}))         $return .= 'y';
            elseif (ereg('[ ]', $str{$i}))            $return .= '_';
            elseif (ereg('[.]', $str{$i}))            $return .= '_';
            else                                      $return .= $str{$i};
        }
 
        return str_replace(array('\\', '/', ':', '*', '?', '"', '<', '>', '|'), '', $return);
    }
 
 
 
    /**
     * Conversion du poids maximum d'un fichier exprimée en Ko en octets
     * @access private
     */
    private function SetMaxFilesize() {
        (is_numeric($this->MaxFilesize)) ? $this->MaxFilesize = $this->MaxFilesize * 1024 : $this->Error('la propriété MaxFilesize doit être une valeur numérique');
    }
 
 
 
    /**
     * Crée les champs de type fichier suivant la propriété Fields dans un tableau $Field. Ajoute le contenu de FieldOptions aux champs.
     * @access private
     */
    private function CreateFields() {
 
        if (!is_int($this->Fields)) {
            $this->Error('la propriété Fields doit être un entier');
        }
 
        for ($i=0; $i <= $this->Fields; $i++) {
            if ($i == 0)  $this->Field[] = ($this->xhtml) ? '<input type="hidden" name="MAX_FILE_SIZE" value="'. $this->MaxFilesize .'" />' : '<input type="hidden" name="MAX_FILE_SIZE" value="'. $this->MaxFilesize .'">';
            else          $this->Field[] = ($this->xhtml) ? '<input type="file" name="userfile[]" '. $this->FieldOptions .'/>'              : '<input type="file" name="userfile[]" '. $this->FieldOptions .'>';
        }
    }
 
 
 
    /**
     * Vérifie la configuration de la classe.
     * @access private
     */
    private function CheckConfig() {
 
        if (!version_compare(phpversion(), self::CST_UPL_PHP_VERSION)) {
            $this->Error('Version PHP minimale requise : ' . self::CST_UPL_PHP_VERSION . '.');
        }
 
        if (ini_get('file_uploads') != 1) {
            $this->Error('la configuration du serveur ne vous autorise pas à faire du transfert de fichier. Vérifiez la propriété [file_uploads] du fichier [php.ini].');
        }
 
        if (!is_string($this->Extension)) $this->Error('la propriété Extension est mal configurée.');
        if (!is_string($this->MimeType))  $this->Error('la propriété MimeType est mal configurée.');
        if (!is_string($this->Filename))  $this->Error('la propriété Filename est mal configurée.');
        if (!is_bool($this->Required))    $this->Error('la propriété Required est mal configurée.');
        if (!is_bool($this->SecurityMax)) $this->Error('la propriété SecurityMax est mal configurée.');
 
        if ($this->WriteMode != self::CST_UPL_WRITE_COPY && $this->WriteMode != self::CST_UPL_WRITE_ERASE && $this->WriteMode != self::CST_UPL_WRITE_IGNORE) {
            $this->Error('la propriété WriteMode est mal configurée.');
        }
 
        $this->CheckImgPossibility();
        $this->CheckDirUpload();
 
        // Vérification de la propriété $phpDetectMimeType.
        if (!is_int($this->phpDetectMimeType) || ($this->phpDetectMimeType != self::CST_UPL_HEADER_BROWSER && $this->phpDetectMimeType != self::CST_UPL_HEADER_FILEINFO && $this->phpDetectMimeType != self::CST_UPL_HEADER_MIMETYPE)) {
            $this->Error('la propriété phpDetectMimeType est mal configurée.');       
        }
        else if ($this->phpDetectMimeType === self::CST_UPL_HEADER_MIMETYPE) {
            $this->loadMimeTypeLib();
        }
        else if ($this->phpDetectMimeType === self::CST_UPL_HEADER_FILEINFO) {
            $this->loadPECLInfoLib();
        }
    }
 
 
 
    /**
     * Vérifie les propriétés ImgMaxWidth/ImgMaxHeight
     * @access private
     */
    private function CheckImgPossibility() {
        if (!Empty($this->ImgMaxWidth)  && !is_numeric($this->ImgMaxWidth))  $this->Error('la propriété ImgMaxWidth est mal configurée.');
        if (!Empty($this->ImgMaxHeight) && !is_numeric($this->ImgMaxHeight)) $this->Error('la propriété ImgMaxHeight est mal configurée.');
        if (!Empty($this->ImgMinWidth)  && !is_numeric($this->ImgMinWidth))  $this->Error('la propriété ImgMinWidth est mal configurée.');
        if (!Empty($this->ImgMinHeight) && !is_numeric($this->ImgMinHeight)) $this->Error('la propriété ImgMinHeight est mal configurée.');
    }
 
 
 
    /** 
     * Essaie de charger la librairie MimeType.
     * 
     * @access  private
     * @return  bool
     */
    private function loadMimeTypeLib() {
 
        if(!extension_loaded(self::CST_UPL_EXT_MIMEMAGIC)) @dl(self::CST_UPL_EXT_MIMEMAGIC . PHP_SHLIB_SUFFIX);
 
        if(!extension_loaded(self::CST_UPL_EXT_MIMEMAGIC)) {
            trigger_error('Impossible de charger la librairie ' . self::CST_UPL_EXT_MIMEMAGIC . '(http://fr3.php.net/manual/fr/ref.mime-magic.php). La vérification des entêtes de fichiers se fera par le biais des informations retournées par la navigateur.', E_USER_WARNING);
            $this->phpDetectMimeType = self::CST_UPL_HEADER_BROWSER;
            return false;
        }
 
        return true;
    }
 
 
 
    /** 
     * Essaie de charger la librairie PECL.
     * Note : impossible d'activer à la volée cette extension.
     * 
     * @access  private
     * @return  bool
     */
    private function loadPECLInfoLib() {
 
        if(!extension_loaded(self::CST_UPL_EXT_FILEINFO)) {
            trigger_error('Impossible de charger la librairie ' . self::CST_UPL_EXT_FILEINFO . ' (http://fr3.php.net/manual/fr/ref.fileinfo). La vérification des entêtes de fichiers se fera par le biais des informations retournées par la navigateur.', E_USER_WARNING);
            $this->phpDetectMimeType = self::CST_UPL_HEADER_BROWSER;
            return false;
        }
 
        $this->magicfile = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mime_magic' . DIRECTORY_SEPARATOR . 'magic';
 
        if (!is_file($this->magicfile)) {
            trigger_error('Impossible de charger le fichier "magic" nécéssaire à la librairie FileInfo. La vérification des entêtes de fichiers se fera par le biais des informations retournées par la navigateur.', E_USER_WARNING);
            $this->phpDetectMimeType = self::CST_UPL_HEADER_BROWSER;
            return false;
        }
 
        return true;
    }
 
 
 
    /**
     * Affiche les erreurs de configuration et stoppe tout traitement 
     * 
     * @var string $error_msg
     */
    private function Error($error_msg) {
 
        if ($this->TrackError) {
            trigger_error('Erreur [' . get_class($this) . '] : ' . $error_msg, E_USER_ERROR);
            exit;
        }
    }
 
} // End Class
?>
J'ai ensuite deux fichiers permettant l'enregistrement de ma piece jointe :

signup.php :
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
<?php include('header.php');?>
 
 
 
<?php
//traitement formulaire
if(isset($_POST["formulaire"])){
 
	$gender = $_POST["gender"];
	$fname = $_POST["fname"];
	$lname = $_POST["lname"];
	$email = $_POST["email"];
	$birthday = $_POST["birthday"];
	$city = $_POST["city"];
	$country = $_POST["country"];
 
 
	/*
	$_SESSION["gender"] = $gender;
	$_SESSION["fname"] = $fname;
	$_SESSION["lname"] = $lname;
	$_SESSION["birthday"] = $birthday;
	*/
 
}
?>
 
<?php
//countries 
	include('connect.php');
 
	$sql = "SELECT * FROM intevit_countries";
	$query = mysql_query($sql);
	$i=0;
	while($e = mysql_fetch_array($query)){
		$country_name = $e["printable_name"];
		$isotemp = $e["iso"];
		$country[$i] = $country_name;
		$iso[$i] =  $isotemp;
		$i++;
	}
?>
 
 
<script type="text/javascript" src="_COMMUN/_min/?f=_js/prototype.js"></script>
<script type="text/javascript" src="_COMMUN/_min/?b=_js&f=scriptaculous.js,effects.js,dragdrop.js,controls.js,scal.js,scal-show.js" ></script>
<script type="text/javascript" src="_COMMUN/_min/?f=_js/ie7/ie7-standard-p.js"></script>
<script type="text/javascript" src="_COMMUN/_js/prototype.js"></script>
<script type="text/javascript" src="_COMMUN/_js/overlib.js"></script>
<script type="text/javascript" src="_enCOMMUN/profil/validation.js"></script>
 
<script	 language="JavaScript" type="text/javascript">
<!--
 
function VerifMail2()
	{
	a = document.inscription.email.value;
	valide1 = false;
 
	for(var j=1;j<(a.length);j++){
		if(a.charAt(j)=='@'){
			if(j<(a.length-4)){
				for(var k=j;k<(a.length-2);k++){
					if(a.charAt(k)=='.') valide1=true;
				}
			}
		}
	}
	if(valide1==false) alert("Please enter a valid email address.");
	return valide1;
	}
 
//-->
 
</script>
 
 
 
 
 
						<div class="UITabStructure_Container  clearfix">
								<center>
										<div class="UITabStructure_Left UITabStructure_FullBleed">
									<ul class="UITabStructure_Tabs clearfix">
										<li class="UITabStructure_TabFirst "><a href="index.php"><?php echo $lang["index"];?></a></li>
										<li><a href="team.php" ><?php echo $lang["team"];?></a></li>
										<li><a href="signup.php5" class="UITabStructure_TabSelected"><?php echo $lang["toapply"];?></a></li>
										<li><a href="skills.php"><?php echo $lang["skills"];?></a></li>
										<li><a href="whoiam.php"  ><?php echo $lang["whoami"];?></a></li>
										<li><a href="contact.php"  ><?php echo $lang["contact"];?></a></li>
									</ul>
 
										</div>
								</center>
						</div></div>
 
<div class="UIWashFrame_MainContent">
	<div class="UICareersPage">
		<div class="clearfix">
			<div class="careers_grid clearfix">
				<div class="careers_full first_row">
 
 
					 <form name="inscription" id="inscription" action="signup2.php5"  onsubmit="return VerifMail2();" method="post" enctype="multipart/form-data">
																	   <fieldset>
																		<legend align="top"><?php echo $lang["joindreamteam"]; ?></legend> 
																			<table>
																				<tr><td class="libelle" align="right"><?php echo $lang["gender"]; ?>:  </td> <td align="left"> M <input type="radio" name="gender" id="gender" value="M" /> F <input type="radio" name="gender" id="gender" value="F" /></span></td></tr>
																				<tr><td class="libelle" align="right"><?php echo $lang["lname"]; ?>: </td> <td align="left"><input class="required ChampTexte" type="text" name="lname" id="lname" /> </span></td></tr>
																				<tr><td class="libelle" align="right"><?php echo $lang["fname"]; ?>: </td> <td align="left"> <input class="required ChampTexte" type="text" name="fname" id="fname" /> </span></td></tr>
																				<tr><td class="libelle" align="right"><?php echo $lang["email"]; ?>: </td> <td align="left"><input class="required validate-email ChampTexte" type="text" name="email" id="email" /> </span></td></tr>
																				<tr><td class="libelle" align="right"><?php echo $lang["birthday"]; ?>  </td> <td align="left">
 
 
<select id="month" name="month" ><option value="">Month:</option><option value="1">Jan</option> 
<option value="2">Feb</option> 
<option value="3">Mar</option> 
<option value="4">Apr</option> 
<option value="5">May</option> 
<option value="6">Jun</option> 
<option value="7">Jul</option> 
<option value="8">Aug</option> 
<option value="9">Sep</option> 
<option value="10">Oct</option> 
<option value="11">Nov</option> 
<option value="12">Dec</option> 
</select> 
 
<select  name="day" id="day"><option value="">Day:</option><option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
<option value="4">4</option> 
<option value="5">5</option> 
<option value="6">6</option> 
<option value="7">7</option> 
<option value="8">8</option> 
<option value="9">9</option> 
<option value="10">10</option> 
<option value="11">11</option> 
<option value="12">12</option> 
<option value="13">13</option> 
<option value="14">14</option> 
<option value="15">15</option> 
<option value="16">16</option> 
<option value="17">17</option> 
<option value="18">18</option> 
<option value="19">19</option> 
<option value="20">20</option> 
<option value="21">21</option> 
<option value="22">22</option> 
<option value="23">23</option> 
<option value="24">24</option> 
<option value="25">25</option> 
<option value="26">26</option> 
<option value="27">27</option> 
<option value="28">28</option> 
<option value="29">29</option> 
<option value="30">30</option> 
<option value="31">31</option> 
</select>
 
 <select class="validate-selection"  	name="year" id="year" ><option value="">Year:</option><osption value="2010">2010</option> 
<option value="2009">2009</option> 
<option value="2008">2008</option> 
<option value="2007">2007</option> 
<option value="2006">2006</option> 
<option value="2005">2005</option> 
<option value="2004">2004</option> 
<option value="2003">2003</option> 
<option value="2002">2002</option> 
<option value="2001">2001</option> 
<option value="2000">2000</option> 
<option value="1999">1999</option> 
<option value="1998">1998</option> 
<option value="1997">1997</option> 
<option value="1996">1996</option> 
<option value="1995">1995</option> 
<option value="1994">1994</option> 
<option value="1993">1993</option> 
<option value="1992">1992</option> 
<option value="1991">1991</option> 
<option value="1990">1990</option> 
<option value="1989">1989</option> 
<option value="1988">1988</option> 
<option value="1987">1987</option> 
<option value="1986">1986</option> 
<option value="1985">1985</option> 
<option value="1984">1984</option> 
<option value="1983">1983</option> 
<option value="1982">1982</option> 
<option value="1981">1981</option> 
<option value="1980">1980</option> 
<option value="1979">1979</option> 
<option value="1978">1978</option> 
<option value="1977">1977</option> 
<option value="1976">1976</option> 
<option value="1975">1975</option> 
<option value="1974">1974</option> 
<option value="1973">1973</option> 
<option value="1972">1972</option> 
<option value="1971">1971</option> 
<option value="1970">1970</option> 
<option value="1969">1969</option> 
<option value="1968">1968</option> 
<option value="1967">1967</option> 
<option value="1966">1966</option> 
<option value="1965">1965</option> 
<option value="1964">1964</option> 
<option value="1963">1963</option> 
<option value="1962">1962</option> 
<option value="1961">1961</option> 
<option value="1960">1960</option> 
<option value="1959">1959</option> 
<option value="1958">1958</option> 
<option value="1957">1957</option> 
<option value="1956">1956</option> 
<option value="1955">1955</option> 
<option value="1954">1954</option> 
<option value="1953">1953</option> 
<option value="1952">1952</option> 
<option value="1951">1951</option> 
<option value="1950">1950</option> 
<option value="1949">1949</option> 
<option value="1948">1948</option> 
<option value="1947">1947</option> 
<option value="1946">1946</option> 
<option value="1945">1945</option> 
<option value="1944">1944</option> 
<option value="1943">1943</option> 
<option value="1942">1942</option> 
<option value="1941">1941</option> 
<option value="1940">1940</option> 
<option value="1939">1939</option> 
<option value="1938">1938</option> 
<option value="1937">1937</option> 
<option value="1936">1936</option> 
<option value="1935">1935</option> 
<option value="1934">1934</option> 
<option value="1933">1933</option> 
<option value="1932">1932</option> 
<option value="1931">1931</option> 
<option value="1930">1930</option> 
<option value="1929">1929</option> 
<option value="1928">1928</option> 
<option value="1927">1927</option> 
<option value="1926">1926</option> 
<option value="1925">1925</option> 
<option value="1924">1924</option> 
<option value="1923">1923</option> 
<option value="1922">1922</option> 
<option value="1921">1921</option> 
<option value="1920">1920</option> 
<option value="1919">1919</option> 
<option value="1918">1918</option> 
<option value="1917">1917</option> 
<option value="1916">1916</option> 
<option value="1915">1915</option> 
<option value="1914">1914</option> 
<option value="1913">1913</option> 
<option value="1912">1912</option> 
<option value="1911">1911</option> 
<option value="1910">1910</option> 
<option value="1909">1909</option> 
<option value="1908">1908</option> 
<option value="1907">1907</option> 
<option value="1906">1906</option> 
<option value="1905">1905</option> 
<option value="1904">1904</option> 
<option value="1903">1903</option> 
<option value="1902">1902</option> 
<option value="1901">1901</option> 
<option value="1900">1900</option> 
</select>
 
 
 
																				</span></td></tr>
																				<tr><td class="libelle" align="right"><?php echo $lang["city"]; ?>: </td> <td align="left"><input class="required ChampTexte" type="text" name="city" id="city" /> </span></td></tr>																			
																			    <tr><td class="libelle" align="right"><?php echo $lang["country"]; ?>: </td> <td align="left"><select name="country" id="country"> 
 
																				<?php 
 
																					for($j=0;$j<$i;$j++){
																						echo "<option value='$iso[$j]'> $country[$j] </option>";
																					}
 
																				?> 
 
																				</country> </span></td></tr>
																			    <tr><td class="libelle" align="right"><?php echo $lang["resume"]; ?>: </td> <td align="left"> 
 
 
			<?php
 
									// Chargement de la classe
									require_once('upload/upload.class.php');
 
 
									/**
									 * Fonction utilitaire pour présenter un tableau PHP dans une page web.
									 *
									 * @param array $array
									 */
									function pArray($array) {
										print '<pre style="background:#faebd7">';
										print_r($array);
										print '</pre>';
									}
 
 
									// Instanciation d'un nouvel objet "upload"
									$Upload = new Upload();
 
 
 
 
									// GESTION DU FORMULAIRE D'UPLOAD
 
									// Pour limiter la taille d'un fichier (exprimée en ko)
									$Upload->MaxFilesize = 4000;
 
									// Pour ajouter des attributs aux champs de type file
									$Upload->FieldOptions = 'style="border:1px solid black"';
 
									// Pour indiquer le nombre de champs souhaités
									$Upload->Fields = 1;
 
									// Initialisation du formulaire
									$Upload->InitForm();
 
									// Affichage du champ MAX_FILE_SIZE
									  print $Upload->Field[0];
 
									  // Affichage du premier champ de type FILE
									  print $Upload->Field[1] ;
							?>
 
							</span></td></tr>
																				<tr><td></td><td><br/><br/><input type="submit" name="formulaire" value="OK"  /></td></tr>
																			</table>
																		 </fieldset>
																		</form>
 
 
 
				</div>
			</div>
		</div>
 
<script language="JavaScript">
function formCallback(result, form) { window.status = "validation callback for form '" + form.id + "': result = " + result; }
var valid = new Validation('inscription', {immediate : true, onFormValidate : formCallback});
</script>
 
<?php include('footer.php');?>
et signup2.php :
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<?php include('header.php');?>
<?php include('lang/lang.php');?>
<?php include('handlelang.php');?>
 
<?php
//traitement formulaire
if(isset($_POST["formulaire"])){
 
	$gender = $_POST["gender"];
	$fname = $_POST["fname"];
	$lname = $_POST["lname"];
	$email = $_POST["email"];
	$birthday = $_POST["year"]."-". $_POST["month"]. "-" . $_POST["day"];
	$city = $_POST["city"];
	$country = $_POST["country"];
 
 
	// Chargement de la classe
				require_once('upload/uploadclass.php');
 
				/**
				 * Fonction utilitaire pour présenter un tableau PHP dans une page web.
				 *
				 * @param array $array
				 */
				function pArray($array) {
					print '<pre style="background:#faebd7">';
					print_r($array);
					print '</pre>';
				}
 
 
				// Instanciation d'un nouvel objet "upload"
				$Upload = new Upload();
				echo "affichage";	
				print_r($Upload);	
				$resume = $Upload->images[0] ;
 
 
 
 
 
?>
 
<?php
 
	include('connect.php');
 
	$signupdate  = date("Y-m-d");  
 
	$sql = "
	INSERT INTO  intevit_users( `users_lname`, `users_fname`, `users_birthday` , `users_email`, `users_passwd`, `users_countries_id`, `users_city` , `users_resume` , `signupdate`) 
	VALUES  (  '$lname', '$fname', '$birthday', '$email', 'NONE', '$country', '$city' , '$resume' , '$signupdate') ";
	$query = mysql_query($sql);
 
 
	//mail sending
 
	$subject = "Application to Intevit";
	$name = "Intevit";
	$comment = "Thanks for applying to intevit. We will get back to you very soon.";
 
 
	 $headers ='From: "'. $name . '"<remi@intevit.com>'."\n"; 
     $headers .='Reply-To: '. $email."\n"; 
     $headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n"; 
     $headers .='Content-Transfer-Encoding: 8bit'; 
 
 
 
	mail($email,"$subject","$comment","$headers");
	mail("remi@intevit.com","$subject","$comment","$headers");
 
	echo "mail envoyé";
 
 
}
 
?>
 
<body class="careers ff2 Locale_en_US chat_body">
 
<div id="content" class="fb_content clearfix">
	<div class="UIWashFrame_Container">
		<div class="UIWashFrame_Header">
			<div class="careers_header" id="masthead">
				<div class="careers_full">
					<div class="careers_header_contents clearfix">
							<div class="careers_header_title">
								<div id="home_welcome">
										<table>
											<tr><td><a href="index.php"><img src="logo_intevit.jpg" alt="intevit" width="293" height="106" /></a><br/><br/><br/>
													<img src="testflags.JPG" alt="We are the world!" /><br/><br/><br/><img src="tech.png" alt="We use technologies!" />
												</td>
												<td valign="top">
														<div class="home_header_desc"><h2>Sign up to intevit</h2>
															<p>
																<span class="home_header_desc">
 
																	<?php include('header_presentation.php');?>
 
 
 
																</span>
															</p>
														</div>
												</td>
											</tr>
										</table>
								</div>
							</div>
 
	<div class="careers_header_subtitle"></div></div></div>
		<div class="careers_full">
				<div class="clearfix">
						<div class="UITabStructure_Container  clearfix">
								<center>
										<div class="UITabStructure_Left UITabStructure_FullBleed">
											<ul class="UITabStructure_Tabs clearfix">
										<li class="UITabStructure_TabFirst "><a href="index.php"><?php echo $lang["index"];?></a></li>
										<li><a href="team.php" ><?php echo $lang["team"];?></a></li>
										<li><a href="signup.php5" class="UITabStructure_TabSelected"><?php echo $lang["toapply"];?></a></li>
										<li><a href="skills.php"><?php echo $lang["skills"];?></a></li>
										<li><a href="whoiam.php"  ><?php echo $lang["whoami"];?></a></li>
										<li><a href="contact.php"  ><?php echo $lang["contact"];?></a></li>
									</ul>
										</div>
								</center>
						</div>
				</div>
		</div>
	</div>
</div>
 
<div class="UIWashFrame_MainContent">
	<div class="UICareersPage">
		<div class="clearfix">
			<div class="careers_grid clearfix">
				<div class="careers_full first_row">
					<div>
																	<? echo $lang["thankforjoiningus"]; ?>
					</div>
				</div>
			</div>
		</div>
<?php include('footer.php');?>
Quand j'enregistre, il envoie bien le mail mais cette arreurs arrive sur la page :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
affichageUpload Object ( [phpDetectMimeType] => 0 [magicfile] => [xhtml] => 1 [MaxFilesize] => 2048 [ImgMaxWidth] => [ImgMaxHeight] => [ImgMinWidth] => [ImgMinHeight] => [DirUpload] => [Fields] => 1 [FieldOptions] => [Required] => [SecurityMax] => [Filename] => [Prefixe] => [Suffixe] => [WriteMode] => 0 [MimeType] => [TrackError] => 1 [Permission] => 438 [Extension] => [uplSuccess:private] => 1 [ArrOfError:private] => Array ( ) [_field:private] => 0 [_size:private] => 0 [_type:private] => [_name:private] => [_temp:private] => [_ext:private] => [_error:private] => 0 [errorMsg:private] => Array ( [1] => Le document [%FILENAME%] exc�de la directive [upload_max_filesize] du fichier de configuration [php.ini]. [2] => Le document [%FILENAME%] exc�de la directive MAX_FILE_SIZE sp�cifi�e dans le formulaire. [3] => Document [%FILENAME%] corrompu. [4] => Le champ [parcourir] du formulaire d'upload n'a pas �t� renseign�. [6] => Un dossier temporaire est manquant. [7] => �chec de l'�criture du fichier [%FILENAME%] sur le disque. [UPLOAD_ERR_EXTENSION] => L'envoi du fichier [%FILENAME%] est arr�t� par l'extension. [20] => Document [%FILENAME%] potentiellement dangereux. [21] => Le document [%FILENAME%] n'est pas conforme � la liste des ent�tes autoris�s. [22] => Le document [%FILENAME%] n'est pas conforme � la liste des extensions autoris�es. [23] => La largeur de l'image [%FILENAME%] exc�de celle autoris�e. [24] => La hauteur de l'image [%FILENAME%] exc�de celle autoris�e. [25] => La largeur de l'image [%FILENAME%] est inf�rieure � celle autoris�e. [26] => La hauteur de l'image [%FILENAME%] est inf�rieure � celle autoris�e. ) ) mail envoy�
.

Et quand je jette un coup d'oeil dans ma BDD l'utilisateur est bien enre.

Je ne comprends pas pourquoi!

merci d'avance