Nom de fichier avec caractère accentué

Eléphant du PHP | 331 Messages

27 avr. 2007, 01:53

Bonjour,

J'ai un problème bien étrange.

J'ai 2 fichiers qui recoivent des données d'un formulaire. En fait c'est un album photo en ligne.

D'une part on envoie la photo avec sont nom et description et l'autre parti c'est si on veut modifier le nom la description ou changer la photo.

Les utilisateur mette parfois des espaces ou des caractère accentué dans le nom de fichier de leur photo.

J'ai donc utilisé une petit bout de code bien simple:
$_FILES["images"]['name'] = str_replace(" ","_",$_FILES["images"]['name']);
		$_FILES["images"]['name'] = strtr($_FILES["images"]['name'],
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
Mon problème est que pour la page d'ajout de la nouvelle photo sa ne fonctionne pas du tout les accents et espaces reste là.

Mais la page de update bien sa fonctionne parfaitement.

Et c'est le même code.

Je vous colle le code entier des 2 pages en espérant que vous y verrez se que je n'ai pas vu car sa fait plusieurs jours que je m'y casse la tête.

Merci!

Page ajout.php:
if(isset($_POST["submit"]))
{
	if($_POST["categorie_id"] >= 1)
	{
	include("../config.php");
	$connect=mysql_connect($host, $login, $password) or die("Could not connect to database in localhost!");
	$result=mysql_select_db($db) or die("Could not select database");
	$sqlquery="INSERT INTO photos VALUES('','".addslashes($_POST["nom"])."','".addslashes($_POST["description"])."','".$_POST["categorie_id"]."','".addslashes($_POST["ord_affiche"])."','')" or die("Table introuvable");
	$queryresult=mysql_query($sqlquery) or die("Could not execute mysql query!");
	$id = mysql_insert_id();
	
	if($_FILES["images"]['name'] <> "")
	{	
		
		$extptmp = explode(".",$_FILES["images"]['name']);	
		$_FILES["images"]['name'] = str_replace(" ","_",$_FILES["images"]['name']);
		$_FILES["images"]['name'] = strtr($_FILES["images"]['name'],
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
		if(is_uploaded_file($_FILES["images"]['tmp_name'])) 
		{
			move_uploaded_file($_FILES["images"]['tmp_name'], "".$pathImg."photos/img_prod/".$_FILES["images"]['name'].""); 
			$sqlup = "UPDATE photos SET image=\"".$_FILES["images"]['name']."\" where id=".$id."";
			$conn = mysql_connect($host, $login, $password) or die ("Erreur de connection");
			mysql_select_db($db) or die("erreur de DB");
			$rsup = mysql_query($sqlup) or die ($sqlup);
			mysql_close($conn);
				
}
}
header("location: succes_ajout_photos.php?id=$id");
}
else
{
include("../admin/header.php");
echo "<p align=\"center\">Vous devez s&eacute;lectionner une cat&eacute;gorie!<br><br>SVP revenez en arri&egrave;re et corrigez.</p>";
include("../admin/footer.php");
die();
}
}
Page update.php:
if(isset($_POST["submit"]))
{
	include("../config.php");
	$connect=mysql_connect($host, $login, $password) or die("Could not connect to database in localhost!");
	$result=mysql_select_db($db) or die("Could not select database");
	$sqlquery="update photos set nom=\"".addslashes($_POST["nom"])."\", description=\"".addslashes($_POST["description"])."\", categorie_id=\"".$_POST["categorie_id"]."\", ord_affiche=\"".addslashes($_POST["ord_affiche"])."\" where id=\"".$_POST["id"]."\"" or die("Mise à jour image impossible");
	$queryresult=mysql_query($sqlquery) or die("Could not execute mysql query44!");
	
	$sqlsel = "select * from photos where id=\"".$_POST["id"]."\"";	
	$result1 = mysql_query($sqlsel) or die ("erreur de requete");
	$row = mysql_fetch_array($result1);
	
	if($_FILES["images"]['name'] <> "" && $row["image"] <> "")
	{	
		$delete_file=unlink("".$pathImg."/photos/img_prod/".$row["image"]."");
	}
	if($_FILES["images"]['name'] <> "")
	{	
		
		$extptmp = explode(".",$_FILES["images"]['name']);
		$_FILES["images"]['name'] = str_replace(" ","_",$_FILES["images"]['name']);
		$_FILES["images"]['name'] = strtr($_FILES["images"]['name'],
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
		if(is_uploaded_file($_FILES["images"]['tmp_name'])) 
		{
			move_uploaded_file($_FILES["images"]['tmp_name'], "".$pathImg."photos/img_prod/".$_FILES["images"]['name'].""); 
			$sqlup = "UPDATE photos SET image=\"".$_FILES["images"]['name']."\" where id=".$_POST["id"]."";
			$conn = mysql_connect($host, $login, $password) or die ("Erreur de connection");
			mysql_select_db($db) or die("erreur de DB");
			$rsup = mysql_query($sqlup) or die ($sqlup);
			mysql_close($conn);
				
}

}
echo "<h3 align='center'>Mise &agrave; jour accomplise!</h3><center><a href=\"photos/administration.php\">Retour &agrave; l'administration</a></center>";
}

Eléphant du PHP | 451 Messages

27 avr. 2007, 09:06

Salut,

As tu vérifié ce que tu reçois en faisant un echo protégé par <pre> pouyr éviter l'interprétation html ?

Code : Tout sélectionner

echo "<pre>"; echo $var; echo "</pre>";
Je soupçonne que tu reçois les charactères accentués sour la forme &...
é = &eacute;

Mais je me trompe peut être, je n'ai pas l'habitude de mettre des accents dans les noms de fichiers ;)
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 331 Messages

27 avr. 2007, 15:22

Résultat de l'affichage comme tu as demandé:
echo "<pre>";
echo $_FILES["images"]['name'];
echo "</pre>";
Pour un fichier nommé é 5555.jpg le résultat est é_5555.jpg

Eléphant du PHP | 451 Messages

27 avr. 2007, 15:43

oups j'ai répondu trop vite, j'annule ma réponse et je regarde

Je me suis trompé avec la balise <pre> elle ne permet pas de voir ce que je pensais. Il faut écrire dans un fichier.

Tu peux ajouter la fonction :

Code : Tout sélectionner

function trace_ca($var) { $filename="trc.txt"; if (!$handle = fopen($filename, 'a')) { echo "Impossible d'ouvrir le fichier ($filename)"; exit; } // Ecrivons quelque chose dans notre fichier. if (fwrite($handle, $var."\r\n") === FALSE) { echo "Impossible d'écrire dans le fichier ($filename)"; exit; } fclose($handle); }
Et ensuite, tu fais :

Code : Tout sélectionner

trace_ca($_FILES["images"]['name']);
Tu pourras vérifier la chaîne exacte avant et après traitement.

Le fichier trace 'trc.txt' se trouve dans le répertoire du script.
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 331 Messages

27 avr. 2007, 22:46

Bon, j'ai fais se que tu m'as dis.

Dans le fichier trc.txt pour é 5555.jpg sa a écrit é_5555.jpg

Eléphant du PHP | 451 Messages

28 avr. 2007, 08:01

Hé bé c'est coriace comme problème !!!!

Pourrais-tu fournir le code du formulaire (ou des formulaires) qui appelle(nt)
ajout.php et update.php ?
(J'ai essayé de reproduire ton problème sans y arriver.)
Aussi ta variable $_FILES["images"]['name'] n'est pas initialisée dans partie de code que tu as fournie, au point où on en est, il serait peut être préférable d'avoir toute la partie de code par laquelle on passe et fournir ajout.php et update.php dans leur intégralité.

Une autre piste, as-tu esssayé avec plusieurs navigateurs et si oui est ce que ça fait la même chose ?
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 451 Messages

30 avr. 2007, 09:21

Ben j'avais pas encore été confronté à ça....

En fait, ça vient de l'encodage des caractères.

Tu as précisé charset=iso-8859-1 dans ton fichier header.

Par contre la chaîne de caractères du petit bout de code 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ' se retrouve en UFT8.

Je me suis rendu compte de ça en utilisant ma fonction trace_ca.
Avec :
$chaine1='ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ';
$chaine2='AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy';
trace_ca($chaine1);
trace_ca($chaine2);
trace_ca($_FILES["images"]['name']);

ce que je retrouve dans le fichier trace est :

Code : Tout sélectionner

ÀÃ
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 331 Messages

30 avr. 2007, 15:10

merci beaucoup tu as réglé mon problème.

Excuse moi pour la réponse ans un nouveau post j'ai dû cliquer sur nouveau plutot que sur répondre