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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    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 confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 347
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 347
    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 averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    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 émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    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 averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    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 émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    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 éclairé 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
    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.

+ 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