Bonjour,
j'ai mis un switch dans mon code.

$ordre = $_GET'ordre'];
    switch ($ordre):
            case 0:
            $ordre = "id_facture";
            break;
            case 1:
            $ordre = "numero_facture";
            break;
            case 2:
            $ordre = "date_crea";
            break;
            case 3:
            $ordre = "nom_client";
            break;
            case 4:
            $ordre = "montant_ttc";
            break;          
            default:
            $ordre = "id_facture";
    endswitch;

Mais si la variable $ordre est vide, bin j'ai une erreur de variable inconnue!
Donc, j'ai entouré le code précédent avec:

if(isset($_GET'ordre'])) {

et

} else {
    $ordre = "id_facture";
    }

Bon, tout ceci fonctionne mais je ne comprend pas pourquoi les lignes:

default:
            $ordre = "id_facture";

... ne sont pas prises en compte si la variable "ordre" est vide? Pourquoi dois-je ajouter un isset?

Merci de m'éclairer.
Hexa

5 réponses


Maenhyr
Réponse acceptée

Bonjour, d'après la doc switch utilise une comparaison large (==) http://php.net/manual/fr/control-structures.switch.php.

Du coup il n'est pas capable de gérer le cas où ta variable est nulle.

Default ne fonctionne que pour les valeurs différentes de celles de tes case( ex : $ordre =5)

$_GET'ordre'] N'existe pas si tu n'a pas ?ordre dans ton url d'ou l'erreur.

Hexa
Auteur

Bin si, il y est! C'est bien ce qui m'étonne....
Mais le "default" n'est-il pas là au cas où la variable est vide? Sinon, à quoi sert ce default?

J'ai mis la réponse au dessus de ton commentaire. On a du répondre en même temps, tu n'as peut être pas vu.

Hexa
Auteur

Ha oui, exact! Effectivement, on a répondu en même temps.
Merci pour ta réponse, maintenant je vois comment faire.