PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 16-04-2010 23:37:31

Maximeus
Membre
Inscription : 08-06-2009
Messages : 20

Souci avec la condition !=

Bonjour,

Appel à l'aide avec l'utilisation de la condition != .

J'explique:

Ma page récupère la valeur de la langue du site se trouvant dans le lien (exemple: monsite.com/index.php?l=fr) avec le code suivant:

$l = $_GET['l'];

Ensuite, je place des conditions qui contrôlent la valeur:

if (empty($l) OR ($l != 'fr') OR ($l != 'en'))  // Si la valeur est null ou si la valeur est différente que fr ou en...
{
$l = 'fr';  // ... le site est fr
}
else
{
$l = $_GET['l']; // Sinon le site est dans la langue choisie (fr ou en)
}

Malheureusement, cela ne fonctionne pas super.

Avec la langue française pas de problème, mais si je clique sur la langue anglaise le site reste en français.

Une petite idée?

Merci

Hors ligne

#2 17-04-2010 08:46:41

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Souci avec la condition !=

Salut,

Tu demande :
si $i est vide ou différent de 'fr' ou différent de 'en'.

Si $i est égal à en, il est donc différent de fr donc la condition est vraie.

Tu dois demander :

Si $i est vide OU différent de 'fr' ET 'en'

if (empty($l) OR ($l != 'fr' AND $l != 'en'))

A+


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#3 17-04-2010 11:13:17

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Souci avec la condition !=

Bonjour,

if (empty($l) OR ($l != 'fr') OR ($l != 'en'))  est  incorrect car avec les variables $_GET et $_POST comme beaucoup d'autres ($_SESSION, etc...), la manière correcte de tester si la variable est vide (ce qui reviens au même de savoir si elle est définie) doit se faire en PHP avec la fonction isset(). Donc isset() ou !isset();

de plus pour être sur qu'il ni y a pas de problème de casse (formulaire qui passe les variables en FR ou EN par ex) je te conseille de faire un if (isset($_GET['l']) {$l=strtolower($_GET['l']);} else {$l="fr";}, au préalable, ta fonction en sera plus stable.  wink.

Et puis enfin, tu est censé ecrire du php et non du javascript donc pour que ce que tu souhaites faire soit complet suffit de rajouter les lignes suivantes au code que je viens d'ecrire:

Solution

if (isset($_GET['l']) {$l=strtolower($_GET['l']);} else {$l="fr";}
if ($l<>"en"){$l="fr";} // et non != ^^

Dernière modification par Jc (17-04-2010 11:50:03)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#4 17-04-2010 14:04:44

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Souci avec la condition !=

Jc a écrit :

...la manière correcte de tester si la variable est vide (ce qui reviens au même de savoir si elle est définie) doit se faire en PHP avec la fonction isset(). Donc isset() ou !isset();

Non, isset ne teste que si la variable est définie et pas si elle est vide (cela ne revient pas au même), !empty teste si la variable est définie non vide et non nulle donc plus intéressante.

Jc a écrit :

if ($l<>"en"){$l="fr";} // et non != ^^

<> et != sont strictement équivalents ! (cf la doc).

A+


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#5 17-04-2010 14:33:30

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Souci avec la condition !=

Voici le cas de figure où isSet() ne fonctionne pas :

<a href="page.php?l=">Mon lien qui contourne isSet</a>

Hors ligne

#6 17-04-2010 20:48:21

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Souci avec la condition !=

Oui désolé c'est en javascript que <> ne passe pas (j'ai inversé). Je suis d'accord aussi pour la différence entre isset et empty, je me suis mal exprimé. Mon code en revanche résoud le problème et couvre tous les cas de figure quelque soit la valeur ou la non valeur de $l, ce que le code de l'auteur du post ne fait pas et il et illustre ce que je voulais dire.
Voila, et promis je post moins vite la prochaine fois et j'evite de le faire avant de partir au boulot^^.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#7 21-04-2010 14:12:17

Maximeus
Membre
Inscription : 08-06-2009
Messages : 20

Re : Souci avec la condition !=

Merci pour votre réponse. Testé et approuvé smile

Toutefois, j'ai encore une question:

Dans mon exemple, le site est en français et en anglais.
Comment modifier le code if ($l<>"en"){$l="fr";} pour qu'il accepte aussi une 3ème langue (par exemple "sp") ?

J'ai essayé ceci:

if (($l<>"en") OR ($l<>"sp"))
{$l="fr";}

mais cela ne fonctionne pas.

Merci.

Hors ligne

#8 21-04-2010 16:43:21

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : Souci avec la condition !=

tout simplement plusieurs conditionnelles :

if ($l == "en"){$l="en";}
if ($l == "fr"){$l="fr";}
if ($l == "sp"){$l="sp";}

mais dans ce cas, autant faire comme plus haut
if (isset($_GET['l']) {$l=strtolower($_GET['l']);} else {$l="fr";}
si "l" existe, on recupere "l" sinon on définit par défaut que "l" = fr


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#9 21-04-2010 19:43:33

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Souci avec la condition !=

Le code que je t'ai fourni accepte toutes les langues en supprimant la 2e ligne.^^
Par contre pour assurer la stabilité de ton code, faudra peut être rajouter tot ou tard la vérification que le code est bien une langue, du style refuser $l="zz"

Dernière modification par Jc (21-04-2010 19:45:30)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#10 22-04-2010 10:13:10

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : Souci avec la condition !=

Jc a écrit :

Par contre pour assurer la stabilité de ton code, faudra peut être rajouter tôt ou tard la vérification que le code est bien une langue, du style refuser $l="zz"

Pas forcement ! Si tu récupères le langage du navigateur via un $_SERVER['HTTP_ACCEPT_LANGUAGE'], tu es sûr qu'il existe donc pas besoin de vérif supplémentaire


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#11 22-04-2010 10:42:53

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Souci avec la condition !=

Jc a écrit :

Le code que je t'ai fourni accepte toutes les langues en supprimant la 2e ligne.^^
Par contre pour assurer la stabilité de ton code, faudra peut être rajouter tot ou tard la vérification que le code est bien une langue, du style refuser $l="zz"

Pour cela il faudrait mettre les langues acceptées dans un array et tester la présence de $l dans cet array.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#12 22-04-2010 10:46:57

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : Souci avec la condition !=

Bon, si jamais ça peut servir : Listes des Codes Langues (voir ISO 639: 2-letter codes)
Je reste sur mon avis : une récup du langage navigateur nous épargne tout ça... et rares sont ceux qui ont un navigateur pas configuré à leur langue donc tout aussi rares sont les désagréments possibles.


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#13 22-04-2010 13:59:45

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Souci avec la condition !=

Attention, dans la doc PHP, il est écrit, s'agissant de la superglobale $_SERVER

$_SERVER est un tableau contenant des informations comme les en-têtes, dossiers et chemins du script. Les entrées de ce tableau sont créées par le serveur web. Il n'y a aucune garantie que tous les serveurs les rempliront tous ; certains en oublieront quelques-unes et en rajouteront de nouvelles non mentionnées ici. Cependant, un grand nombre de ces variables fait partie des »spécifications CGI 1.1, et vous pouvez donc vous attendre à les retrouver.

Malheureusement, dans le lien indiqué, 'HTTP_ACCEPT_LANGUAGE', ne figure pas parmi les variables d'environnement systématiquement retournées


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#14 22-04-2010 19:30:44

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Souci avec la condition !=

Personnellement, dans mes ressources, j'ai une table pour gérer les pays du monde entier avec une colonne pour les codes ISO à 2 caracteres et une colonne pour les codes ISO à 3 caractères. Parfois, c'est mieux de compter que sur soi^^ car on est sur du resultat obtenu.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums