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 :

Différence de comportement switch/case et if/else [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 679
    Points
    679
    Par défaut Différence de comportement switch/case et if/else
    Bien le bonjour.

    J'ai experimenté ce matin un truc bizarre avec php.

    J'ai un script de connexion à une DB Mysql tel que suis qui fonctionne parfaitement:

    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
     
    <?php
    $host="localhost";
    $username="toto";
    $password="dtc";
     
    $upLink=@mysql_connect($host,$username,$password);
     
    if (!$upLink) {
    	echo "Une erreur est survenue lors de la tentative de connexion à la base de données."."</br>"."L'erreur suivante est survenue: ".mysql_error();
    }
    		else {
    				echo "Connexion réalisé avec succés!";
    		}
     
    ?>
    Maintenant, je me dit que si j'ai trop de cas à vérifier, il vas mieux falloir utiliser Switch/Case, le hic c'est que apparement ça ne fonctionne pas.

    En effet le script suivant, me répond une connexion correct à chaque fois que je l'execute, hors, la dans notre cas il devrait me dire que ce n'est pas bon.

    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
     
    <?php
    $host="localhost";
    $username="toto";
    $password="dtc";
     
    $upLink=@mysql_connect($host,$username,$password);
     
    switch ($upLink) {
    	case (!$upLink):
    			 echo "Une erreur est survenue lors de la tentative de connexion à la base de données."."</br>"."L'erreur suivante est survenue: ".mysql_error();
    	break;
     
    	case ($upLink):
    			 echo "Connexion réalisé avec succés!";
    	break;
    }
    ?>
    N'etant pas trop habitué à Switch/Case, je me dit que le souci viens peut etre de moi, mais ça me parait quand meme etrange.

    Donc, si une ame charitable veux bien m'aider

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    si tu fais un ! sur un type ressource ca retourne false
    si tu veux bien gérer tes erreurs mysql utilise le mysql.trace_mode c'est plus simple et évite les @

  3. #3
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Une structure switch/case permet de tester plusieurs valeurs pour une variable (ou une expression)

    Ces deux codes sont équivalents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if ($i == 0) 
    {
        echo "i égal 0";
    } 
    elseif ($i == 1) 
    {
        echo "i égal 1";
    } 
    elseif ($i == 2) 
    {
        echo "i égal 2";
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    switch ($i) {
        case 0:
            echo "i égal 0";
            break;
        case 1:
            echo "i égal 1";
            break;
        case 2:
            echo "i égal 2";
            break;
    }
    Donc ton code switch/case retraduit en if/else donnerait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ($upLink != $upLink)
    {
    	echo "Une erreur est survenue lors de la tentative de connexion à la base de données."."</br>"."L'erreur suivante est survenue: ".mysql_error();
    }
    elseif ($upLink == $upLink )
    {
    	 echo "Connexion réalisé avec succés!";
    }
    ce qui n'a pas grand intérêt

    Donc la question c'est : quelles sont les valeurs possibles pour ta variable ?

  4. #4
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 679
    Points
    679
    Par défaut
    Ok, merci pour ces informations, je vais donc modifier en conséquence

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

Discussions similaires

  1. Passage de structure else if à switch case
    Par stefsas dans le forum C#
    Réponses: 1
    Dernier message: 13/07/2010, 10h47
  2. If /Else & Switch case avec plusieurs paramètres
    Par ralek dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 07/07/2010, 19h28
  3. [Tableaux] Problème avec Switch case
    Par philippef dans le forum Langage
    Réponses: 4
    Dernier message: 07/09/2005, 16h37
  4. [JFrame] Explication sur une différence de comportement
    Par jems dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 06/07/2005, 09h23
  5. [Language] aide sur les switch case
    Par pouss dans le forum Langage
    Réponses: 3
    Dernier message: 05/04/2005, 11h34

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