Bonjour à tous chers amis,

Voilà je rencontre des difficultés pour uploader des fichiers PDF avec un traitement PHP mais qui passe avant par un traitement jQuery/Ajax.

Je pense que le problème vient du côté PHP mais j'arrive pas à voir ce qui peut clocher... voici mon code :

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
 
<?php
session_start();
 
if($_POST) {
	require_once '../includes/config.php';
 
	$q=$db->prepare('SELECT id FROM categories WHERE noms=?');
	$q->execute(array($_POST['newCat']));
	$r=$q->fetch();
 
	$q=$db->prepare('SELECT * FROM marques WHERE marques = ?');
	$q->execute(array($_POST['newMark']));
	$res=$q->fetch();
 
 
	$success = "error";
 
	if(!empty($_POST['nomProd'])){
		 $_SESSION['debug'] = '1';
 
		if(!empty($_POST['cat']) || !empty($_POST['newCat'])) {
			 $_SESSION['debug'] = '2';
 
			if(!empty($_POST['mark']) || !empty($_POST['newMark'])){
				 $_SESSION['debug'] = '3';
 
				if(empty($res['id'])){
					 $_SESSION['debug'] = '4';
 
					if($_POST['newMark'] != $res['marques']) {
						 $_SESSION['debug'] = '5';
 
						if (isset($_FILES) && !empty($_FILES['file']['tmp_name'])) {
							 $_SESSION['debug'] = '6';
 
							$content_dir="../pdf/"; // dossier où sera déplacé le fichier
							$nom = $_FILES['file']['name']; //le nom de ton fichier (par exemple : image.jpg)
							$tmp_file = $_FILES['file']['tmp_name']; //le nom du fichier dans le dossier tmp
							$type = strrchr($_FILES['file']['name'], '.'); //l'extension du fichier (par exemple : .jpg)
							$poids = filesize($_FILES['file']['tmp_name']); //le poids du fichier en octet
 
							//liste des extensions que tu traiteras
							$extension = array('.pdf');
 
							//Poids maximum autorisé pour l'upload (voir dans le fichier PHP.ini : généralement 2mo)
							$maxTaille = 8000000;
 
							//Corrige les caractères avec accents et remplace les espaces et caractères speciaux par -
							//Evite les problèmes par la suite.
							$nom = strtr($nom,
							 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
							 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
							$nom = preg_replace('/([^.a-z0-9]+)/i', '-', $nom);
 
							//On contrôle que le fichier est bien présent dans le dossier tmp
							if (is_uploaded_file($tmp_file)) {
								 $_SESSION['debug'] = '7';
 
								//On contrôle si l'extension est présente dans ta liste $extension
								if(in_array($type, $extension)){ 
									 $_SESSION['debug'] = '8';
 
									//On contrôle que le poids est effectivement bon
									if($poids<=$maxTaille){
										 $_SESSION['debug'] = '9';	 
										//Si tout se passe bien on Upload dans ton dossier de destination.
										if(move_uploaded_file($tmp_file, $content_dir.$nom)) {
											 $_SESSION['debug'] = '10';
											$success = "agree";
 
											$req=$db->prepare('INSERT INTO notices (nom, cat_id, newCat, marque_id, newMark, pdf) VALUES (:nom, :catId, :newCat, :mId, :newMark, :pdf )');
											$req->bindValue(':nom', $_POST['nomProd'], PDO::PARAM_STR);
											$req->bindValue(':catId', $_POST['cat'], PDO::PARAM_INT);
											$req->bindValue(':newCat', $_POST['newCat'], PDO::PARAM_STR);
											$req->bindValue(':mId', $_POST['mark'], PDO::PARAM_INT);
											$req->bindValue(':newMark', $_POST['newMark'], PDO::PARAM_STR);
											$req->bindValue(':pdf', $nom, PDO::PARAM_STR);
											$req->execute();
 
											$message = 'Votre notice a bien été soumise.<br />Cependant elle sera définitivement validée qu\'une fois vérifiée par nos services.';
										}
										else
										$message = "Le fichier est introuvable.";
									}
									else
									$message = "Le fichier est trop gros";
								}
								else
								$message = "Le format du fichier n\'est pas un PDF";
							}
							else 
							$message="Impossible de copier le fichier dans" .$content_dir;								
						}
						else
						$message = "Vous devez choisir un fichier PDF";
					}
					else
					$message = "Cette marque éxiste d&eacute;jà";
				}
				else
				$message = "Cette catégorie éxiste déjà";
			}
			else
			$message = "Vous devez soit choisir de sélectionner une marque soit suggérer une nouvelle marque";
		}
		else 
		$message = "Vous devez soit choisir de sélectionner une catégorie soit suggérer une nouvelle catégorie";
	}
	else
	$message = "Vous devez nommer une marque + référence pour valider le formulaire";
 
	echo json_encode([
		'message' => $message,
		'success' => $success
	]);
}
Je mets au cas où le jQuery aussi pour voir si l'erreur pourrait pas venir de là et pour éviter les doubles posts ^^

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
 
$(document).ready(function(){
        $('form').on('submit', function(e) {
 
		var $form = $(this);
        var formdata = (window.FormData) ? new FormData($form[0]) : null;
        var data = (formdata !== null) ? formdata : $form.serialize();
 
		$.ajax({
			url: $form.attr('action'),
            type: $form.attr('method'),
            contentType: false, 
            processData: false, 
			data: data,
			dataType: 'json',
 
			beforeSend: function(){
				$('.loading').show();
				$(':input[type=text]','form').val('');
				$(':input[type=file]','form').val('');
			},
 
			success:function(data){
				$('.loading').hide();
				if(data.message){
					$('.message').addClass(data.success).html(data.message).fadeIn(600);
					setTimeout(function(){
						$('.message').fadeOut(400);
						$('section').load('contenu')
						$('section').load('aside');
					}, 4000);
				}
			}
		});
		return false;
	});
});
J'ai un message qui s'affiche dans la console cependant :

Warning Provisional headers are shown
et ceci tout est ok sinon :

------WebKitFormBoundaryr6A0Brs9AKXujioN
Content-Disposition: form-data; name="nomProd"

Brother VX640
------WebKitFormBoundaryr6A0Brs9AKXujioN
Content-Disposition: form-data; name="cat"

1
------WebKitFormBoundaryr6A0Brs9AKXujioN
Content-Disposition: form-data; name="newCat"


------WebKitFormBoundaryr6A0Brs9AKXujioN
Content-Disposition: form-data; name="mark"

0
------WebKitFormBoundaryr6A0Brs9AKXujioN
Content-Disposition: form-data; name="newMark"

Brother
------WebKitFormBoundaryr6A0Brs9AKXujioN
Content-Disposition: form-data; name="file"; filename="Brother VX640 1 à10 Sophie(1).pdf"
Content-Type: application/pdf


------WebKitFormBoundaryr6A0Brs9AKXujioN--
Mais bon voilà... il se passe rien et au bout de quelques minutes, il m'affiche le message erreur PDF vide et passe en status ok 200...

Je comprends rien à ce qu'il se passe...

Merci pour votre aide