switch pas pris en compte dans un if

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Ramon, 12 Juillet 2011.

  1. Ramon
    Ramon Nouveau WRInaute
    Inscrit:
    22 Juillet 2004
    Messages:
    22
    J'aime reçus:
    0
    Bonjour,
    j'ai un switch classique sur une variable pour affecter le mois en lettre plutôt qu'en chiffre qui fonctionne bien
    Code:
    	
    $nommois = date('n', mktime(0,0,0,$_month, 1, $_year));
    	$mois = $nommois;
    		  switch ($mois)
    		  {
    			case "1":
    			$mois = "Janvier";
    			break;
    			case "2":
    			$mois = "Février";
    			break;
    }
    
    je voudrai afficher les mois en fonction de la langue avec if
    Code:
    $nommois = date('n', mktime(0,0,0,$_month, 1, $_year));
    	$mois = $nommois;
    if($langue == 1)
    {
    		  switch ($mois)
    		  {
    			case "1":
    			$mois = "Janvier";
    			break;
    			case "2":
    			$mois = "Février";
    			break;
    }
    }
    
    là le mois se retrouve affiché en chiffre !
    de même si je met le if dans case ou un autre switch imbriqué dans case.
    Ça fait depuis hier que cherche sans résultat !

    Merci pour votre aide.
    Raymond
     
  2. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 361
    J'aime reçus:
    2
    Fais des dump de variable à chaque étape, déjà. Et vérifie $langue en particulier :D
     
  3. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 077
    J'aime reçus:
    295
    N'oublie pas un default: à ton switch, sinon il risque de tourner en boucle.

    Pourquoi vouloir traduire à la mano ?
    setlocale() + strftime() c'est pas bon ?
     
  4. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 885
    J'aime reçus:
    74
  5. Ramon
    Ramon Nouveau WRInaute
    Inscrit:
    22 Juillet 2004
    Messages:
    22
    J'aime reçus:
    0
    Merci pour vos réponses.
    Précision, mes connaissance PHP sont limités.
    Dur a comprendre pour moi " Fais des dump de variable à chaque étape ".

    setlocale() + strftime() semble pas adapté à ce que je recherche.

    Mais vos remarques on été productive.
    Ma variable déclaré en début de page X :
    <?php $langue = 1; ?>
    n'est pas prise en compte en l'intérieur de mon script inséré en include plus bas dans la page,
    alors qu'elle fonctionne après l'include !
     
  6. e-kiwi
    e-kiwi WRInaute accro
    Inscrit:
    23 Décembre 2003
    Messages:
    13 257
    J'aime reçus:
    1
    tu fais un echo $langue à toutes les lignes pour voir quelle valeur elle a, et quand elle change
     
  7. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 885
    J'aime reçus:
    74
    Si ce que tu veux faire c'est afficher le nom du mois en toute lettre, en fonction de son numéro (ce qui semble être le cas), alors setlocale et strftime sont au contraire tout à fait indiqué : http://www.formation-cakephp.com/25/afficher-les-dates-en-francais

    Ou alors on ne comprend aps ce que tu veux faire, auquel cas tu devrais clarifier.
     
  8. Ramon
    Ramon Nouveau WRInaute
    Inscrit:
    22 Juillet 2004
    Messages:
    22
    J'aime reçus:
    0
    UsagiYojimbo, merci d'avoir insisté.
    J'ai mieux regardé et modifié mon code en fonction.
    C'est super, tout est plus simple comme tu l'as dit.

    e-kiwi, j'ai justement fait des echo $langue, comme je l'expliquais plus haut, $langue ne s'affiche pas dans le fichier inclu mais s'affiche bien en dehors de l'inclu.
    Bon, je n'en ai plus besoin, mais j'aurai voulu savoir pourquoi, c'est vraiment étonnant pour moi.

    Merci pour votre aide

    Raymond
     
  9. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    701
    J'aime reçus:
    0
    Attention à la fonction « setlocale ». Des problèmes peuvent survenir lors de l'utilisation de PHP en multi processus.
    http://php.net/manual/fr/function.setlocale.php

    En gros, si deux personnes visitent le site simultanément dans une langue différente, la dernière personne effectuant le « setlocale » impactera sur la première (dans certain cas, si deux processus différents travaillent). Une sorte de franglais :D

    À oublier dans un site à fort trafic.
     
  10. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 361
    J'aime reçus:
    2
    Le site ou la page ?
    Si c'est la page, un système correct d'adressage devrait réduire quasiment à zéro le risque que deux personnes visitent simultanément la même page avec un paramétrage de langue différent, non ?
     
  11. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    701
    J'aime reçus:
    0
    Cela va même au delà du site.
    Si Apache est utilisé, il lance plusieurs processus pour traiter les requêtes.
    Cela concerne tous les sites du serveur.

    Maintenant ça mérite quelques testes.

    Mais toutes les installations ne sont pas concernée. Par exemple, dans mes dépôts :
    Code:
    apache2-mpm-prefork            - Serveur HTTP Apache - modèle traditionnel « non-threaded »                     
    apache2-mpm-worker            - Apache HTTP Server - high speed threaded model                                 
    
    Ici, apache2-mpm-worker sera concerné par le problème.

    S'il y a des personnes qui s'y connaisse un peu plus, ce serait bien de donner votre avis ;)

    Pour ma part, je travail régulièrement avec Zend Framework. Il corrige justement certain de ces problème (gettext par exemple, utilisant setlocale dans PHP, dans ZF, il doit être récrit).
     
  12. e-kiwi
    e-kiwi WRInaute accro
    Inscrit:
    23 Décembre 2003
    Messages:
    13 257
    J'aime reçus:
    1
    tu colles que des bouts de scripts, impossible de déterminer le problème. si il faut tu es dans une fonction, tu remet à zéro quelquepart la variable, etc ...
     
  13. Ramon
    Ramon Nouveau WRInaute
    Inscrit:
    22 Juillet 2004
    Messages:
    22
    J'aime reçus:
    0
    Tu as raison, hier je me suis rendu compte que mon problème venais du fait que j'appelais la variable à l'intérieur d'une fonction :?
    Y a t il un moyen de récupérer le résultat d'une variable à l'intérieur d'une fonction, ou c'est pas possible ?

    Pour setlocale, ce n'ai pas pour le site en entier, je vais mettre <?php setlocale(LC_ALL, 'nl_NL'); ?> dans 4 pages en langue différente qui va appeler le fichier ou il y a strftime().
    Quand ça sera en place, je vous dirai si ça rentre en conflit.
    Raymond
     
  14. Ramon
    Ramon Nouveau WRInaute
    Inscrit:
    22 Juillet 2004
    Messages:
    22
    J'aime reçus:
    0
    Après test, 2 connexions simultané n'a pas causé de souci.
     
  15. Ramon
    Ramon Nouveau WRInaute
    Inscrit:
    22 Juillet 2004
    Messages:
    22
    J'aime reçus:
    0
    Pour conclure, je n’avançais pas parce que je ne déclarais pas ma vavriable à l'intérieur de la fonction :
    global $langue;

    Merci à tous de m'avoir permis de finaliser mon script.

    Raymond
     
  16. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    701
    J'aime reçus:
    0
    Après quel test ?
    Si ton test, c'est de lancer 2 requêtes « en même temps » dans un navigateur, ce n'est pas bon du tout.
    Pour bien faire, il faudrait lancer les requêtes en temporisant avec « sleep » à certain endroit.

    Tu as fait quoi comme test ?
     
  17. Ramon
    Ramon Nouveau WRInaute
    Inscrit:
    22 Juillet 2004
    Messages:
    22
    J'aime reçus:
    0
    J'ai fat 2 requêtes en même temps sur 2 pc, navigateur différent, mais sur la même connexion !
     
  18. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    701
    J'aime reçus:
    0
    Il est là le problème. Informatiquement parlant, « en même temps » ne veut rien dire.

    Tu prends deux fichiers. Dans les deux, tu définis une locale différente.
    Ensuite, dans un des deux, tu mets un "sleep(5)" juste après pour faire patienter 5 secondes. Ensuite, tu affiche une date avec « strftime("%A %d %B %Y", time()) ».
    Tu lances ta première requête sur le fichier contenant le sleep, et tu lances ensuite le seconde.
     
Chargement...
Similar Threads - switch pris compte Forum Date
Switch de contenus HP : liens internes Référencement Google 6 Mars 2020
Quel hébergement ? ( Mauvaise expérience O2switch) Administration d'un site Web 4 Décembre 2019
Pointer un ndd EuroDns vers O2switch Administration d'un site Web 15 Avril 2013
Indexation Google multidomaines chez Hebergeurs Verts avec CPanel: HostPapa, o2Switch etc Crawl et indexation Google, sitemaps 12 Août 2012
Développement module inscription entre site en joomla et serveur de type VoipSwitchde Développement d'un site Web ou d'une appli mobile 13 Juillet 2012
Avis, retour d'expérience avec O2Switch, PlanetHoster ? Administration d'un site Web 27 Juillet 2011
Problème PHP switch($page) Développement d'un site Web ou d'une appli mobile 15 Juillet 2010
Switch ou alternative ? Développement d'un site Web ou d'une appli mobile 9 Mai 2010
Switcher du mutu au Kimsufi 500G ? Administration d'un site Web 3 Mai 2010
Alternative plus rapide à un switch php Développement d'un site Web ou d'une appli mobile 5 Décembre 2009