Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/05/2008, 11h48   #1
Invité de passage
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 4
Points : 4
Par défaut double non condition

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'){
Dans mon code PHP mais cela n'est pas pris en compte.

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.
matt16matt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 12h19   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 835
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 835
Points : 3 468
Points : 3 468
Citation:
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 &&.
Pas bien compris.

Que donne :

Code :
1
2
3
4
5
6
echo "action=$action, $niveau=$niveau" ;
if($action!='modifier' && $niveau!='sous-menu'){
    // Code 1
} else {
    // Code 2
}
Dans quels cas veux-tu exécuter Code 1 et dans quels cas veux-tu exécuter Code 2 ? Donne des exemples en valorisant $action et $niveau.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 13h11   #3
Invité de passage
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 4
Points : 4
Je vais donner la partie de mon code qui doit être affiché ou non pour que vous compreniez:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<?php 
	if($action!='supprimer') {
		if($action!='modifier' && $niveau!='sous-menu'){
	?>
		<p>Titre de la rubrique : <br /><input type="text" size="30" name="rubrique" value="<?php echo $rubrique; ?>" /></p>
		<p>Date : (automatique) <br /><input type="date" size="30" name="date" value="<?php echo $date; ?>" /></p>
		<p>Nom de l image : <br /><input type="text" size="30" name="image" value="<?php echo $image; ?>" /></p>
		<p>Texte :<br /><textarea name="texte" cols="50" rows="10"><?php echo $texte; ?></textarea><br /></p>
		<?php 
		}
	}
?>
Alors je peux avoir comme valeur pour action:
-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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php 
	if($action!='supprimer') {
		if($action=='modifier' && $niveau=='sous-menu'){
 
		}else {
	?>
		<p>Titre de la rubrique : <br /><input type="text" size="30" name="rubrique" value="<?php echo $rubrique; ?>" /></p>
		<p>Date : (automatique) <br /><input type="date" size="30" name="date" value="<?php echo $date; ?>" /></p>
		<p>Nom de l image : <br /><input type="text" size="30" name="image" value="<?php echo $image; ?>" /></p>
		<p>Texte :<br /><textarea name="texte" cols="50" rows="10"><?php echo $texte; ?></textarea><br /></p>
		<?php 
		}
	}
?>

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 ||)?
matt16matt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 13h29   #4
Membre chevronné
 
Inscription : juin 2005
Messages : 572
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Haute Vienne (Limousin)

Informations forums :
Inscription : juin 2005
Messages : 572
Points : 690
Points : 690
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 :
1
2
 
if($action!='modifier' || $niveau!='sous-menu')
__________________
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"
ratapapa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 14h14   #5
Invité de passage
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 4
Points : 4
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
matt16matt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 14h38   #6
Membre chevronné
 
Inscription : juin 2005
Messages : 572
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Haute Vienne (Limousin)

Informations forums :
Inscription : juin 2005
Messages : 572
Points : 690
Points : 690
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"
ratapapa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 14h44   #7
Membre habitué
 
Avatar de elvan49
 
Laurent
Développeur Web
Inscription : octobre 2006
Messages : 226
Détails du profil
Informations personnelles :
Nom : Laurent
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2006
Messages : 226
Points : 141
Points : 141
Envoyer un message via Skype™ à elvan49
Par défaut OR et AND

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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//hypothèses e ou l'un des deux n'est pas respecté
$action = "modifier";
$niveau = "pas sous-menu";
IF($action == "modifier" && $niveau == "sous-menu"){
      $condition = false;
}
IF($action != "modifier" && $niveau != "sous-menu"){
    $condition = false;
}
// mais...
IF($action != "modifier" && $niveau == "sous-menu"){
    $condition = false;
}
IF($action != "modifier" || $niveau == "sous-menu"){
    $condition = false;
}
IF($action == "modifier" || $niveau != "sous-menu"){
     $condition = true;
 }
IF($action == "modifier" || $niveau == "sous-menu"){
      $condition = true;
  }
C'est une gymnastique mais une fois que t'auras bien pigé, tu n'hésitera plus.
__________________
"n'imprimez ces messages que si nécessaire... Préservez notre planète"
elvan49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 15h01   #8
Invité de passage
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 4
Points : 4
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)?
matt16matt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 15h11   #9
Membre chevronné
 
Inscription : juin 2005
Messages : 572
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Haute Vienne (Limousin)

Informations forums :
Inscription : juin 2005
Messages : 572
Points : 690
Points : 690
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"
ratapapa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 15h32   #10
Invité de passage
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 4
Points : 4
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...
matt16matt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 16h22   #11
Membre chevronné
 
Inscription : juin 2005
Messages : 572
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Haute Vienne (Limousin)

Informations forums :
Inscription : juin 2005
Messages : 572
Points : 690
Points : 690
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 :
1
2
 
if(!($action=='modifier' && $niveau=='sous-menu'))
Ici j'ai mis la négation sur les deux conditions, et dans ce cas il s'agit effectivement d'un ET à l'intérieur.
__________________
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"
ratapapa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 16h43   #12
Invité de passage
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 4
Points : 4
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.
matt16matt est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h38.


 
 
 
 
Partenaires

Hébergement Web