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 :

[AJAX] Faire passer une variable $_FILE par AJAX


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Artisan menuisier alu pvc
    Inscrit en
    Février 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Artisan menuisier alu pvc

    Informations forums :
    Inscription : Février 2007
    Messages : 23
    Points : 27
    Points
    27
    Par défaut [AJAX] Faire passer une variable $_FILE par AJAX
    Bonjour, j'aimerais faire un script d'upload en AJAX/PHP, cependant j'ai du mal à faire passer le input type="file"...
    J'ai essayer en faisant passer son .value et en recréant la variable dans le fichier php:
    $_FILE['file'] = $valueDuInput; mais apparement c'était trop beau pour que sa marches, sa ne dois pas marcher car sa ne recré pas les variable $_FILE['file']['size'] etc...

    Voici mon JS (il vous paraîtras un peu bizarre, je n'utilises pas la class par défaut de l'ajax, j'utilises celle de Nicolas LE GALL:
    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
    function upload(element, linkfile, linkbouton, linkerror, linkhidden) // Upload d'image
    {
    	if(linkfile.value == '') 
    	{
    		if (document.getElementById) document.getElementById(linkerror).innerHTML = 'Champs non renseigné.';
    	}
    	else
    	{
    		var xhr = new XHR();
    		xhr.loading = function(xhr)
    		{
    			linkbouton.value = 'Chargement...';
    			linkbouton.disabled = true;
    		}
    		xhr.complete = function(xhr)
    		{
    			var regErreur = new RegExp ('^E:', 'i');
    			var erreur = xhr.responseText.match(regErreur);
    			if(erreur)
    			{
    				msgErreur = xhr.responseText.replace(regErreur, '');
    				linkbouton.value = 'Uploadez!';
    				linkbouton.disabled = false;
    				if (document.getElementById) document.getElementById(linkerror).innerHTML = msgErreur;
    			}
    			else
    			{
    				linkhidden.value = xhr.responseText;
    				linkbouton.value = 'OK';
    			}
    		}
    	}
    	var file = linkfile.value;
    	xhr.appendData('file', file);
    	xhr.appendData('type', element);
    	xhr.send('ajax/upload.php');
    }
    Voici mon 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
    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
    <?php
    	function upload($file, $type)
    	{
    		include('../config.php');
    		mysql_connect($host, $user, $pass);
    		mysql_select_db($db);
    		$_FILE['file'] = $file;
    		$config_sql = mysql_query('SELECT * FROM config');
    		$config = mysql_fetch_array($config_sql);
    		$error = '';
    		switch($type)
    		{
    			case 'signature':
    				$max_width = $config['signature_max_width'];
    				$max_height = $config['signature_max_height'];
    				$max_size = $config['signature_max_size'];
    				break;
    			case 'bouton_partenaire':
    				$max_width = $config['bouton_partenaire_max_width'];
    				$max_height = $config['bouton_partenaire_max_height'];
    				$max_size = $config['bouton_partenaire_max_size'];
    				break;
    			case 'banniere_partenaire':
    				$max_width = $config['banniere_partenaire_max_width'];
    				$max_height = $config['banniere_partenaire_max_height'];
    				$max_size = $config['banniere_partenaire_max_size'];
    				break;
    			default:
    				$max_width = NULL;
    				$max_height = NULL;
    				$max_site = NULL;
    		}
    		if($max_width == NULL OR $max_height == NULL OR $max_size == NULL)
    		{
    			$error = "E:Type d'upload invalide";
    		}
    		else
    		{
    			if($_FILE['file']['error'] > 0) // Si le transfert du fichier n'a pas eu lieu
    			{
    				$error = "E:Erreur lors du tranfsert du fichier.";
    			}
    			else
    			{
    				if($_FILE['file']['size'] > $max_size) // Si le fichier est trop lourd
    				{
    					$error = "E:Le fichier est trop lourd, limitée à ".$max_size/1024 ."Ko.";
    				}
    				else
    				{
    					$extension_valides = array('jpg', 'jpeg', 'gif', 'png');
    					$extension_file = substr(strrchr($_FILE['file']['name'], '.'),1);
    					if (!in_array($extension_file,$extensions_valides))
    					{
    						$error = "E:Le type de fichier n'est pas valide.";
    					}
    					else
    					{
    						$file_sizes = getimagesize($_FILE['file']['tmp_name']);
    						if ($file_sizes[0] > $max_width OR $file_sizes[1] > $max_height)
    						{
    							$error = "E:L'image est trop grande, limitée à ".$max_width."*".$max_height.".";
    						}
    						else
    						{
    							$microtime = microtime();
    							$destination_file = $config['partenaire_upload_doc'].str_replace(' ','',$type.'_'.$nom.'_'.$microtime);
    							$transfert_file = move_uploaded_file($_FILE['file']['tmp_name'],$destination_file);
    							if (!$transfert_file)
    							{
    								$error = "E:Erreur lors du transfert du fichier, si l\'erreur persiste, merci d\'en informer le webmaster.";
    							}
    						}
    					}
    				}
    			}
    		}
    		if (!empty($error))
    		{
    			return $error;
    		}
    		else
    		{
    			return $destination_file;
    		}
    	}
    echo upload($_POST['file'], $_POST['type']);
    ?>
    Il n'existe pas un troisieme format de requête, GET, POST et FILE, non?

  2. #2
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Ce que tu cherches à faire n'est pas possible en AJAX...

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Février 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Il n y a que GET et POST, il faut utiliser la methode POST ça c'est sure
    est ce que t'as essayé de spécfier le type d'encodage "multipart/form-data" ??

  4. #4
    Membre du Club
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 60
    Points : 47
    Points
    47
    Par défaut
    FremyCompany es-tu sûr ?
    Même en spécifiant le type des données que l'on envoie ? et en envoyant en POST ?
    Il y a-t-il pas possibilité de le faire avec des frame ?

    Mais bon en même temps je pense que c'est pas tellement la solution !

  5. #5
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Citation Envoyé par sacados1
    FremyCompany es-tu sûr ?
    Même en spécifiant le type des données que l'on envoie ? et en envoyant en POST ?
    Il y a-t-il pas possibilité de le faire avec des frame ?

    Mais bon en même temps je pense que c'est pas tellement la solution !
    J'en suis certain, oui.

    En effet une frame caché est une bonne solution.


    Un essai vite comme ca :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <iframe name="frame1" id="frame1" style="visibility: hidden; width:0px; height: 0px; position: absolute; top:-1px; left:-1px"></iframe>
    <form name="form1" id="form1" target="frame1"><input type="file" name="file1" /></form>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function asyncSend(callBack) {
       document.forms["form1"].submit();
       window.frames["frame1"].onload = callBack;
    }
     
    // utilisation
    asyncSend(function() {
      var win = this;
      var doc = this.document;
      // ...
    })

  6. #6
    Membre du Club
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 60
    Points : 47
    Points
    47
    Par défaut
    Encore moi !

    Je comprend pas bien. Désolais ça fait que 1 mois que j'exploite javascript !
    Je comprend pas la fonction callback ... et quand tu mets utilisation de celle-ci c'est un peu du chinois pour moi

  7. #7
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    ben c'est simple, une fonction c'est une variable et je l'utilise comme tel
    Voici un essemble de codes similaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function f1() { /* ... */ }
    setTimeout(f1, 1000)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var f1 = function() { /* ... */ };
    setTimeout(f1, 1000)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout(function() { /* ... */ }, 1000)

  8. #8
    Membre du Club
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 60
    Points : 47
    Points
    47
    Par défaut
    Re moi !!!

    Je crois que j'ai trouvé mon bonheur !!!!
    J'ai juste à mettre un code php qui accepte pas tous les fichier et c'est bon !!!
    Car ce script en plus de faire un téléchargement ajax (iframe) il fait un multi upload le bonheure quoi !!
    La librairie scriptaculous.js et prototype.js sont necessaire mais aprés tout quand on voit le résultat ça rend gaga !!!!

    http://blog.nemstudio.com/post127/cl...e-de-fichiers/

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

Discussions similaires

  1. [AJAX] Récupérer une variable retournée par ajax
    Par renaud26 dans le forum jQuery
    Réponses: 7
    Dernier message: 03/07/2015, 00h00
  2. [PHP 5.2] Impossible de passer une variable php en ajax
    Par rama56 dans le forum Langage
    Réponses: 4
    Dernier message: 14/04/2015, 17h22
  3. Réponses: 0
    Dernier message: 07/06/2012, 16h07
  4. Réponses: 2
    Dernier message: 11/05/2010, 10h12
  5. [AJAX] Faire passer une variable AJAX dans autre chose qu'un <div></div>
    Par fixbraun dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/02/2009, 14h34

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