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 :

Difficulté avec switch [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 220
    Par défaut Difficulté avec switch
    Bonjour,

    Je comprends pas 2 choses concernant "switch et case"; je crois comprendre que 'switch' n'exécute l'instruction que si la valeur correspond (est égal ); or, le code suivant fonctionne bien alors que la valeur est comprise entre deux "cases".
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        <head><title>14_switch_2</title></head>
        <body>
            <h2>14_switch_2</h2><br/>
            <h2>Entrez les données suivantes </h2>
            <form name="formulaire" method="post" action="14_switch_2.php">
                Entrez x : <input type="text" name="x"/> <br/>
                Entrez y : <input type="text" name="y"/> <br/>
                Entrez z : <input type="text" name="z"/> <br/><br/>
                <input type="submit" name="valider" value="OK"/>
            </form>
     
    		<?php
    		if(isset($_POST['valider'])){
            $x=$_POST['x'];
            $y=$_POST['y'];
            $z=$_POST['z'];
     
    		echo 'x = '.$x.'<br/>';
    		echo 'y = '.$y.'<br/>';
    		echo 'z = '.$z.'<br/>';
    		}
     
    		switch ($x) {
     
    		case 0:
    		echo "0 < ou = x < 1";
    		break;
    		case 1:
    		echo "1 < ou = x < 2";
    		break;
    		case 2:
    		echo "2 < ou = x < 3";
    		break;
    		case 3:
    		echo "3 < ou = x";
    		}
     
            ?>
        </body>
    </html>
    D'autre part, je lis sur le site http://www.php.net/manual/fr/control...res.switch.php "Une autre chose à mentionner est que la valeur du case peut être toute expression de type scalaire, c'est-à-dire nombre entier, nombre à virgule flottante et chaîne de caractères. Les tableaux sont sans intérêt dans ce contexte-là." J'ai donc créé le code suivant en espérant qu'il fonctionne ; où est l'erreur?
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        <head><title>14_switch_3</title></head>
        <body>
            <h2>14_switch_3</h2><br/>
            <h2>Entrez les données suivantes </h2>
            <form name="formulaire" method="post" action="14_switch_3.php">
                Entrez x : <input type="text" name="x"/> <br/>
                Entrez y : <input type="text" name="y"/> <br/>
                Entrez z : <input type="text" name="z"/> <br/><br/>
                <input type="submit" name="valider" value="OK"/>
            </form>
     
    		<?php
    		if(isset($_POST['valider'])){
            $x=$_POST['x'];
            $y=$_POST['y'];
            $z=$_POST['z'];
     
    		echo 'x = '.$x.'<br/>';
    		echo 'y = '.$y.'<br/>';
    		echo 'z = '.$z.'<br/>';
    		}
     
    		switch ($x) {
     
    		case 0:
    		echo "0 < ou = x < 1.5";
    		break;
    		case 1.5:
    		echo "1.5 < ou = x < 2.5";
    		break;
    		case 2.5:
    		echo "2.5 < ou = x < 3.5";
    		break;
    		case 3.5:
    		echo "3.5 < ou = x";
    		}
     
            ?>
        </body>
    </html>
    Merci et à bientôt.

  2. #2
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    je ne connais pas php, mais les switch case j'en ai vu dans plein de language:

    1/ Je pense qu'il manque un break à la fin du dernier case.

    2/ il manque une section default (qui doit ausi avoir un break a mon avis) au cas ou ta valeur n'a rien a voir ave ce que tu attend.

    3/ Ensuite le case va comparer la valeur avec celle du case ce sera donc un "="
    mais peu etre qu'il prend la partie entiere de x comme base de comparaison

    si x = 1.25 , sa partie entière sera 1....


    ------

    Cela donnerai quelque chose comme ça


    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
     
    switch ($x) {
     
    		case 0:
    		echo "x=0";
    		break;
    		case 1.5:
    		echo "x=1.5";
    		break;
    		case 2.5:
    		echo "x=2.5";
    		break;
    		case 3.5:
    		echo "x=3.5";
                              break;
                              default:
                              echo " oups x ne rentre pas dans les cases.
                              break;

  3. #3
    Membre éclairé Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 496
    Par défaut
    C'est exactement ça !!!
    Il manque les break et le default est vivement conseillé

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 220
    Par défaut
    Merci.

    Mais j'ai pourtant bien lu que pour le dernier 'case' le break n'est pas utile (puisque le switch est terminé).

    D'accord pour 'default' >>> si je comprends bien il vaut mieux toujours y penser - par exemple pour afficher un message à l'utilisateur si les données ne correspondent etc.

    Je reformule ma question :

    Peut-on utiliser des "case 1.5:" "case 2.5:" etc. ?
    Si on peut, qu'est-ce qui ne fonctionne pas dans mon (deuxième) code;
    selon moi, ce n'est ni le break final ni le default.

    Rappel : mon 1e code fonctionne bien.

    Merci.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 220
    Par défaut
    Je ne comprends pas pourquoi tu dis que l'autre code est plus précis.
    Il répond simplement à une égalité mais ce n'est pas ce que je cherche à résoudre; ce que je cherche c'est à encadrer (au sens mathématique) un nombre. Par exemple, quand je rentre x=2.7, ce que j'attends c'est que l'on m'affiche ""2.5 < ou = x < 3.5".

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Pour autant que je sache un switch/case teste uniquement des égalités. Si tu veux des intervalles, il faut revenir aux bons vieux if/elseif/else...
    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
    if ($x < 0)
    {
      echo 'x<0';
    }
    elseif ($x < 1)
    {
      echo '0 <= x < 1';
    }
    elseif ($x < 2)
    {
      echo '1 <= x < 2';
    }
    else
    {
      echo 'x >= 2';
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 74
    Par défaut
    En effet, l'utilisation du case default est une bonne pratique a adopter.
    En revanche le fait qu'il manque un break sur le dernier case ne change pas grand chose à vrai dire. En effet, après un l'execution d'un cas, switch continue et test le cas d'après, sauf si l'on ajoute un break. Ici le default étant le dernier cas, le break est optionnel puisque de toute façon il n'y a plus de cas a traiter.

    En revanche, le code de jabbounet est plus préci.

    En effet, en reprenant votre exemple, la valeur 3 entrainerai l'execution du default, et non du case '2.5' comme le laisser suggérer le code d'éric.

    Par contre il manque un guillemet avant ton dernier break jabbounet

  8. #8
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Citation Envoyé par _IpC_ Voir le message
    En effet, l'utilisation du case default est une bonne pratique a adopter.
    En revanche le fait qu'il manque un break sur le dernier case ne change pas grand chose à vrai dire. En effet, après un l'execution d'un cas, switch continue et test le cas d'après, sauf si l'on ajoute un break. Ici le default étant le dernier cas, le break est optionnel puisque de toute façon il n'y a plus de cas a traiter.
    sur certains langage c'est génant d'oublier des break, et c'est une bonne habitude à prendre.

    Par contre il manque un guillemet avant ton dernier break jabbounet
    je n'ai jamais fais de php donc je n'ai pas de moyen de faire des correction syntaxique a la volée....

  9. #9
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909

  10. #10
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Pour autant que je sache un switch/case teste uniquement des égalités. Si tu veux des intervalles, il faut revenir aux bons vieux if/elseif/else...
    Visiblement pas en php, enfin si ce site est sérieux
    http://www.php.net/manual/fr/control...res.switch.php

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    // Create loop to display links
    for($i = 0; $i < count($link); ++$i)
    {
        // Create randomizer
        // Use switch statement to find font size
        $randomizer = rand(1,50);
        switch($randomizer)
        {
        case ($randomizer <= 20):
        $font_size = "11";
        break;
     
        case ($randomizer <= 30):
        $font_size = "16";
        break;
     
        case ($randomizer <= 40):
        $font_size = "18";
        break;
     
        case ($randomizer <= 50):
        $font_size = "20";
        break;
        }
     
        // Display the link
        echo '<span style="font-size: ' .$font_size. ';">' .$link[$i]. '</span>&nbsp;&nbsp;';
     
    // Loop the next link
    }

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Citation Envoyé par jabbounet Voir le message
    Visiblement pas en php, enfin si ce site est sérieux
    http://www.php.net/manual/fr/control...res.switch.php
    je doute que tu trouves plus sérieux que le site des éditeurs de PHP Et j'aurais appris quelque chose...
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  12. #12
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Citation Envoyé par Celira Voir le message
    je doute que tu trouves plus sérieux que le site des éditeurs de PHP Et j'aurais appris quelque chose...
    Comme quoi, moi aussi, vu que je ne connais rien a php, maintenant je connais le site officiel

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

Discussions similaires

  1. [Tableaux] Problème avec Switch case
    Par philippef dans le forum Langage
    Réponses: 4
    Dernier message: 07/09/2005, 16h37
  2. [VBA] difficultés avec une requête INSERT
    Par elias dans le forum Access
    Réponses: 7
    Dernier message: 06/09/2005, 14h53
  3. Difficultés avec - onchange - !
    Par zakuli dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 20/07/2005, 12h00
  4. [débutant] Probleme avec switch et héritage
    Par durk dans le forum Langage
    Réponses: 2
    Dernier message: 21/04/2005, 09h48
  5. Difficultés avec TMenuItem.OnDrawItem
    Par ybruant dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/01/2005, 11h07

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