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?