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

JavaScript Discussion :

Récupérer en JS un $_FILES sur un onclick


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Points : 23
    Points
    23
    Par défaut Récupérer en JS un $_FILES sur un onclick
    Bonjour à tous,

    je m'explique pour ceux qui ne verrait pas le but de mon message.
    En fait je fais du traitement AJAX sur une page qui me permet de récupérer les données du image que j'ai choisi et que par la suite je vais stocker dans ma BDD.

    J'utilisais ce bout de code quand je faisais le traitement dans un <form> (classique), sauf que maintenant j'aimerais le faire en AJAX et donc me faire passer les variables $_FILES[image][tmp_name], $_FILES[image][type], $_FILES[image][size] dans du JS.

    Je ne vois pas trop comment faire.

    Pour ceux qui veulent voici mon ancien 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
    	 if(!is_uploaded_file($_FILES['image']['tmp_name'])){
    		//echo 'Un problème est survenu durant l opération. Veuillez réessayer !';
    	}
    	 else {
    		//liste des extensions possibles    
    		$extensions = array('/png', '/gif', '/jpg', '/jpeg');
     
    		//récupère la chaîne à partir du dernier / pour connaître l'extension
    		$extension = strrchr($_FILES['image']['type'], '/');
     
    		//vérifie si l'extension est dans notre tableau            
    		if(!in_array($extension, $extensions)){
    			//echo 'Vous devez uploader un fichier de type png, gif, jpg, jpeg.';
    		}
    		else {         
     
    			//on définit la taille maximale
    			define('MAXSIZE', 50000);        
    			if($_FILES['image']['size'] > MAXSIZE){
    			   //echo 'Votre image est supérieure à la taille maximale de '.(MAXSIZE/1000).' kilo-octets (Ko)';
    			}
    			else {
    				//on se connecte (remplacer les paramètres de connexion)
    				include ($connexion);
     
    				//Lecture du fichier. On doit utiliser la fonction mysql_escape_string car les données binaires contiennent des caractères spéciaux.
    				$image = mysql_escape_string(file_get_contents($_FILES['image']['tmp_name']));
     
    				$requete_count_image = mysql_query("SELECT COUNT( * ) NBR_ENTREE FROM images where id_film= '".$id_film."' ") or die(mysql_error());
    				$row_count_image = mysql_fetch_object($requete_count_image) or die(mysql_error());
    				if($row_count_image->NBR_ENTREE == 1){
    					mysql_query("UPDATE images SET img='$image', extension = '$_FILES[image][type]' WHERE id_film = '".$id_film."' ") or exit (mysql_error());
    				}
    				else{
    					mysql_query("INSERT INTO images(id_film, img, extension) VALUES('".$id_film."', '".$image."', '".$_FILES[image][type]."')") or exit (mysql_error());
    				}
     
    				include ($deconnexion);
    			}
    		}
    	}
    Merci d'avance de vos réponses.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Salut.

    Pour des raisons de sécurité, le value d'un input de type file est reasonly, il est donc impossible de transmettre ces données autrement que par un submit du formulaire et donc un rechargement de la page.

    Cela t'embête peut-être, mais dis toi bien que si ce n'était pas le cas, un simple fichier JavaScript permettrait de récupérer n'importe quel fichier sur ta machine sans que tu ne t'en rende compte

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Points : 23
    Points
    23
    Par défaut
    Mince, en effet cela m'embête un peu mais tampis j'essayerai de faire d'une autre manière alors...

    Je te remercie en tout cas pour cette réponse aussi rapide.

    Bonne journée

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Points : 23
    Points
    23
    Par défaut
    Je reposte dans le cas où ca pourrait intéresser d'autre personne.

    J'ai réussi à résoudre mon problème en utilisant une autre méthode :


    Le code JS :

    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
    function startUpload(){
          document.getElementById('f1_upload_process').style.visibility = 'visible';
          document.getElementById('f1_upload_form').style.visibility = 'hidden';
          return true;
    }
     
    function stopUpload(success,erreur){
          var result = '';
     
          if (success == 1){
             result = '<span>L\'image a été téléchargé avec succès<\/span><br/><br/>';
          }
          else {
             result = '<span>Une erreur est survenue<\/span><br />';
    		 if(erreur == 1){
    			result = '<span>Un problème est survenu durant l\'opération. Veuillez réessayer !<\/span>';
    		 }
    		 if(erreur==2){
    			result = '<span>Vous devez uploader un fichier de type png, gif, jpg, jpeg.<\/span>';
    		 }
    		 if(erreur==3){
    			result = '<span>Votre image est supérieure à la taille maximale acceptée.<\/span>';
    		 }
    		 result = result+"<br/><br/>";
          }
          document.getElementById('f1_upload_process').style.visibility = 'hidden';
          document.getElementById('f1_upload_form').innerHTML = result + '<label><input name="image" type="file" size="30" /><\/label><br /><br /><label><input type="submit" name="submitBtn" value="Upload" /><\/label><br /><label>Format accepté (png, gif, jpg, jpeg)<br /> Taille inférieur à 50ko<br /><\/label>';
          document.getElementById('f1_upload_form').style.visibility = 'visible';      
          return true;   
    }
    Le code 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
    	<form action="Materiel/upload.php?id_film=<? echo $id_film; ?>" method="post" enctype="multipart/form-data" target="upload_target" onsubmit="startUpload();" >
            <p id="f1_upload_process" style="visibility:hidden">Loading...<br/><img src="Materiel/loader.gif" /></p>
            <p id="f1_upload_form" align="center">
    		<?php
                            include($connexion);
                
                            $affichage = mysql_query("SELECT id_img FROM images where id_film = '$id_film' ") or exit (mysql_error());
                            while($result = mysql_fetch_assoc($affichage)) {
                                    echo '<a align="center" href="Materiel/apercu.php?id_img='.$result[id_img].'" target="popup" onClick="wopen(\'Materiel/apercu.php?id_img='.$result[id_img].'\', \'popup\', 700, 700); return false;"><img src="Materiel/apercu.php?id_img='.$result[id_img].'" height="280" width="180" /></a>';
                            }
                            include($deconnexion);
                    ?>
    		<br /><br /><br />
            <label> 
                <input name="image" type="file"/>
            </label>
    		<br /><br />
            <label>
                <input type="submit" name="submitBtn" value="Upload" />
            </label>
    		<br />
    		<label>Format accepté (png, gif, jpg, jpeg)<br /> Taille inférieur à 50ko<br /></label>
            </p>
    		<iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid #fff;"></iframe>
     
        </form>
    La page de traitement :
    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
    <?php
       $result = 0;
            $id_film=$_REQUEST['id_film'];
            $msg = 0;
     
            $path="../../";
            $connexion = $path."BDD/connexion.php";
            $deconnexion = $path."BDD/deconnexion.php";
     
            //Indique si le fichier a été téléchargé
             if(!is_uploaded_file($_FILES['image']['tmp_name'])){
                    $msg = 1;
            }
             else {
                    //liste des extensions possibles    
                    $extensions = array('/png', '/gif', '/jpg', '/jpeg');
                    
                    //récupère la chaîne à partir du dernier / pour connaître l'extension
                    $extension = strrchr($_FILES['image']['type'], '/');
                    
                    //vérifie si l'extension est dans notre tableau            
                    if(!in_array($extension, $extensions)){
                            $msg = 2;
                    }
                    else {         
     
                            //on définit la taille maximale
                            define('MAXSIZE', 50000);        
                            if($_FILES['image']['size'] > MAXSIZE){
                               $msg = 3;
                            }
                            else {
                                    //on se connecte (remplacer les paramètres de connexion)
                                    include ($connexion);
                                    
                                    //Lecture du fichier. On doit utiliser la fonction mysql_escape_string car les données binaires contiennent des caractères spéciaux.
                                    $image = mysql_escape_string(file_get_contents($_FILES['image']['tmp_name']));
                                    
                                    $requete_count_image = mysql_query("SELECT COUNT( * ) NBR_ENTREE FROM images where id_film= '".$id_film."' ") or die(mysql_error());
                                    $row_count_image = mysql_fetch_object($requete_count_image) or die(mysql_error());
                                    if($row_count_image->NBR_ENTREE == 1){
                                            mysql_query("UPDATE images SET img='$image', extension = '$_FILES[image][type]' WHERE id_film = '".$id_film."' ") or exit (mysql_error());
                                    }
                                    else{
                                            mysql_query("INSERT INTO images(id_film, img, extension) VALUES('".$id_film."', '".$image."', '".$_FILES[image][type]."')") or exit (mysql_error());
                                    }
                                    $result = 1;
                                    include ($deconnexion);
                            }
                    }
            }
            sleep(1);
            
    ?>
     
    <script language="javascript" type="text/javascript">window.top.window.stopUpload(<?php echo $result; ?>,<?php echo $msg; ?>);</script>

    Me manque plus qu'à remettre l'image que j'ai uploadé sur la page php et c'est parfait.

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

Discussions similaires

  1. Détruire un bouton sur son OnClick
    Par Volfoni dans le forum C++Builder
    Réponses: 5
    Dernier message: 08/06/2006, 12h00
  2. Mettre deux actions sur un onClick
    Par budiste dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 16/11/2005, 16h17
  3. Récupérer les comptes mail créés sur Outlook
    Par AnnSo dans le forum Langage
    Réponses: 1
    Dernier message: 05/11/2005, 12h16
  4. Rendre un champ non modifiable sur un onclick
    Par damjal dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/10/2005, 01h16
  5. Réponses: 2
    Dernier message: 20/08/2004, 17h10

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