setlocale

setlocale - PHP - Programmation

Marsh Posté le 31-07-2008 à 22:53:25    

J'ai fais un programme en php, html.
En locale j'ai rentré ça:
 

setlocale(LC_ALL, 'fr_FR.ISO_8859-1', 'fr_FR','fr','fr','fra','fr_FR@euro');


 
La fonction strtoupper fonctionne très bien même avec des caractères accentués.
La ou réside un problème c'est avec le séparateur de décimal. J'ai une virgule au lieu d'un point. Du coup, mes champs numériques ne sont que partiellement remplis.
 
si je reprends la locale anglaise j'ai exactement l'inverse.
strtoupper fonctionne mais pas avec les caractères accentués.
Le séparateur de décimal est bien un point. donc mes champs numériques se remplissent correctement.
 
Je ne trouve pas le compromis entre les deux.
Une petite aide serait bienvenue.


---------------
Penguin online qui ne fait que des conneries, et qui aime ça. Membre du http://www.fonacon.net/
Reply

Marsh Posté le 31-07-2008 à 22:53:25   

Reply

Marsh Posté le 03-08-2008 à 13:20:53    

Utiliser number_format ?


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 25-08-2008 à 14:00:15    

C'est ce que j'utilise actuellement, mais auparavant mon "setlocale" était suffisant ??? C'est bizarre.


---------------
Penguin online qui ne fait que des conneries, et qui aime ça. Membre du http://www.fonacon.net/
Reply

Marsh Posté le 25-08-2008 à 16:28:09    

thierryR a écrit :

C'est ce que j'utilise actuellement, mais auparavant mon "setlocale" était suffisant ??? C'est bizarre.


En français le séparateur a toujours été la virgule.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 25-08-2008 à 21:16:36    

OK, mais dans les champs numériques on a un problème. Comme le point n'existe plus, le chiffre est tronqué de ses décimales.
En conclusion Dj YeLL a raison. Il faut reformater les chiffres.


---------------
Penguin online qui ne fait que des conneries, et qui aime ça. Membre du http://www.fonacon.net/
Reply

Marsh Posté le 25-08-2008 à 22:08:34    

thierryR a écrit :

OK, mais dans les champs numériques on a un problème. Comme le point n'existe plus, le chiffre est tronqué de ses décimales.
En conclusion Dj YeLL a raison. Il faut reformater les chiffres.


je m'exprime peut-être mal - le séparateur indiquant dans un nombre qu'on passe aux décimales est en français bien la virgule.:o


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 25-08-2008 à 22:12:53    

Ta définition est tout a fait compréhensible. J'ai bien compris. La virgule est le séparateur requis. Ce que je soulignais c'est l'incompatibilité avec les champs numériques, qui demandent un point (only).


---------------
Penguin online qui ne fait que des conneries, et qui aime ça. Membre du http://www.fonacon.net/
Reply

Marsh Posté le 25-08-2008 à 22:30:51    

thierryR a écrit :

Ta définition est tout a fait compréhensible. J'ai bien compris. La virgule est le séparateur requis. Ce que je soulignais c'est l'incompatibilité avec les champs numériques, qui demandent un point (only).


quels champs numériques?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 25-08-2008 à 22:50:56    

Ceci dépasse un peu le sujet php.
Quand j'additionne 2 variables une virgule apparait suivant la locale configurée.
Si je veux la placer dans une table mysql dans un champ numérique un tronquage se produit.


---------------
Penguin online qui ne fait que des conneries, et qui aime ça. Membre du http://www.fonacon.net/
Reply

Marsh Posté le 26-08-2008 à 08:56:33    

thierryR a écrit :

Ceci dépasse un peu le sujet php.
Quand j'additionne 2 variables une virgule apparait suivant la locale configurée.
Si je veux la placer dans une table mysql dans un champ numérique un tronquage se produit.


Alors le problème est peut-être plutôt ta manière de faire l'insertion dans la base - avec des requêtes paramétrées sur un champ numérique, php devrait utiliser la locale pour déterminer correctement la valeur à insérer...ou alors c'est un bug de php ou du connecteur mysql de php...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-08-2008 à 08:56:33   

Reply

Marsh Posté le 26-08-2008 à 13:14:39    

Étant plutôt bricoleur qu'informaticien, j'admets facilement que ma méthode est a revoir. J'ai tout à apprendre...  Pour palier à ce nouveau problème je rajoute une ligne en php:

$mavar = number_format($mavar,2,'.','');


puis je continue ma procédure classique

mysql_query("REPLACE INTO.....


et ça fonctionne.
Ce que je ne comprends pas, c'est que jusqu'ici tout allait bien. Maintenant il faut formater explicitement le champ avant enregistrement. D'un autre coté, ça rend l'application plus robuste.


---------------
Penguin online qui ne fait que des conneries, et qui aime ça. Membre du http://www.fonacon.net/
Reply

Marsh Posté le 26-08-2008 à 13:39:26    

thierryR a écrit :

Étant plutôt bricoleur qu'informaticien, j'admets facilement que ma méthode est a revoir. J'ai tout à apprendre...  Pour palier à ce nouveau problème je rajoute une ligne en php:

$mavar = number_format($mavar,2,'.','');


puis je continue ma procédure classique

mysql_query("REPLACE INTO.....


et ça fonctionne.
Ce que je ne comprends pas, c'est que jusqu'ici tout allait bien. Maintenant il faut formater explicitement le champ avant enregistrement. D'un autre coté, ça rend l'application plus robuste.

 

Tu as essayé avec des requêtes préparées ou pas? En bindant ta variable avec un type de données float, ça devrait marcher sans toucher à quoi que ce soit, ou alors php fait n'importe quoi...ce qui évidemment n'est pas exclu.

Message cité 1 fois
Message édité par skeye le 26-08-2008 à 13:39:40

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-08-2008 à 19:32:26    

skeye a écrit :


 
Tu as essayé avec des requêtes préparées ou pas?


Heu... Là je ne comprends pas. Ce que je peux dire: Avant l'enregistrement, il y a une somme mathématique de 4 autres champs. C'est là que la virgule apparait.
 

skeye a écrit :


En bindant ta variable avec un type de données float, ça devrait marcher sans toucher à quoi que ce soit, ou alors php fait n'importe quoi...ce qui évidemment n'est pas exclu.


Mes champs mysql sont de type float(8,2).  Est-ce suffisant ?


---------------
Penguin online qui ne fait que des conneries, et qui aime ça. Membre du http://www.fonacon.net/
Reply

Marsh Posté le 26-08-2008 à 22:42:40    

thierryR a écrit :


Heu... Là je ne comprends pas. Ce que je peux dire: Avant l'enregistrement, il y a une somme mathématique de 4 autres champs. C'est là que la virgule apparait.


Non, la virgule n'est que la représentation textuelle du passage aux décimales, et n'apparait vraiment que quand tu demandes à représenter ton nombre comme une chaine de caractères. Ce qui est le cas si tu crées une chaine de caractères représentant ta requête pour l'exécuter, mais pas si tu utilises des requêtes préparées (il faut mysqli pour ça par contre).
 
regarde la doc de mysqli_prepare, mysqli_bind_param, etc. pour des exemples de requêtes préparées...


---------------
Can't buy what I want because it's free -
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed