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. #21
    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
    C'est pas faux
    T'as pas compris ?


    on aurais aussi pu vérifier que le champ password existe via array_key_exists($_POST, 'password') et là la valeur NULL est traitable. Ca permet de réutiliser le code de vérification du formulaire pour un service (mais là je suis plus vraiment dans le sujet).

    array_key_exists c'est quand même plus parlant

  2. #22
    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 justement que utiliser array_key_exists dans le cas d'un champ de formulaire n'est pas vraiment utile : soit le champ est reçu (éventuellement vide, mais dans ce cas la variable vaudra ""), soit le champ n'est pas reçu.
    A mon sens, ne pas recevoir le champ ou le recevoir à null, c'est pareil (de toute façon, je ne suis pas sûre que techniquement ce soit possible)
    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]

  3. #23
    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,
    Je crois que vous m' avez perdu la, je comprends plus rien
    Si la valeur est nulle, elle est différente de kangourou, donc pourquoi encore vérifier qu' elle est nulle alors que je lui demande juste si elle est égale à kangourou.
    Ma logique dirait que si c'est autre chose que kangourou ( donc pas null ou quoi que ce soit) le password n'est pas accepté,non?

    Sinon, j'arrive toujours pas à voir l'erreur, je rappel mon php.ini donne:
    display_errors=On
    et error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT

    Je tourne sur kubuntu et j'utilise lampp , je peux éditer mon php.ini, que j'ai trouvé dans lampp/etc/php.ini
    Je peux l' éditer en l' ouvrant en sudo mais je sais pas quoi y mettre car le E_all tout court ne change rien.

    Pour les arrey_key, !empty etc etc , j'en suis pas encore la mais je vais aller jeter un oeil par curiosité
    Merci

  4. #24
    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 tu enleve le isset et que tu fais http://www.developpez.net/forums/d15...t/#post8610575

    Tu obtiendra l'erreur.

  5. #25
    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
    Désolé, j'avais pas vu que c' était à moi que tu répondait comme Laurent posait des questions aussi.
    Effectivement ça bug

    isset — Détermine si une variable est définie et est différente de NULL , c'est la définition du manuel php

    Je comprends pas la "variable est défini", en faite il cherche si la variable est bien dans le name de input?

  6. #26
    Invité
    Invité(e)
    Par défaut
    Je ne comprends pas ton "acharnement" concernant "isset".
    La définition est pourtant claire, non ?
    Dernière modification par Invité ; 27/04/2016 à 18h01.

  7. #27
    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 t'ai déjà répondu :
    Citation Envoyé par ABCIWEB Voir le message
    il faut être certain de l'existence d'une variable avant de l'utiliser ou la comparer etc. D'où les isset sur une variable $_POST utilisateur qui sera définie uniquement s'il a envoyé le formulaire.

    Quand on envoie le formulaire, alors tous les input contenus seront récupérés dans les variables $_POST correspondantes (quand on choisi la méthode post évidemment). Si un champ "toto" n'a pas été renseigné, il sera transmis et sera vide. Si on veut s'assurer qu'un champ texte (donc également password) a été transmis et n'est pas vide on devra donc faire if (isset($_POST['toto']) && $_POST['toto'] != ''). Et si on veut s'assurer que le contenu n'est pas composé uniquement d'espaces vides on pourra faire if (isset($_POST['toto']) && trim($_POST['toto']) != '')
    Citation Envoyé par ABCIWEB Voir le message
    On utilise isset pour respecter la syntaxe php et n'appliquer des fonctions ou comparaisons etc. qu'après avoir vérifié que la variable existe. Sinon le débuguage est beaucoup plus compliqué et les erreurs assez imprévisibles. Ce n'est pas une option mais un principe à respecter rigoureusement pour produire un code correct et maintenable
    Quand tu auras compris cela ça ira mieux.

  8. #28
    Invité
    Invité(e)
    Par défaut
    ...je n'ose même pas parler de "empty()"...

    @Gaulouis
    "C'est pas faux..."

  9. #29
    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
    Ca y est , j'ai compris
    avec l' histoire du script malveillant de Gaulois et la double explication de ABCIWEB.
    Merci

    Bon j'attaque le empty, pour faire plaisir à jreaux62

  10. #30
    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
    Oui encore que comme j'ai déjà dit, si l'histoire du script malveillant peut te motiver, c'est pas plus mal, mais sur le principe on exécute un code sous certaines conditions.
    Isset va surtout servir dans ton exemple pour être certain que les variables nécessaires ont bien été envoyées et ainsi pouvoir exécuter la suite de ton code en conséquence, quand les conditions que tu souhaites sont toutes remplies. C'est le minimum pour maîtriser le comportement d'un code.

    Ensuite il se trouve que si on ne maîtrise pas bien le code, il peut faire un peu n'importe quoi - pour dire inattendu surtout quand on est débutant mais aussi pour les plus chevronnés quand les lignes de script s'accumulent - et même renvoyer des messages d'erreurs qui dans certains cas pourraient renseigner des personnes malveillantes. Mais c'est juste une des conséquences d'un script approximatif. Le même script approximatif ne fonctionnera pas mieux si un visiteur fait une erreur involontaire et de ton côté tu auras bien plus de mal à le débugguer et à le faire évoluer. Pour dire que quand bien même tu ferais uniquement de l'intranet avec des postes de travail uniquement accessibles à des personnes de confiance, pour autant il faudra toujours respecter les mêmes précautions et vérifier tes variables avant de les utiliser

  11. #31
    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
    renseignées et envoyées
    c'est justement la ou je bloquais
    Pour moi ton "envoyées" ou "transmis" dans ton message précédent, c'est cliquer sur le bouton valider du formulaire, l'histoire du script malveillant m'a fait comprendre que c'est pas parce que tu valides que tes infos sont transmis au formulaire.php, notamment parce que le formulaire a pu être corrompu.
    Et donc isset vérifie que les infos que tu lui envoies après avoir cliquer sur valider sont bien arrivés et bien rempli ( que la variable est bien défini et non null, comme la définition quoi )

  12. #32
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Maintenant qud tout semble clair, il reste une question cruciale :

    QUI est arrivé en premier ? L'oeuf ou la poule ???

    isset(oeuf) OU isset(poule) ??




    Quant à empty, c'est clair : soit l'oeuf est vide, ... soit y'a pas d'oeuf !

    1 poussin = 2.
    CQFD.

  13. #33
    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 laisse vraiment rentrer n’importe qui ici lol
    QUI est arrivé en premier ? L'oeuf ou la poule ???
    Si tu pose la question a un enfant il te répondra que c'est la poule (Peut être par ce qu'il ne sais pas qu'il faut un coq pour faire un poussin)

  14. #34
    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
    Et donc isset vérifie que les infos que tu lui envoies après avoir cliquer sur valider sont bien arrivés et bien rempli ( que la variable est bien défini et non null, comme la définition quoi )
    Bah alors non c'est toujours pas clair... C'est pour cela que j'insistais pour séparer les problèmes de sécurité par rapport à l'utilisation de isset, faut pas tout mélanger. Isset permet de s'assurer qu'une variable a été définie, mais pas qu'elle est bien renseignée ou bien remplie, je l'ai déjà rappelé ici.

    La condition sur isset dans le contexte de ton premier message ne protège en rien ton formulaire, j'aimerais bien que cela soit clair Cela permet d'exécuter la suite de ton code c'est à dire de comparer $_POST['mot_de_passe'] == "kangourou" quand la variable $_POST['mot_de_passe'] est définie. C'est tout.

    Si tu enlevais la condition sur isset tu obtiendrais une notice (en phase de développement uniquement) - car comme déjà dit mille fois il faut être certain de l'existence d'une variable avant de s'en servir sinon php envoie une notice pour le rappeler - mais cela ne changerait en rien la sécurité de ton script car la comparaison $_POST['mot_de_passe'] == "kangourou" sera tout de même effectuée et renverra évidemment false si $_POST['mot_de_passe'] n'a pas été définie.


    IMPORTANT
    Au passage je vois que tu utilises les opérateurs logiques "AND" et "OR". Attention ils n'ont pas un comportement standard et ne devraient être utilisés qu'après justification explicite de leur emploi. Il n'y a aucune raison d'employer ces opérateurs dans ce contexte.

    Pour moi c'est rédhibitoire dans un tuto pour débutants car c'est une aberration de laisser penser qu'ils sont équivalents aux opérateurs "&&" et "||". Fatalement un jour ça va buguer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $a = 2;
     
    $b = isset($a) && $a == 5;
    $c = isset($a) AND $a == 5;
    $d = isset($a) OR $a == 5;
     
    var_dump($b); // renvoie false
    var_dump($c); // renvoie true
    var_dump($d); // renvoie true

    @jreaux62 On a trouvé les coupables de cet emploi injustifié dont on a parlé récemment dans un autre sujet. C'est un tuto pour débutants d'un autre site où il est mentionné "sans complexe" :
    Les deux fonctionnent aussi bien, mais je vous recommande d'utiliser le mot-clé (AND ou OR) de préférence, c'est plus « facile » à lire
    Et en plus tous les exemples de ce tuto sont à la même enseigne et utilisent "OR" et "AND", c'est pas une erreur anecdotique
    On devrait leur demander une commission pour le travail de SAV qu'on fait en retour de cette approximation périlleuse

  15. #35
    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
    Quand tu dis "vide" c'est différent de NULL ?
    Le isset vérifie que la valeur n'est pas NULL ( c'est la def) , je pensais que ça vérifiait qu' il y avait bien une valeur qui a été envoyé
    que : était déjà effectuer par le isset et donc que la valeur est "bien rempli" (bien rempli=qu' une valeur est bien présente (et pas que c'est la valeur attendu))

    Que le formulaire pouvait être compromis malgré le isset , ça c'est ok.

    pour le and et && c'est effectivement open classroom

  16. #36
    Invité
    Invité(e)
    Par défaut
    Oublie les histoires de sécurité ou de valeur.

    isset vérifie si le NOM DE VARIABLE est défini.
    C'est tout.
    Dernière modification par Invité ; 27/04/2016 à 17h43.

  17. #37
    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
    Pas mieux

    isset vérifie que la variable existe.
    Appliquée à un tableau (isset($tab['index'])), ça vérifie que le tableau contient bien l'index recherché.
    Appliquée à $_POST (isset($POST['champ_1'])), ça vérifie que le champ du formulaire a été envoyé.
    Appliquée à $_GET (isset($GET['champ_1'])), ça vérifie que le champ est bien présent dans l'URL

    ça ne fait aucune validation de sécurité et ça ne teste pas les valeurs du type chaine vide "". Si ton champ est bien envoyé, isset vaut renvoyer vrai, même si tu n'as rien tapé dedans.
    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]

  18. #38
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Celira Voir le message
    isset vérifie que la variable existe.
    Soyons clair :

    isset vérifie que le NOM DE LA variable existe (ou qu'elle n'est pas définie à NULL, mais surtout, n'embrouillons pas les choses !).


    Passons à autre chose... Parlons de empty() !
    Dernière modification par Invité ; 27/04/2016 à 18h00.

  19. #39
    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
    ok merci à vous

  20. #40
    Invité
    Invité(e)
    Par défaut
    Bref.

    Voilà un bon tutoriel pour débuter :


    Avec un exemple simple d'utilisation de isset : III-3. Les formulaires, suite

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

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, 00h15
  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, 19h27
  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, 14h43
  4. Pourquoi ces directives #ifndef ... en haut des .h
    Par Patrick PETIT dans le forum C
    Réponses: 8
    Dernier message: 06/03/2003, 23h53

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