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 :

Pourquoi un isset ?


Sujet :

Langage PHP

  1. #41
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    @lionel0769
    ...Faudra juste penser à t'arrêter à la fin du chapitre 5 si tu suis le tuto donné par jreaux62. Le chapitre 6 consacré aux bdd ne doit pas être consulté puisqu'il utilise l'extension mysql, obsolète depuis longtemps et qui est complètement supprimée en php7. En remplacement tu devras chercher des tutos sur pdo.

    Et pour terminer l'histoire des opérateurs logiques, l'emploi de AND et OR ne pose pas de problème dans le contexte de leur code. Mais pour des conditions plus complexes c'est vite casse gueule et puis c'est le bug assuré - à moins de mettre des parenthèses pour bien délimiter la portée par rapport à l'opérateur précédent - dès qu'on emploie les opérateurs ternaires qui sont très souvent utilisés pour valider des variables et définir leur valeur par défaut.
    Pour reprendre mon exemple : si on veut s'assurer qu'un champ texte a été transmis et n'est pas vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     if (isset($_POST['toto']) && $_POST['toto'] != ''){}
    // L'équivalent avec un opérateur ternaire :
    $toto = isset($_POST['toto']) && $_POST['toto'] != '' ? $_POST['toto'] : false;// bon
    $toto = isset($_POST['toto']) AND $_POST['toto'] != '' ? $_POST['toto'] : false;// pas bon : la deuxième condition (AND $_POST['toto'] != '') ne sera pas testée
    $toto = (isset($_POST['toto']) AND $_POST['toto'] != '') ? $_POST['toto'] : false;// bon car la portée du AND a été définie avec les parenthèses en excluant l'opérateur précédent "="
    On voit ici que l'emploi du AND requière plus de précautions. Autant utiliser les opérateurs "&&" et "||" qui sont plus conformes au comportement "standard" (pour dire intuitif) attendu.

  2. #42
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    Si AND et OR sont source de bug, alors où sont-il pertinent ?

    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
    function get_request($name) {
        $value = isset($_POST[$name]) ? $_POST[$name] : NULL;
        var_dump($value);
        return $value;
    }
    function filter_request(&$value) {
        $value = trim($value);
        var_dump($value);
        return true;
    }
    function validate_request(&$value) {
        $is_valid = ctype_digit($value);
        var_dump($is_valid);
        return $is_valid;
    }
    function save_request(&$value) {
        // $link = mysqli_connect() OR die() ; // c'est moche
        echo "'".$value . "' has been recorded\n";
    }
     
    $_POST["age"] = "18ans  ";
    $_POST["age"] = "  18  ";
    $_POST["age"] = NULL;
    $data = $age = get_request('age') AND filter_request($age) AND validate_request($age) AND save_request($age);// C'est moche
    echo "'$data' received, '" . $age . "' recorded\n";

  3. #43
    Nouveau membre du Club
    Homme Profil pro
    routier
    Inscrit en
    Octobre 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : routier
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    même combat alors? Je viens de commencer la partie sur les bdd
    J'ai effectivement commencé à regarder le tuto mis en lien par jreaux62, notamment les exercices

    Merci pour le AND et OR , je ne savais pas ce qu' est un opérateur ternaire , maintenant je sais

  4. #44
    Nouveau membre du Club
    Homme Profil pro
    routier
    Inscrit en
    Octobre 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : routier
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par Gaulouis Voir le message
    Si AND et OR sont source de bug, alors où sont-il pertinent ?

    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
    function check_request($name) {
        $value = isset($_POST[$name]) ? $_POST[$name] : NULL;
        var_dump($value);
        return $value;
    }
    function filter_request(&$value) {
        $value = trim($value);
        var_dump($value);
        return true;
    }
    function validate_request(&$value) {
        $is_valid = ctype_digit($value);
        var_dump($is_valid);
        return $is_valid;
    }
    function save_request(&$value) {
        // $link = mysqli_connect() OR die() ; // c'est moche
        echo "'".$value . "' has been recorded\n";
    }
     
    $_POST["age"] = "18ans  ";
    $_POST["age"] = "  18  ";
    $_POST["age"] = NULL;
    $data = $age = check_request('age') AND filter_request($age) AND validate_request($age) AND save_request($age);// C'est moche
    echo "'$data' received, '" . $age . "' recorded\n";
    C'est pour moi ce message?, tu dois pas m' aimer toi , je viens de passer 30 mn à comprendre ce que m'a envoyé ABCIWEB

  5. #45
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    Si AND et OR sont source de bug, alors où sont-il pertinent ?
    C'est pour moi ce message?
    C'est a qui peut y répondre.


    Pour toi, (parce que jt'aime bien) j'ai une autre question.
    Il y a deux ramoneurs qui finissent de ramoner une cheminé, l'un en sort tout noir tandis que l'autre en sort tout blanc. Qui se lave quoi ?

  6. #46
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par Gaulouis Voir le message
    C'est a qui peut y répondre.
    Salut Gaulouis l'embrouille

    En même temps y'a pas grand chose à répondre. Si c'était pour tenter de trouver un intérêt à cette syntaxe, c'est raté puisque ta fonction "validate_request" ne valide rien du tout, et si c'était pour dire qu'on peut facilement se planter je l'avais déjà montré avec un exemple beaucoup plus simple

  7. #47
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par lionel0769 Voir le message
    même combat alors?
    Oui tout ce tuto utilise la syntaxe avec les opérateurs logiques "AND" et "OR".

    Au minimum ils auraient dû mettre en garde dès le début sur le comportement spécial de ces opérateurs. Ou plus simplement employer les opérateurs logiques "&&" et "||" par défaut.

    Et donc j'ai pas regardé en détail tout le tuto mais il y a fort à parier que tu pourras remplacer "AND" par "&&" et "OR" par "||" dans tous les cas, car il est très peu probable qu'ils utilisent les comportements particuliers de "AND" et "OR" dans un tuto pour débutant. Donc finalement cela fait prendre des "mauvaises habitudes par rapport au standard" sans la contrepartie d'en trouver les rares intérêts (du genre des acrobaties qu'à tenté Gaulouis l'embrouille avec un succès mitigé).

    Après cela ne gène pas dans le contexte de leur code, c'est juste une erreur pédagogique. Dommage ça fait comme un cheveux sur la soupe, et même un gros cheveu quand on lit qu'il vaut mieux employer "AND et "OR" avec comme seul prétexte que c'est plus lisible. Mais bon la soupe n'est pas mauvaise si on enlève le cheveu

    Sur le même site j'ai regardé un tuto plus avancé "Programmez en orienté objet en PHP" et l'auteur emploie bien les "&&" et "||", comme tout le monde...

  8. #48
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    Il y a deux ramoneurs qui finissent de ramoner une cheminé, l'un en sort tout noir tandis que l'autre en sort tout blanc. Qui se lave quoi ?
    Gaulouis l'embrouille
    Woué mais c'était pour plaisanter (On ne peut pas tous avoir le succès de jreaux62 avec son histoire d'oeuf et de poule)


    Plus sérieusement, la doc PHP nous montre cet exemple (avec OR)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $link = mysql_connect("localhost", "mysql_user", "mysql_password")
        or die("Impossible de se connecter : " . mysql_error());// On ne peu pas utiliser "||"
    En poussant le principe, j'écris un même code avec deux syntaxe:
    syntaxe AND
    syntaxe &&
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $age = check_request('age')
       AND filter_request($age)
       AND validate_request($age)
       AND save_request($age);// On ne peu pas utiliser "&&"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $age = check_request('age');
    filter_request($age)
                && validate_request($age)
                && save_request($age);
    Je ne me focalise pas, j’essaie de justifier l'emploie de AND "par ce que certain disent que c'est pas bien" alors que dans le tutoriel ça fonctionne (même si il a été mis en évidence des cas de bug)


    du genre des acrobaties qu'à tenté Gaulouis
    Je suis preneur d'un exemple élégant mettant en scène l’utilité de AND / OR


    Pour finir, je te renvoi la balle ABCIWEB:
    ta fonction "validate_request" ne valide rien du tout
    ctype_digit — Vérifie qu'une chaîne est un entier

  9. #49
    Nouveau membre du Club
    Homme Profil pro
    routier
    Inscrit en
    Octobre 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : routier
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Salut,
    le
    même combat alors?
    C' était plus pour ça:
    Le chapitre 6 consacré aux bdd ne doit pas être consulté puisqu'il utilise l'extension mysql, obsolète depuis longtemps et qui est complètement supprimée en php7. En remplacement tu devras chercher des tutos sur pdo.
    Apparemment, non, ils utilisent pdo.
    A gaulois,
    le blanc et le visage?

  10. #50
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    le blanc et le visage?
    Par ta conclusion j'en déduit une belle réflexion lionel0769

    Mais tu l'aura compris c'est une devinette sans fin a l'instar de ce thread ^^
    On aurais aussi pu supposer : Seulement le tout noir en entier ? Aucun des deux car ils ont une autre cheminé a ramoner ?

    En faite j'en sais rien. Comme l'utilisation de AND et de OR

  11. #51
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous,

    le GROS problème de cette discussion "sans fin", est que :
    • chacun y va de sa "définition"...
    • on parle de tout et de n'importe quoi (i.e. pas en rapport direct avec la question initiale qui ne parle que de isset)
    • que lionel0769 m'a botté en touche par MP, avant de "tilter" (et de nous entendre ) que, finalement, moi aussi, je ne cherche qu'à l'aider
    • ...


    BREF : le sujet initial de la question était "isset".

    TOUTE AUTRE "EXPLICATION" ou "balbaltage" sur un AUTRE sujet devrait faire partie d'une AUTRE discussion.

    N.B. Je me positionne du coté de lionel0769, qui, étant "débutant", se retrouve NOYE par TROP d'infos.

    Bisous à tous.


    [troll]MAIS QUAND VA-T-ON ENFIN PARLER DE EMPTY() ?????[/troll]
    • empty poussin
    • deux p'tits poussins
    • trois p'tits poussins
    • ....



    [EDIT] Je :plussois: ABCIWEB :
    ...Faudra juste penser à t'arrêter à la fin du chapitre 5 si tu suis le tuto donné par jreaux62.

  12. #52
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    juste pour passer le bonsoir à jreaux62

  13. #53
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    @lionel0769 Je parlais du lien donné par jreaux62 sur developpez.com, le "tuto pour grands débutants pressés" (on parle pas du même tuto).

  14. #54
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    @Gaulouis

    Je disais juste à lionel0769 de faire attention à ne pas prendre l'habitude d'utiliser par défaut les opérateurs logiques "AND" et "OR" comme le tuto le laisse entendre, mais "&&" et "||" qui ont un comportement plus standard. C'était important de le souligner pour comprendre le problème qu'on peut rapidement rencontrer avec la première syntaxe notamment dans les opérateurs ternaires qui sont par ailleurs abordés brièvement dans ce même tuto.

    Comme le dit jreaux62, ce n'est pas le sujet initial, donc pas vraiment l'endroit pour pousser plus loin l'explication ni d'essayer de donner un exemple pour lesquels "AND" et "OR" offrent des avantages car c'est compliqué pour un débutant, ou alors il fallait en rester à l'exemple de connexion mysql du manuel PHP. Mais surtout pas les acrobaties que tu as tentées pour produire au final un code inutilisable en l'état, puisque si l'on teste ton code avec $_POST["age"] = "toto", cette valeur n'est pas rejetée par ta fonction de validation avant son enregistrement en bdd... C'est donc un exemple à ne pas suivre. Comment veux-tu qu'un débutant y trouve un quelconque intérêt

    Faut rester simple si l'on veut réellement aider un débutant :
    Citation Envoyé par jreaux62
    Je me positionne du coté de lionel0769, qui, étant "débutant", se retrouve NOYE par TROP d'infos
    Alors en plus s'il faut qu'il fasse le tri pour trouver de lui-même un intérêt dans un exemple alambiqué et très approximatif...

    Et en additionnant ta blague suivante, tu comprendras le petit surnom que je t'ai donné pour l'occasion

    C'est pas pour te démotiver d'apporter de l'aide sur le forum, mais juste pour dire de faire attention à tes réponses et surtout de les adapter en fonction de la personne qui est à l'origine de la discussion, sinon tu l'embrouilles plus que tu ne l'aide

  15. #55
    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
    Je pense qu'on devrait s'arrêter là parce que je pense qu'on embrouille lionel davantage qu'on l'aide.

    @lionel : je suggère que tu ouvres un nouveau sujet si tu as d'autres questions et on fera un effort pour tenter de ne pas dériver
    @ tous les autres : merci pour vos contributions, mais maintenant il est temps d'aller poster ailleurs
    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]

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. [Templates] Quel système utilisez-vous ? Pourquoi ?
    Par narmataru dans le forum Bibliothèques et frameworks
    Réponses: 270
    Dernier message: 26/03/2011, 01h15
  2. Que choisir ? C# , VB.NET, C++, Delphi ? pourquoi ?
    Par Louis-Guillaume Morand dans le forum Général Dotnet
    Réponses: 475
    Dernier message: 08/04/2010, 20h27
  3. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 15h43
  4. Pourquoi ces directives #ifndef ... en haut des .h
    Par Patrick PETIT dans le forum C
    Réponses: 8
    Dernier message: 07/03/2003, 00h53

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