IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

double non condition


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 17
    Points
    17
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 226
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 226
    Points : 8 485
    Points
    8 485
    Billets dans le blog
    17
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    Je vais donner la partie de mon code qui doit être affiché ou non pour que vous compreniez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ||)?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if($action!='modifier' || $niveau!='sous-menu')

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    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

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    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

  7. #7
    Membre actif Avatar de elvan49
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 274
    Points : 204
    Points
    204
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    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)?

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    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

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    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...

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Double non accepté, Integer accepté
    Par Musetic dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/04/2014, 18h22
  2. Réponses: 6
    Dernier message: 19/09/2008, 23h14
  3. double non tronqué
    Par jdeboer dans le forum Langage
    Réponses: 2
    Dernier message: 14/08/2008, 09h56
  4. Conversion de chaîne "" en type Double non valide
    Par vérokit dans le forum VB.NET
    Réponses: 2
    Dernier message: 10/04/2008, 08h14
  5. Supression des doubles suivant condition
    Par jawed dans le forum Excel
    Réponses: 16
    Dernier message: 27/02/2008, 22h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo