8791 sujets

Développement web côté serveur, CMS

bonjour à tous,
j'utilise un formulaire pour envoyer des fichiers sur un serveur et de donnees dans une base de donnees sql.
le porbleme arrive quand l'utilisateur envoie un fichier comportant un accent.
Dans la base le nom du fichier est ok mais dans mon repertoire uploads c'est pas pareil
ex:
dans ma base le fichier se nomme :
143-12é3913689.jpg
dans mon repertoire /uploads:
143-12é3913689.jpg
ce qui pose un probleme quand je veux afficher l'image.
alors j'ai fait ça

if (!empty($_FILES)) 
{              
	foreach($_FILES as $index => $array_image)
	{                  
	if(!empty($_FILES[$index]['name'])) 
		{    
		             
	$chemin_image = $repertoire_images .'/'. $id_user . '-' . basename($_FILES[$index]['name']);
	$chemin_image = strtr($chemin_image,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');	
	$chemin_image= preg_replace('/([^.a-z0-9]+)/i', '_', $chemin_image);     
	if (move_uploaded_file($_FILES[$index]['tmp_name'], $chemin_image)) 
		{
		$sql= sprintf("Insert Into users_images (id_image, id_user, chemin_image) Values(null, $id_user, '%s')",                              
	mysql_real_escape_string($chemin_image));                          
	mysql_query($sql);                      
		} 

ça marche mais ça ne m'enregistre pas dans mon repertoire /uploads. ça renomme le fichier en
uploads_143_12yy3913689.jpg

qui sait comment faire ?
Merci d'avance
Modifié par pareto (12 Apr 2010 - 11:29)
salut
le probleme est que je ne peux pas savoir si l'user va envoyer un fichier avec un accent...
et ça ne marche pas...
en fait si ça marche mmais ça ne me le met pas dans le bon repertoire... à savoir uploads/
il me degage le /...
Modifié par pareto (09 Apr 2010 - 11:08)
et bien pour le second probleme rajoute le / dans ton preg_replace et n'utilise pas / comme delimiteur

$chemin_image= preg_replace('!([^.a-z0-9/]+)!i', '_', $chemin_image); 


et pour le 1er et bien fais une fonction en front qui fait pareil et applique-la toujours pour calculer le nom d'appel de tes images. c'est pas si lourd.

sinon I don't know, next!
Modifié par CPascal (09 Apr 2010 - 11:21)
bon marche pas....

APPEL A TOUTES LES BONNES VOLONTES...

qui pourrait transformer mon code :

if(empty($erreurs)) 
	{  
	mysql_query("SET NAMES 'utf8'");       
if (!empty($_FILES)) 
	{              
	foreach($_FILES as $index => $array_image)
		{                  
		if(!empty($_FILES[$index]['name'])) 
			{    
		$chemin_image = $repertoire_images .'/'. $id_user . '-' . basename($_FILES[$index]['name']);
$chemin_image = strtr($chemin_image,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');	
$chemin_image= preg_replace('/([^.a-z0-9]+)/i', '_', $chemin_image);     
											if (move_uploaded_file($_FILES[$index]['tmp_name'], $chemin_image)) 
			{
			$sql= sprintf("Insert Into users_images (id_image, id_user, chemin_image) Values(null, $id_user, '%s')",                              
			mysql_real_escape_string($chemin_image));  
			mysql_query($sql);                      
			} 
			else
			{
		$erreurs[] = 'Erreur survenue durant la copie de l\'image '.$_FILES[$index]['name'].'. Vérifier les droits du répertoire '.$repertoire_images;
			break;                      
			}                  							}              
										}          
}                   


pour que dans ma base de donnees le nom des image s'affiche correctement (sans accent, sans espace) ainsi que sur le serveur (là j'ai des é" qui s'affiche comme "é" sur le serveur et y? dans ma base.

Merci d'avance)
Ben si tu as réussi, tu pourrai partager la solution, d'autres personnes seraient ravie de lire la solution alors qu'elles sont dans le même cas que toi.