Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/01/2012, 14h31   #1
Candidat au titre de Membre du Club
 
Inscription : août 2008
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 66
Points : 11
Points : 11
Par défaut Script php de transfert après upload d'image ne fonctionne pas !

Bonjour,
J'utilise le plugin jquery form, côté client, il permet d'uploader des images et récupérer l'url de l'image uploadée.

J'ai trouvé du code intéressant ici

Seul souci, c'est que le script proposé côté serveur utilise codelgniter que je ne connais pas du tout. J'ai donc essayé de transcrire ce code en php, pour le traitement de l'upload et c'est là que cela coince. voici mon code :

index.php
Code :
1
2
3
4
5
 
<form id="up" action="upload_php.php" method="post" enctype="multipart/form-data">
		<input id="file" type="file" name="myFile">
		<div id="results"></div>
</form>
le script jp / jquery (j'ai suivi les exemples de l'API de JqueryForm) :
Code :
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
		<script type="text/javascript" src="lib/jquery.js" ></script>
			<script type="text/javascript" src="http://malsup.github.com/jquery.form.js"></script>
		<script type="text/javascript">
			$(document).ready(function()
			{   var options ={
					dataType:  'json', 
					beforeSubmit: function(){
					$('#results').html('<img src="img/loading.gif" id="waiting">'); // L'animation de chargement
					},
					success:function(data){
						$('#waiting').remove(); // on supprime l'animation de chargement
						// Si erreur est set à 1... on annule et on prévient
						if(data.erreur=='1'){
							$('#results').html(data.message); // On affiche le message d'erreur dans la div
						}
						// Si tout s'est bien passé, on affiche l'image
						else{
							$('#results').html('<img src="'+data.image+'" />');
						}
					}
 
				}
 
				$('#up').submit(function() { 
					// inside event callbacks 'this' is the DOM element so we first 
					// wrap it in a jQuery object and then invoke ajaxSubmit 
					$(this).ajaxSubmit(options); 
 
					// !!! Important !!! 
					// always return false to prevent standard browser submit and page navigation 
					return false; 
				}); 
 
				// A la selection d'une image, on submit automatiquement le formulaire
				$('#file').change(function() {
					$('#up').submit();
				});
			})    
	</script>
et enfin ce qui me pose problème, le script côté serveur pour l'upload (en commentaire, le code utilisant codelight que j'ai essayé de traduire)
upload_php.php
Code :
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
<?php
 
function upload_file(){
 
	$upload_dir="uploads/";
	$extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' );
	$maxsize=1024*1024;
 
	//test sur le transfert
	if ($_FILES['file']['error'] > 0) {
		$reponse['erreur'] = 1;
        	$reponse['message'] = "Erreur lors du transfert";
	}
 
	if ($_FILES['file']['size'] > $maxsize) {
		$reponse['erreur'] = 1;
        	$reponse['message'] = "Fichier trop gros";
	}
 
	$extension_upload = strtolower(  substr(  strrchr($_FILES['file']['name'], '.')  ,1)  );
 
	if ( !in_array($extension_upload,$extensions_valides) ) {
		$reponse['erreur'] = 1;
        	$reponse['message'] = "Fichier incorrect";
	}
 
	//Créer un identifiant difficile à deviner
	$nom = md5(uniqid(rand(), true));
	$nom = $nom.$upload_dir;
 
	//déplacement des fichiers
	$resultat = move_uploaded_file($_FILES['file']['tmp_name'],$nom);
	if (!$resultat) {
		$reponse['erreur'] = 1;
    		$reponse['message'] = "echec du transfert vers uploads.";
	}
	 if ($reponse['erreur']==1) {
	    // On fait l'echo de l'array en encodant en json
        	echo json_encode($reponse);
	}else {
		// On retourne l'url de l'image
		$img_url = base_url().$nom;
		$reponse['erreur'] = 0;
       		 $reponse['image'] = $img_url;
       		 // On fait l'echo de l'array en encodant en json
      		  echo json_encode($reponse);
	}
}
    // // Configuration upload de fichier
    // // $config['upload_path'] = 'uploads/'; // dossier où l'on stocke les fichiers
    // // $config['allowed_types'] = 'png|jpg|gif'; // type de fichiers, ici des images
    // // $this->upload->initialize($config);
 
    // // Si l'upload n'a pas réussi, on renvoit une erreur (1)
    // if(!$this->upload->do_upload()):
                    // // Important : les erreurs renvoyées par CodeIgniter sont pré-formatées en HTML, on vire donc les tags
        // $erreur = strip_tags($this->upload->display_errors());
        // // On prépare une array...
        // $reponse['erreur'] = 1;
        // $reponse['message'] = $erreur;
        // // On fait l'echo de l'array en encodant en json
        // echo json_encode($reponse);
    // else:
        // // Si le fichier a bien été uploadé, on renvoit 0 en erreur + les infos du fichier
        // $fileInfos = array('upload_data' => $this->upload->data()); // On crée une array pour faciliter la récupération d'infos fichier
        // $img_url = base_url().'uploads/'.$fileInfos['upload_data']['file_name']; // On va renvoyer ici l'adresse du fichier
        // // On prépare une array...
        // $reponse['erreur'] = 0;
        // $reponse['image'] = $img_url;
        // // On fait l'echo de l'array en encodant en json
        // echo json_encode($reponse);
    // endif;
}
Mon script js semble ok maintenant puisque firebug m'indique que la requete POST a été effectuée, mon gif indiquant que l'upload est en cours est également présent, le souci vient donc du php.. J'ai dû commette une erreur de syntaxe, ou utiliser une fonction inconnue.. je ne sais pas bien comment debuguer cela.. L'image n'est pas transférée dans mon dossier uploads/ en tout cas, il doit donc y avoir une erreur avant "//déplacement des fichiers".. mais je ne sais pas où..
titimoi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 14h48   #2
Membre éclairé
 
Avatar de Nowwis
 
Homme
Développeur Web
Inscription : juin 2009
Messages : 363
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2009
Messages : 363
Points : 365
Points : 365
A première vue, je dirais que le fichier PHP appelé par l'AJAX n'a qu'une fonction, donc rien ne s'execute...

Essaie de remplacer ton fichier upload.php par :

Code :
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
<?php
 
function upload_file(){
 
	$upload_dir="uploads/";
	$extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' );
	$maxsize=1024*1024;
 
	//test sur le transfert
	if ($_FILES['file']['error'] > 0) {
		$reponse['erreur'] = 1;
        	$reponse['message'] = "Erreur lors du transfert";
	}
 
	if ($_FILES['file']['size'] > $maxsize) {
		$reponse['erreur'] = 1;
        	$reponse['message'] = "Fichier trop gros";
	}
 
	$extension_upload = strtolower(  substr(  strrchr($_FILES['file']['name'], '.')  ,1)  );
 
	if ( !in_array($extension_upload,$extensions_valides) ) {
		$reponse['erreur'] = 1;
        	$reponse['message'] = "Fichier incorrect";
	}
 
	//Créer un identifiant difficile à deviner
	$nom = md5(uniqid(rand(), true));
	$nom = $nom.$upload_dir;
 
	//déplacement des fichiers
	$resultat = move_uploaded_file($_FILES['file']['tmp_name'],$nom);
	if (!$resultat) {
		$reponse['erreur'] = 1;
    		$reponse['message'] = "echec du transfert vers uploads.";
	}
	 if ($reponse['erreur']==1) {
	    // On fait l'echo de l'array en encodant en json
        	echo json_encode($reponse);
	}else {
		// On retourne l'url de l'image
		$img_url = base_url().$nom;
		$reponse['erreur'] = 0;
       		 $reponse['image'] = $img_url;
       		 // On fait l'echo de l'array en encodant en json
      		  echo json_encode($reponse);
	}
}
    // // Configuration upload de fichier
    // // $config['upload_path'] = 'uploads/'; // dossier où l'on stocke les fichiers
    // // $config['allowed_types'] = 'png|jpg|gif'; // type de fichiers, ici des images
    // // $this->upload->initialize($config);
 
    // // Si l'upload n'a pas réussi, on renvoit une erreur (1)
    // if(!$this->upload->do_upload()):
                    // // Important : les erreurs renvoyées par CodeIgniter sont pré-formatées en HTML, on vire donc les tags
        // $erreur = strip_tags($this->upload->display_errors());
        // // On prépare une array...
        // $reponse['erreur'] = 1;
        // $reponse['message'] = $erreur;
        // // On fait l'echo de l'array en encodant en json
        // echo json_encode($reponse);
    // else:
        // // Si le fichier a bien été uploadé, on renvoit 0 en erreur + les infos du fichier
        // $fileInfos = array('upload_data' => $this->upload->data()); // On crée une array pour faciliter la récupération d'infos fichier
        // $img_url = base_url().'uploads/'.$fileInfos['upload_data']['file_name']; // On va renvoyer ici l'adresse du fichier
        // // On prépare une array...
        // $reponse['erreur'] = 0;
        // $reponse['image'] = $img_url;
        // // On fait l'echo de l'array en encodant en json
        // echo json_encode($reponse);
    // endif;
}
$reponse['erreur'] = 1;
$reponse['image'] = "Le PHP a bien été appelé, mais la fonction n'est pas executé, et c'est logique";
echo json_encode($reponse);
Donne nous la réponse
Nowwis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 15h14   #3
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Bonjour,


Effectivement je ne crois pas que tu aies besoin de créer une méthode upload_file() dans le fichier upload_php.php... du moins avec Prototype, tu ne le fais pas...

Sinon, ça ne serait pas à cause de ça ? :
Code :
$nom = $nom.$upload_dir;
devrait être :
Code :
$nom = $upload_dir.$nom;
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 17h01   #4
Candidat au titre de Membre du Club
 
Inscription : août 2008
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 66
Points : 11
Points : 11
Bonjour et merci pour vos suggestions. Alors j'ai essayé de rajouter
Code :
1
2
3
$reponse['erreur'] = 1;
$reponse['message'] = "Le PHP a bien été appelé, mais la fonction n'est pas executée, et c'est logique";
echo json_encode($reponse);
et je n'ai pas d'erreur, en revanche mon message ne s'affiche pas.
Si je l'enlève, j'ai alors une erreur de firebug qui me dit data=null soit, la fonction callback n'a rien reçu !

Je suppose donc qu'il faut simplement que je supprime ma fonction ?

(pour le $nom, j'avais en effet fait une erreur !)
titimoi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 17h12   #5
Membre éclairé
 
Avatar de Nowwis
 
Homme
Développeur Web
Inscription : juin 2009
Messages : 363
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2009
Messages : 363
Points : 365
Points : 365
Donc ça vient bien de là...

Maintenant, tu encodes en json mais tu ne décodes pas... forcément ça foire aussi.
Avec json par exemple :
function success jquery
Code :
var dataresponse = $.parseJSON(data);
Donc :
Code :
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
<?php
	$upload_dir="uploads/";
	$extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' );
	$maxsize=1024*1024;
 
	//test sur le transfert
	if ($_FILES['file']['error'] > 0) {
		$reponse['erreur'] = 1;
        	$reponse['message'] = "Erreur lors du transfert";
	}
 
	if ($_FILES['file']['size'] > $maxsize) {
		$reponse['erreur'] = 1;
        	$reponse['message'] = "Fichier trop gros";
	}
 
	$extension_upload = strtolower(  substr(  strrchr($_FILES['file']['name'], '.')  ,1)  );
 
	if ( !in_array($extension_upload,$extensions_valides) ) {
		$reponse['erreur'] = 1;
        	$reponse['message'] = "Fichier incorrect";
	}
 
	//Créer un identifiant difficile à deviner
	$nom = md5(uniqid(rand(), true));
	$nom = $nom.$upload_dir;
 
	//déplacement des fichiers
	$resultat = move_uploaded_file($_FILES['file']['tmp_name'],$nom);
	if (!$resultat) {
		$reponse['erreur'] = 1;
    		$reponse['message'] = "echec du transfert vers uploads.";
	}
	 if ($reponse['erreur']==1) {
	    // On fait l'echo de l'array en encodant en json
        	echo json_encode($reponse);
	}else {
		// On retourne l'url de l'image
		$img_url = base_url().$nom;
		$reponse['erreur'] = 0;
       		 $reponse['image'] = $img_url;
       		 // On fait l'echo de l'array en encodant en json
      		  echo json_encode($reponse);
	}
Code :
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
		<script type="text/javascript" src="lib/jquery.js" ></script>
			<script type="text/javascript" src="http://malsup.github.com/jquery.form.js"></script>
		<script type="text/javascript">
			$(document).ready(function()
			{   var options ={
					dataType:  'json', 
					beforeSubmit: function(){
					$('#results').html('<img src="img/loading.gif" id="waiting">'); // L'animation de chargement
					},
					success:function(data){
var dataresponse = $.parseJSON(data);
						$('#waiting').remove(); // on supprime l'animation de chargement
						// Si erreur est set à 1... on annule et on prévient
						if(dataresponse.erreur=='1'){
							$('#results').html(dataresponse.message); // On affiche le message d'erreur dans la div
						}
						// Si tout s'est bien passé, on affiche l'image
						else{
							$('#results').html('<img src="'+dataresponse.image+'" />');
						}
					}
 
				}
 
				$('#up').submit(function() { 
					// inside event callbacks 'this' is the DOM element so we first 
					// wrap it in a jQuery object and then invoke ajaxSubmit 
					$(this).ajaxSubmit(options); 
 
					// !!! Important !!! 
					// always return false to prevent standard browser submit and page navigation 
					return false; 
				}); 
 
				// A la selection d'une image, on submit automatiquement le formulaire
				$('#file').change(function() {
					$('#up').submit();
				});
			})    
	</script>
EDIT :
j'avais pas vu ton dataType... Si jamais ça ne marche pas, ce qui ne m'étonnerait pas, essaie d'enlever ce dataType... On verra bien ^^'
Nowwis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 17h28   #6
Candidat au titre de Membre du Club
 
Inscription : août 2008
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 66
Points : 11
Points : 11
merci pour la rapidité !

Alors, bizarre bizarre, retour à la case départ.. on dirait que cela n'aboutit pas.. j'ai la requette envoyée, mais mon gif est toujours là et aucune image n'est déplacée vers uploads.. donc le script ne renvoi rien. Voilà mes fichiers actuellement (décodage de json ajouté, pour l'histoire du datatype, ça viens d'ici aussi : la) :

upload_php.php
Code :
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
<?php
$upload_dir="uploads/";
$extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' );
$maxsize=1024*1024;
 
//test sur le transfert
if ($_FILES['file']['error'] > 0) {
	$reponse['erreur'] = 1;
	$reponse['message'] = "Erreur lors du transfert";
}
 
if ($_FILES['file']['size'] > $maxsize) {
	$reponse['erreur'] = 1;
	$reponse['message'] = "Fichier trop gros";
}
 
$extension_upload = strtolower(  substr(  strrchr($_FILES['file']['name'], '.')  ,1)  );
 
if ( !in_array($extension_upload,$extensions_valides) ) {
	$reponse['erreur'] = 1;
	$reponse['message'] = "Fichier incorrect";
}
 
//Créer un identifiant difficile à deviner
$nom = md5(uniqid(rand(), true));
$nom = $upload_dir.$nom;
 
//déplacement des fichiers
$resultat = move_uploaded_file($_FILES['file']['tmp_name'],$nom);
if (!$resultat) {
$reponse['erreur'] = 1;
$reponse['message'] = "echec du transfert vers uploads.";
}
 if ($reponse['erreur']==1) {
	// On fait l'echo de l'array en encodant en json
	echo json_encode($reponse);
}else {
	// On retourne l'url de l'image
	$img_url = base_url().$nom;
	$reponse['erreur'] = 0;
	$reponse['image'] = $img_url;
	// On fait l'echo de l'array en encodant en json
	echo json_encode($reponse);
}
 
 
 
    // // // Configuration upload de fichier
    // // // $config['upload_path'] = 'uploads/'; // dossier où l'on stocke les fichiers
    // // // $config['allowed_types'] = 'png|jpg|gif'; // type de fichiers, ici des images
    // // // $this->upload->initialize($config);
 
    // // // Si l'upload n'a pas réussi, on renvoit une erreur (1)
    // // if(!$this->upload->do_upload()):
                    // // // Important : les erreurs renvoyées par CodeIgniter sont pré-formatées en HTML, on vire donc les tags
        // // $erreur = strip_tags($this->upload->display_errors());
        // // // On prépare une array...
        // // $reponse['erreur'] = 1;
        // // $reponse['message'] = $erreur;
        // // // On fait l'echo de l'array en encodant en json
        // // echo json_encode($reponse);
    // // else:
        // // // Si le fichier a bien été uploadé, on renvoit 0 en erreur + les infos du fichier
        // // $fileInfos = array('upload_data' => $this->upload->data()); // On crée une array pour faciliter la récupération d'infos fichier
        // // $img_url = base_url().'uploads/'.$fileInfos['upload_data']['file_name']; // On va renvoyer ici l'adresse du fichier
        // // // On prépare une array...
        // // $reponse['erreur'] = 0;
        // // $reponse['image'] = $img_url;
        // // // On fait l'echo de l'array en encodant en json
        // // echo json_encode($reponse);
    // // endif;
index.php avec le script jquery à la fin
Code :
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
</form>
				<form id="up" action="upload_php.php" method="post" enctype="multipart/form-data">
				<input id="file" type="file" name="myFile">
				<div id="results"></div>
			</form>
		</section>
 
		<div id="footer">
			le footer
		</div>
		<script type="text/javascript" src="lib/jquery.js" ></script>
		<script type="text/javascript" src="http://malsup.github.com/jquery.form.js"></script>
		<script type="text/javascript">
			$(document).ready(function()
			{   var options ={
					dataType:  'json', 
					beforeSubmit: function(){
					$('#results').html('<img src="img/loading.gif" id="waiting">'); // L'animation de chargement
					},
					success:function(dataresponse){
						var data = $.parseJSON(dataresponse);
						$('#waiting').remove(); // on supprime l'animation de chargement
						// Si erreur est set à 1... on annule et on prévient
						if(data.erreur=='1'){
							$('#results').html(data.message); // On affiche le message d'erreur dans la div
						}
						// Si tout s'est bien passé, on affiche l'image
						else{
							$('#results').html('<img src="'+data.image+'" />');
						}
					}
 
				}
 
				$('#up').submit(function() { 
					// inside event callbacks 'this' is the DOM element so we first 
					// wrap it in a jQuery object and then invoke ajaxSubmit 
					$(this).ajaxSubmit(options); 
 
					// !!! Important !!! 
					// always return false to prevent standard browser submit and page navigation 
					return false; 
				}); 
 
				// A la selection d'une image, on submit automatiquement le formulaire
				$('#file').change(function() {
					$('#up').submit();
				});
			})    
	</script>
EDIT: si je vire le dataType, firebug me donne une erreur json.parse unexpected character...
titimoi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 17h48   #7
Membre éclairé
 
Avatar de Nowwis
 
Homme
Développeur Web
Inscription : juin 2009
Messages : 363
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2009
Messages : 363
Points : 365
Points : 365
Bon alors Firebug va nous servir !

Ouvre ton Firebug et va dans "console".
Regarde quand tu envoies ton form si tu as quelques chose comme l'image jointe.


Trois possibilités :
Oui (si ce n'est pas rouge):
Ton fichier a bien été trouvé, bien executé... Clique dessus pour voir la réponse.

Oui (rouge) : problème dans le fichier, surenement non trouvé.

rien : ton ajax se lance pas du tout.

Tiens nous au courrant (screen si tu peux )
Images attachées
Type de fichier : png Sans titre.png (17,2 Ko, 3 affichages)
Nowwis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2012, 01h51   #8
Candidat au titre de Membre du Club
 
Inscription : août 2008
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 66
Points : 11
Points : 11
Tout d'abord merci, et désolé pour le retard. Alors oui ma requête POST est bien exécutée vers mon fichier upload_php.php

Voilà la réponse :

Code :
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
<br />
<font size='1'><table class='xdebug-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined index: file in C:\wamp\www\blabla\upload_php.php on line <i>7</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0176</td><td bgcolor='#eeeeec' align='right'>689384</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\wamp\www\blabla\upload_php.php' bgcolor='#eeeeec'>..\upload_php.php<b>:</b>0</td></tr>
</table></font>
<br />
<font size='1'><table class='xdebug-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined index: file in C:\wamp\www\blabla\upload_php.php on line <i>12</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0176</td><td bgcolor='#eeeeec' align='right'>689384</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\wamp\www\blabla\upload_php.php' bgcolor='#eeeeec'>..\upload_php.php<b>:</b>0</td></tr>
</table></font>
<br />
<font size='1'><table class='xdebug-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined index: file in C:\wamp\www\blabla\upload_php.php on line <i>17</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0176</td><td bgcolor='#eeeeec' align='right'>689384</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\wamp\www\blabla\upload_php.php' bgcolor='#eeeeec'>..\upload_php.php<b>:</b>0</td></tr>
</table></font>
<br />
<font size='1'><table class='xdebug-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined index: file in C:\wamp\www\blabla\upload_php.php on line <i>29</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0176</td><td bgcolor='#eeeeec' align='right'>689384</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\wamp\www\blabla\upload_php.php' bgcolor='#eeeeec'>..\upload_php.php<b>:</b>0</td></tr>
</table></font>
{"erreur":1,"message":"echec du transfert vers uploads."}
à voir la fin du message, je suppose que j'ai un souci avec mon transfert..

EDIT2: Je viens de tester l'affichage de $_FILES['file']['name'] et mistère, cela n'affiche rien.. donc aucun fichier n'est présent ?? soit l'envoie se passe mal, soit la réception se passe mal..

(mes tests de dessous sont tous liés à ce problème, pas de nom donc pas d'extension et rien à déplacer du coup.. d'où les erreurs succéssives )

EDIT :
Je ne comprends pas d'où viens le problème.. j'ai fait afficher la variable $nom à la suite du message d''erreur et voilà ce que j'ai en mettant "./upload/" :


Code :
{"erreur":1,"message":"echec du transfert vers uploads .\/uploads\/328838cd4c1e29d3de541955f7723a54"}
ou en mettant uploads/ ce qui pour moi est pareil

Code :
{"erreur":1,"message":"echec du transfert vers uploads uploads\/1698e7d39df17413138bab07a777d299
ça semble correcte non ?

Ensuite j'ai fait un test, j'ai modifié la condition de mon if juste après le déplacement

Code :
1
2
3
4
5
//déplacement des fichiers
$resultat = move_uploaded_file($_FILES['file']['tmp_name'],$nom);
if ($resultat) {
$reponse['erreur'] = 1;
$reponse['message'] = "echec du transfert vers uploads ".$nom;
avant j'avais comme condition if (!$resultat)
et là la réponse est :
Code :
{"erreur":1,"message":"Fichier incorrect"}
ça sous-entends qu'il y a aussi un problème avec le test des extensions.. alors que j'envoie une image .jpg ...

Toujours dans l'optique de test j'ai modifié alors mon if de test d'extension :
Code :
1
2
3
4
if (in_array($extension_upload,$extensions_valides)) {
	$reponse['erreur'] = 1;
	$reponse['message'] = "Fichier incorrect";
}
j'avais avant bien sûr if (!in_array($extension_upload,$extensions_valides)) et là du coup je n'ai plus de message... je ne sais pas ce qui coince..
titimoi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2012, 08h53   #9
Membre éclairé
 
Avatar de Nowwis
 
Homme
Développeur Web
Inscription : juin 2009
Messages : 363
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2009
Messages : 363
Points : 365
Points : 365
Bonjour,

En y regardant de plus près, je note aussi :

Code :
1
2
3
<form id="up" action="upload_php.php" method="post" enctype="multipart/form-data">
				<input id="file" type="file" name="myFile">
				<div id="results"></div>
Ton fichier s'appelle "myFile" et non "file" (dans un form, c'est le name qui compte, et non l'id).

Pour ne pas tout modifier, je te conseille de remplacer tous tes "myFile" par "file" et de tester. Reposte l'erreur s'il y en a une autre
Nowwis est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/01/2012, 11h36   #10
Candidat au titre de Membre du Club
 
Inscription : août 2008
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 66
Points : 11
Points : 11
Bingo t'as trouvé le princiapl souci !! merci beaucoup.. l'habitude du JS m'a fait oublier le champs "nom" ! Alors je récap' tous les soucis, car il y en avait d'autres.

La fonction base_url était inconnue. Ensuite ma variable $reponse n'etait pas identifiée au début, du coup s'il n'y avait pas d'erreur et bien certain test échouaient. Pour finir le dataType de mon JS est indispensable, et le JSONparse n'est par contre pas utile. Voici donc le code final:

upload_php.php
Code :
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
<?php
$upload_dir="uploads/";
$extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' );
$maxsize=1024*1024;
$reponse['erreur'] = 0;
$reponse['message'] = "";
 
//test sur le transfert
if ($_FILES['file']['error'] > 0) {
	$reponse['erreur'] = 1;
	$reponse['message'] = "Erreur lors du transfert";
}
 
if ($_FILES['file']['size'] > $maxsize) {
	$reponse['erreur'] = 1;
	$reponse['message'] = "Fichier trop gros";
}
 
$extension_upload = strtolower(  substr(  strrchr($_FILES['file']['name'], '.')  ,1)  );
 
if ( !in_array($extension_upload,$extensions_valides) ) {
	$reponse['erreur'] = 1;
	$reponse['message'] = "Fichier incorrect";
}
 
//Créer un identifiant difficile à deviner
$nom = md5(uniqid(rand(), true));
$nom = $upload_dir.$nom.".".$extension_upload;
 
//déplacement des fichiers
$resultat = move_uploaded_file($_FILES['file']['tmp_name'],$nom);
if (!$resultat) {
$reponse['erreur'] = 1;
$reponse['message'] = "echec du transfert vers uploads.";
}
 if ($reponse['erreur']==1) {
	// On fait l'echo de l'array en encodant en json
	echo json_encode($reponse);
}else {
	// On retourne l'url de l'image
	$img_url = $nom;
	$reponse['erreur'] = 0;
	$reponse['image'] = $img_url;
	// On fait l'echo de l'array en encodant en json
	echo json_encode($reponse);
}
et le form + le script :
Code :
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
			<form id="up" action="upload_php.php" method="post" enctype="multipart/form-data">
				<input id="file" type="file" name="file">
				<div id="results"></div>
			</form>
		</section>
 
		<div id="footer">
			le footer
		</div>
		<script type="text/javascript" src="lib/jquery.js" ></script>
		<script type="text/javascript" src="http://malsup.github.com/jquery.form.js"></script>
		<script type="text/javascript">
			$(document).ready(function()
			{   var options ={
					dataType:  'json', 
					beforeSubmit: function(){
					$('#results').html('<img src="img/loading.gif" id="waiting">'); // L'animation de chargement
					},
					success:function(data){
						$('#waiting').remove(); // on supprime l'animation de chargement
						// Si erreur est set à 1... on annule et on prévient
						if(data.erreur=='1'){
							$('#results').html(data.message); // On affiche le message d'erreur dans la div
						}
						// Si tout s'est bien passé, on affiche l'image
						else{
							$('#results').html('<img src="'+data.image+'" />');
						}
					}
				}
 
				$('#up').submit(function() { 
					// inside event callbacks 'this' is the DOM element so we first 
					// wrap it in a jQuery object and then invoke ajaxSubmit 
					$(this).ajaxSubmit(options); 
 
					// !!! Important !!! 
					// always return false to prevent standard browser submit and page navigation 
					return false; 
				}); 
 
				// A la selection d'une image, on submit automatiquement le formulaire
				$('#file').change(function() {
					$('#up').submit();
				});
			})    
		</script>
Merci encore pour votre aide !
titimoi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h57.


 
 
 
 
Partenaires

Hébergement Web