IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Script php de transfert après upload d'image ne fonctionne pas !


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 66
    Points : 26
    Points
    26
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    		<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 : 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
    <?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ù..

  2. #2
    Membre confirmé
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Points : 498
    Points
    498
    Par défaut
    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 : 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
    <?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

  3. #3
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $nom = $nom.$upload_dir;
    devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nom = $upload_dir.$nom;

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 66
    Points : 26
    Points
    26
    Par défaut
    Bonjour et merci pour vos suggestions. Alors j'ai essayé de rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !)

  5. #5
    Membre confirmé
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Points : 498
    Points
    498
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    var dataresponse = $.parseJSON(data);
    Donc :
    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
    <?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 : 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
    		<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 ^^'

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 66
    Points : 26
    Points
    26
    Par défaut
    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 : 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
    <?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 : 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
    </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...

  7. #7
    Membre confirmé
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Points : 498
    Points
    498
    Par défaut
    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 Images attachées  

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 66
    Points : 26
    Points
    26
    Par défaut
    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 : 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
    <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 : Sélectionner tout - Visualiser dans une fenêtre à part
    {"erreur":1,"message":"echec du transfert vers uploads .\/uploads\/328838cd4c1e29d3de541955f7723a54"}
    ou en mettant uploads/ ce qui pour moi est pareil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    {"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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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..

  9. #9
    Membre confirmé
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Points : 498
    Points
    498
    Par défaut
    Bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 66
    Points : 26
    Points
    26
    Par défaut
    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 : 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
    <?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 : 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
    			<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 !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] upload de fichier image ne fonctionne pas
    Par drogba72 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/08/2011, 16h13
  2. Réponses: 1
    Dernier message: 17/05/2010, 10h21
  3. formulaire upload, les images ne sont pas sauvées
    Par san1981 dans le forum Langage
    Réponses: 37
    Dernier message: 05/08/2008, 21h37
  4. [Upload] upload d'images ne fonctionnant qu'en local
    Par visqueu dans le forum Langage
    Réponses: 1
    Dernier message: 14/05/2008, 10h34
  5. [PHP-JS] PHP JAVACRIPT - Appel d'un onclick - Ca ne fonctionne pas !
    Par bilou95 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/07/2007, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo