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 :

condition avec multiple && et ||


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Points : 119
    Points
    119
    Par défaut condition avec multiple && et ||
    Bonjour,
    Je rencontre un problème avec une condition comportant plusieurs && et ||.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(!empty($valeur) && (!preg_match("#^[0-9]*\.?[0-9]{0,3}$#", $valeur) || ($valeur < 0 || $valeur >100))) 
         echo "condition validée";
    quand dans mon input je met une valeur qui remplie la condition du !pregmatch, j'ai bien le echo qui s'affiche. Par contre si je met une valeur numérique (je dépasse donc le preg_match pour arriver a la comparaison par rapport a 0 et 100) je reçoit le message suivant
    Fatal error: Call to undefined function () in /var/www/html/verif_form_recherche.php on line 64 ( la ligne 64 étant le if)

    J'ai donc 2 questions.
    - Est-il convenable de mettre autant de condition dans un if ou faut-il mieux passer par des if imbriqués?
    - Dans le 1er cas, quelle serait la bonne syntaxe?

    Merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu arrives a reproduire ton problème avec juste ce code ? Parce que chez moi ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $valeur = 200;
    if(!empty($valeur) && (!preg_match("#^[0-9]*\.?[0-9]{0,3}$#", $valeur) || ($valeur < 0 || $valeur >100)))
         echo "condition validée";
    // condition validée
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Le message d'erreur que tu reçois ne semble pas être en rapport avec la condition que tu as postée.

    À propos de cette condition, je suis assez curieux de ce que tu cherches à tester avec. Peux tu l'exprimer en bon français histoire de voir si elle correspond bien à ce que tu en attends?

    D'autre part ton analyse est erronée, 200 (tout comme n'importe quel nombre positif avec moins de 4 décimales ou une chaîne vide) ne vérifie pas la condition !preg_match("#^[0-9]*\.?[0-9]{0,3}$#", $valeur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump(!preg_match("#^[0-9]*\.?[0-9]{0,3}$#", 200));
    affiche:
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Points : 119
    Points
    119
    Par défaut
    Bonjour et merci pour vos réponses.
    @Sabotage, je viens de réessayer (j'avais utiliser des conditions imbriquées en attendant) et effectivement ça fonctionne. J'avais du faire une faute de frappe dans mon code. Je m'en excuse.

    @CosmoKnacki
    Effectivement je viens de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $valeur = 200;
    if(!empty($valeur) && (!preg_match("#^[0-9]*\.?[0-9]{0,3}$#", $valeur))) echo "ok";
    else echo "not ok";
    et ça ne marche pas...
    Pour moi ça veut dire:
    ^[0-9]* = une chaine commençant par 0 ou plusieurs fois un nombre de 0 à 9
    \.? = suivie de 0 ou 1 point
    [0-9]{0,3}$ = et qui se termine par 0 ou 3 fois un nombre de 0 à 9.
    Ce n'est pas ça ? (pour moi 200 rentrait dans cette catégorie)

    Dans ce cas ça voudrait dire que quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(!empty($valeur) && (!preg_match("#^[0-9]*\.?[0-9]{0,3}$#", $valeur) || ($valeur < 0 || $valeur >100)))
    et que ma condition est validée c'est grace a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ($valeur < 0 || $valeur >100)
    C'est embêtant...
    Il faudrait donc faire reamplacer le || par &&
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(!empty($valeur) && (!preg_match("#^[0-9]*\.?[0-9]{0,3}$#", $valeur) && ($valeur < 0 || $valeur >100)))
    mais du coup je ne vois pas comment avoir une bonne regex.

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Quand je disais d'exprimer en bon français ce que tu voulais tester, je ne parlais pas de la regex en particulier mais de toute ta condition. Que veux tu tester avec? Quelles conditions ta valeur doit elle remplir?

    Si tu veux valider que le nombre n'a pas plus de 3 chiffres après la virgule, la pattern est correcte, le seul problème c'est le NOT (!) avant le preg_match.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  6. #6
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 101
    Points : 4 446
    Points
    4 446
    Par défaut
    pas obligé de mettre des if imbriqués,
    si tu désires un retour particulier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $valeur='19.5';
    try {
    	if (empty($valeur)) { throw new Exception('valeur nulle'); }
    	if (filter_var($valeur, FILTER_VALIDATE_FLOAT)==false) { throw new Exception('valeur non numérique'); }
    	if ($valeur<0 || $valeur >100) { throw new Exception('intervalle non respecté'); }
    	echo "validation de $valeur OK";
     
    } catch (Exception $e) {
        echo 'entrée incorecte: ',  $e->getMessage(), "\n";
        exit;
    }
    $moi= ( !== ) ? : ;

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Points : 119
    Points
    119
    Par défaut
    Bonjour et désolé pour cette réponse tardive, j'étais absent de la fin de semaine dernière jusqu'à aujourd'hui.
    Merci aussi pour vos réponse.
    Pour moi, quand je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(!empty($valeur) && (!preg_match("#^[0-9]*\.?[0-9]{0,3}$#", $valeur) || ($valeur < 0 || $valeur >100))) {
    Je veux tester que $valeur ne soit pas vide ET que $valeur ne RENTRE PAS dans ma regex OU si c'est le cas, que valeur soit inférieur à 0 OU supérieur à 100;
    La condition me sert à vérifier que l'utilisateur n'a pas fait d'erreur sur ce qu'on lui a demandé.

Discussions similaires

  1. Problème avec une condition if multiple
    Par sab_info dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 01/03/2013, 16h30
  2. [XL-2003] boucle For avec multiple conditions d'arret
    Par yvespi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/05/2010, 09h30
  3. Multiples conditions avec macro
    Par Toine45 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 27/12/2007, 15h24

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