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 :

[PHP-JS] Savoir la différence entre 2 "isset"


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de jlb59
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2004
    Messages
    1 024
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2004
    Messages : 1 024
    Par défaut [PHP-JS] Savoir la différence entre 2 "isset"
    Bonjour à tous,

    En relisant tous mes fichiers de l'administration d'un moteur de recherche, j'ai vu ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((isset($_POST['base'])) && ($_POST['base'] != ""))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((isset($_POST['base']) && !empty($_POST['base']))
    Ce sont des codes récupérés ou qu'on m'a donnés, je sais plus !

    Ces 2 formes de codes testant la valeur d'un champ, quelle serait la meilleure des deux ?

    Merci de votre réponse.

  2. #2
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    cela va dépendre de ce que peut contenir ta variable, mais dans les cas les plus général, je conseille la deuxième méthodes.

    empty ne renverra pas false si et seulement si la variable est vide !

    ""
    "0"
    0
    false
    null

    toute ces cas feront qu'empty renverra false!

    empty n'étant pas une fonction mais une structure du langage, ton code sera plus performant avec empty, mais c'est négligeable!

    Pourquoi cela va dépendre du contenu? c'est justement parce que pour certains cas, "0", 0, ou false sont des valeurs que tu as peut être besoin de savoir

  3. #3
    Membre Expert
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Par défaut
    Bonjour,
    Tu peux toujours faire un petit test avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php if($_POST['test'] != "") {echo "test ok" ;} ?>
    <?php if(!empty($_POST['test'])) {echo "test_empty ok" ;} ?>
    <form name="form1" method="post" action="test.php">
      <input type="text" name="test" id="test">
      <input type="submit" name="button" id="button" value="Envoyer">
    </form>
    Essaye de mettre un "0" (zéro) dans le champs et regarde le résultat ...
    Personnellement j'utilise la première solution !="" ...
    Maintenant comme le dit SphynXz si tu es sûr que ta valeur ne soit jamais égale à zéro ... tu peux utiliser la deuxième solution.

  4. #4
    Membre éprouvé
    Avatar de jlb59
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2004
    Messages
    1 024
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2004
    Messages : 1 024
    Par défaut
    Merci de tes explications SphynXz,

    Comme j'ai pas mal de fichiers qui testent la valeur de certains champs, et qui font par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ((isset($_POST['url']) && ($_POST['url'] != "")) && 
       ((isset($_POST['titre']) && ($_POST['titre'] != "")) && 
       ((isset($_POST['motscles']) && ($_POST['motscles'] != ""))
    il faudrait que je change tout ça en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ((isset($_POST['url']) && !empty($_POST['url'])) && 
        (isset($_POST['titre']) && !empty($_POST['titre'])) && 
        (isset($_POST['motscles']) && !empty($_POST['motscles'])))
    En principe, il ne devrait pas y avoir de problèmes !

    La syntaxe ne change pas pour ce qui suit ?

  5. #5
    Membre éprouvé
    Avatar de jlb59
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2004
    Messages
    1 024
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2004
    Messages : 1 024
    Par défaut
    Citation Envoyé par jumano Voir le message
    Bonjour,
    Tu peux toujours faire un petit test avec le code suivant :
    Bonjour Jumano,

    Quand j'ai voulu faire ton test, qui est très bien expliqué d'ailleurs, j'ai eu un Parse Error
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: Undefined index: test in G:\SiteQI98\exemples_forum\moteur_recherche_admin\ajout\test.php on line 7
    Là, je ne percute pas ! J'ai du mal à comprendre cette histoire d'index.


    Citation Envoyé par jumano Voir le message
    Essaye de mettre un "0" (zéro) dans le champs et regarde le résultat ...
    Personnellement j'utilise la première solution !="" ...
    Maintenant comme le dit SphynXz si tu es sûr que ta valeur ne soit jamais égale à zéro ... tu peux utiliser la deuxième solution.
    Il est vrai que ce que vous m'avez dit et très explicatif, mais un petit renseignement si tu veux bien :
    Si le champ est alphanumérique ou numérique, la syntaxe est la même n'est-ce pas ?

    Je croyais avoir compris les explications de SphynXz, mais je me suis posé la question après !

  6. #6
    Membre Expert
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Par défaut
    Pour le message d'erreur essaye de rajouter un isset() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php if (isset($_POST['test'])) { 
          if($_POST['test'] != "") {echo "test ok" ;} 
          if(!empty($_POST['test'])) {echo "test_empty ok" ;}
    	  }
    ?>
    Si le champ est alphanumérique ou numérique, la syntaxe est la même n'est-ce pas ?
    La syntaxe sera la même, maintenant si ta variable peut être égale à "0"(zéro) avec §empty çà ne fonctionnera pas, puisqu'il la considèrera comme vide.
    Sinon regarde la doc ...

  7. #7
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    Pour ce qui est de l'erreur "Undefined Index", c'est que tu as très simplement copier/coller le bout de code que t'a gracieusement donné jumano. Il esperait que tu l'adapterait à ton code à toi

    Si une variable est vide : empty renvoit false
    Si une variable contient des données numérique :
    -Si elle contient 0 : empty renvoit false
    -Sinon empty renvoit true
    Si une variable contient "0" : empty renvoit false
    Si une variable contient NULL : empty renvoit false
    Si ta variable est un tableau dans lequel aucune données n'est présente : empty renvoit false aussi
    Si une variable n'est que déclaré : empty renvoit false

    Pour empty : le 0 pour le numérique c'est l'équivalent du vide pour du texte

  8. #8
    Membre Expert
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Par défaut
    Il esperait que tu l'adapterait à ton code à toi
    Non je penssais juste qu'on pouvait le mettre dans une page vierge pour faire le test ... et ainsi voir le résultat ...

  9. #9
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    je comprend, mais dans ce cas vaux mieux éviter d'utiliser des superglobals pour faire des test, autant tester de simple variables

  10. #10
    Membre éprouvé
    Avatar de jlb59
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2004
    Messages
    1 024
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2004
    Messages : 1 024
    Par défaut
    Je sais pas si c'est bien ça parce dans les tests de la base de données je n'ai pas de "isset" et ça marche !

    Ouh ! Là je m'embrouille...

  11. #11
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    sans "isset" ton contrôle fonctionnera tant que les variables que tu teste existent réellement!

    mais une fois que tu testerais une variables qui n'existe pas Aie : Warning!

  12. #12
    Membre éprouvé
    Avatar de jlb59
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2004
    Messages
    1 024
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2004
    Messages : 1 024
    Par défaut
    Je crois comprendre SphynXz, j'ai bien dis, je crois hein !

    Dans un formulaire, si je saisis les champs et que je les teste pour la requête, ça va marcher.
    Par contre, si les champs du formulaire restent vides et que j'envoie, c'est là qu'il risque d'y avoir des problèmes.

    Je vois la chose comme ça d'après tes explications.

  13. #13
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    C'est exactement çà !

  14. #14
    Membre éprouvé
    Avatar de jlb59
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2004
    Messages
    1 024
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2004
    Messages : 1 024
    Par défaut
    D'accord, je vérifie tout ça.
    Merci SphynXz.

  15. #15
    Membre éprouvé
    Avatar de jlb59
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2004
    Messages
    1 024
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2004
    Messages : 1 024
    Par défaut
    Citation Envoyé par SphynXz Voir le message
    sans "isset" ton contrôle fonctionnera tant que les variables que tu teste existent réellement!

    mais une fois que tu testerais une variables qui n'existe pas Aie : Warning!
    Il y a quelque chose qui m'échappe totalement !

    Tu m'as dis que si des champs d'un formulaire restaient vide, j'allais avoir des problèmes dans le test avant la requête.

    Explications :
    Dans un formulaire, j'ai 3 champs

    Si j'insère sans qu'aucun champ ne soit rempli, voilà ce que j'ai fait


    C'est la même chose s'il manque 1 ou 2 saisie.

    Et mon code se résume à ç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
    <?php
    require_once('../config/config_inc.php');
    echo '<fieldset>';
    echo '<legend>Ajout de mots-clés danse la base de données [<strong>',$nombase,'</strong>]</legend>';
    // Vérification de la saisie des champs
    if (($_POST['url'] !="") && 
        ($_POST['titre'] !="") && 
        ($_POST['motscles'] !=""))
    {
    $url     = $_POST["url"] ;
    $titre   = $_POST["titre"] ;
    $motscles = $_POST["motscles"] ;
     
    $sql = "INSERT INTO $nomtable (url,titre,motscles) VALUES ( '$url','$titre','$motscles')";
    $requete = mysql_query($sql, $lien) or die('Erreur dans la requête : ' . mysql_error() . ""); 
    ...
    Je ne comprends plus rien, parce que ça marche très bien sans les "ISSET".

  16. #16
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Tu ne peux pas tester un champ de formulaire avec isset() car il le sera forcément (théoriquement... parce que ce n'est pas le cas avec IE qd on valide en faisant "enter").

    isset() ==> $_GET et variables que tu définis toi-même

    empty() ==> $_POST

  17. #17
    Membre éprouvé
    Avatar de jlb59
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2004
    Messages
    1 024
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2004
    Messages : 1 024
    Par défaut
    Alors comme je fais mes tests avec FF, j'aurais plus de problèmes avec IE ?

  18. #18
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Oui et non... vu que si le champ n'est pas rempli, IE (7 ?) te dira que on isset() est "false"

    Vu que tu test isset() & empty() et que pour que la condition soit vraie il faut que les 2 retourne true(), la condition ne passera pas et renverra vers l'erreur

  19. #19
    Membre éprouvé
    Avatar de jlb59
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2004
    Messages
    1 024
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2004
    Messages : 1 024
    Par défaut
    D'accord, d'accord !

    En définitive, il faut mettre ISSET et EMPTY dans tous les tests des variables saisies dans un formulaire ?

  20. #20
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    personnellement c'est ce que je fais oui

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/04/2008, 12h12
  2. [Couleur] Différence entre Delphi, Php/Html
    Par Rayek dans le forum Langage
    Réponses: 5
    Dernier message: 19/10/2005, 14h06

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