|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : janvier 2008 Messages : 33 ![]() |
Bonjour, je voudrais juste savoir pourquoi une double condition négative n'est pas prise en compte?
J'ai écris: Code :
if($action!='modifier' && $niveau!='sous-menu'){ C'est pour adapter l'affichage du panneau d'administration en fonction de ce que veux faire la personne. Quant elle veut ajouter une rubrique l'affichage fonctionne mais quant elle veut ajouter un sous-menu ou modifier une rubrique, sa ne marche plus. Je pense que c'est du au fait que si un des condition est retrouvé on affiche pas, alors que je voudrais pas afficher quand on ne retrouve pas les deux conditions en même temps, d'où le &&. Merci de m'expliquer pourquoi, et peut être de trouver une solution. |
|
|
00
|
|
|
#2 | |||
|
Expert Confirmé
![]() Inscription : mars 2005 Messages : 2 835 ![]() |
Citation:
Que donne : Code :
__________________
Un problème exposé clairement est déjà à moitié résolu Keep It Smart and Simple |
|||
|
|
00
|
|
|
#3 | ||||
|
Invité de passage
![]() Inscription : janvier 2008 Messages : 33 ![]() |
Je vais donner la partie de mon code qui doit être affiché ou non pour que vous compreniez:
Code :
-ajouter -modifier -supprimer Et pour niveau: -sous-menu -rubrique Donc je voudrai que quand $action=modifier et $niveau=sous-menu on affiche rien et que pour les autres conditions on affiche le code en dessous. J'ai trouvé comme faire pour que sa marche mais le code est plus long: Code :
Mais ce que je veux savoir c'est pourquoi le premier code ne marche pas? Alors qu'il me semble que la syntaxe est bonne. Donc c'est surement que pour une condition négatif le AND (ou &&) est considéré comme un OR (ou ||)? |
||||
|
|
00
|
|
|
#4 | ||
|
Membre chevronné
![]() Inscription : juin 2005 Messages : 572 ![]() |
Il s'agit bien d'une faute d'algorithme à la base.
Tu l'as résolu en trouvant le contraire, tu devrais pouvoir facilement arriver à la bonne expression. Je m'explique : tu veux que quand les conditions a et b soient vérifiées, il ne se passe rien. Donc quand il se passe quelque chose, c'est quand a ou b n'est pas vérifiée. On arrive donc à : Code :
__________________
Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ? Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée" |
||
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : janvier 2008 Messages : 33 ![]() |
Oki, sa marche. Merci
Maintenant je me pose quand même une question. Pour moi l'expression AND veut dire les deux sinon rien et l'expression OR veut dire l'un ou l'autre. Alors soit c'est moi qui me goure soit dans ce cas l'expression OR veut dire l'un et l'autre... Je partirai plus de fait qu'on demande que la première condition ne soit pas réunit ET que la deuxième non plus. Eclairez moi car je comprend pas.merci |
|
|
00
|
|
|
#6 |
|
Membre chevronné
![]() Inscription : juin 2005 Messages : 572 ![]() |
Je pense que tu n'as pas pris le temps de lire les explications préalables avant de vérifier la ligne de code que je t'ai indiqué ^^"
Ou peut être n'ai je pas été très clair. Tu as deux conditions à tester (action = modifier que j'appelle a et niveau = sous-menu que j'appelle b). Tu veux que quand tes deux conditions sont vérifiées, tu ne fasses rien. On a donc : Si a et b alors Je ne fais rien Fsi Cela revient à dire que si l'inverse se produit, tu fais quelque chose, soit : Si non a ou non b alors Je fais quelque chose Fsi
__________________
Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ? Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée" |
|
|
00
|
|
|
#7 | ||
|
Membre habitué
![]() |
Bonjour,
Non, tu as bien compris OR et AND, mais comme on te le dit plus haut il s'agit d'une petite erreur d'analyse donc d'algo. Quand tu veux que SI (a est différent de x ET b différent de y) alors fais ceci Il faut bien que tes deux conditions soient réunies. Dès lors que l'une d'entre elle n'est pas vérifiée tu passes dans le cas "sinon". Dans ton cas SI (a n'est pas égal à x ET b n'est pas égal à y) alors fais cela tu ne lui disais pas que que l'affichage devait avoir lieu si les deux conditions positives étaient respectées, mais si les deux conditions négatives étaient respectées ce qui ne veut pas du tout dire la même chose. En effet si tu voulais un affichage lorsque les deux conditions positives étaient respectées, ca équivaut à dire qu'au moins une des deux conditions négatives doit être respectée... (je ne suis pas sûr d'être plus clair) Décompose en cas de figure pour comprendre... Code :
__________________
"n'imprimez ces messages que si nécessaire... Préservez notre planète"
|
||
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : janvier 2008 Messages : 33 ![]() |
Bon j'ai relu plusieurs fois vos explications.
Bien sur que je suis d'accord avec ce que vous dites (car mon code marche maintenant). Mais je trouve qu'au niveau de l'écriture c'est pas très logique (enfin pour moi). Je veux que $action!='modifier' et que $niveau!='sous-menu' Car c'est le seul cas ou je n'affiche rien. Il faut qu'aucune des deux conditions soit réuni en même temps. Mais l'une peut l'être sans l'autre. Alors pourquoi le et que se transforme en || (OR, ou)? |
|
|
00
|
|
|
#9 |
|
Membre chevronné
![]() Inscription : juin 2005 Messages : 572 ![]() |
Tu te trompes et tu t'obstines dirait Dubosc ^^
Relis ce que tu as écrit c'est inexact. Pour ne rien faire, il faut que $action=='modifier' et que $niveau=='sous-menu'. Pour faire quelque chose, il faut donc que soit l'un soit l'autre soit différent de tes critères. Je ne vois pas comment mieux l'expliquer, c'est une question de logique la
__________________
Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ? Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée" |
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : janvier 2008 Messages : 33 ![]() |
Dsl si je m'obstine, mais je préférè avoir bien compris que non.
En fait il faut que les deux condition soit différents de mes critéres. Pas l'une ou l'autre mais les deux en même temps. C'est pour sa que je ne comprend pas le OU alors que quand je l'écris en français c'est un et... |
|
|
00
|
|
|
#11 | ||
|
Membre chevronné
![]() Inscription : juin 2005 Messages : 572 ![]() |
Je bloque pour te l'expliquer c'est une question de logique là encore une fois.
Reprenons, on nomme les deux conditions suivantes a : $action=='modifier' b : $niveau=='sous-menu' Pour afficher quelque chose, il faut que non (a et b) Ce qui équivaut à non a ou non b Ca c'est d'après les règles logiques. Ensuite en français. Pour afficher quelque chose, tu ne veux pas que l'action soit de modifier et que le niveau soit un sous menu. En d'autres termes, tu désires que l'action soit différente de modifier, ou bien que le niveau soit différent d'un sous menu, puisque tu ne veux pas les deux en même temps. Une autre manière de l'écrire serait : Code :
__________________
Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ? Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée" |
||
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : janvier 2008 Messages : 33 ![]() |
Ok je viens de comprendre.
C'est que l'inverse de && c'est ||. Donc si on veut l'inverse de a && b il faut a || b. C'est que j'avais oublié qu'il fallait considérer le && et le || comme des termes mathématiques et non du langage. Donc un gros merci à toi, surtout pour le temps et la réflexion que je t'ai prise. Merci infiniment Je me coucherai moins con ce soir. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com