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 :

empty ou isset ? [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut empty ou isset ?
    Bonjour,

    Je n'arrive toujours pas à faire plusieurs conditions avec les balises vides ou pleines.
    Dans ce code, cela ne passe jamais dans le 3ième elseIf.
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?php
    // Conditions de traitement des balises reçues
    // Si la variable new-asset est pleine et si la variable old-asset est vide.
    if (!empty($_POST["new-asset"])&& !!!empty($_POST['old-asset'])) 
    {// Set session variables
            $page='5';
                $_SESSION["_PDT"]= $_POST['demg'];
                $_SESSION["Prt"]= $_POST['prt'];
            $_SESSION["Asset"]= $_POST['new-asset'];
                $_SESSION["Time"]= $_POST['time'];
                $_SESSION["Balises1"] = $_SESSION["Balises2"];
                $_SESSION["Balises2"] =  $_SESSION["Balises1"] . "[" .  $_SESSION["_PDT"] ."_" . $_SESSION['Prt'] . " " . "< ASSET_"  . $_SESSION["Asset"]  . ">" . ""."< TPX_" .  $_SESSION["Time"]  . ">" ."]";
                $_SESSION["Balises2"] = $_SESSION["Balises2"];
                echo $_SESSION["Balises2"].'IF new-asset seul';
    }
    // Si la variable old-asset est pleine et si la variable new-asset est vide.
            elseIF(!empty($_POST['old-asset']))
            {// Set session variables
                $page='5';
                $_SESSION["_PDT"]= $_POST['demg'];
                $_SESSION["Prt"]= $_POST['prt'];
                $_SESSION["AssetOld"]= $_POST['old-asset'];
                $_SESSION["Time"]= $_POST['time'];
                $_SESSION["Balises1"] = $_SESSION["Balises2"];
                $_SESSION["Balises2"] =  $_SESSION["Balises1"] . "[" .  $_SESSION["_PDT"] ."_" . $_SESSION['Prt'] . " " . "< ASSET-OLD_"  . $_SESSION["AssetOld"]  . ">". " " . "< TPX_" .  $_SESSION["Time"]  . ">" ."]";
                $_SESSION["Balises2"] = $_SESSION["Balises2"];
                echo $_SESSION["Balises2"].'ElseIF old-asset seul';
            }
            // Si les deux variables new-asset et old-asset sont pleines.
            elseIF(!empty($_POST['new-asset']) && !empty($_POST['old-asset']))
            {// Set session variables
                $page='5';
                $_SESSION["_PDT"]= $_POST['demg'];
                $_SESSION["Prt"]= $_POST['prt'];
                $_SESSION["Asset"]= $_POST['new-asset'];
                $_SESSION["AssetOld"]= $_POST['old-asset'];
                $_SESSION["Time"]= $_POST['time'];
                $_SESSION["Balises1"] = $_SESSION["Balises2"];
                $_SESSION["Balises2"] =  $_SESSION["Balises1"] . "[" .  $_SESSION["_PDT"] ."_" . $_SESSION['Prt'] . " " . "< ASSET_"  . $_SESSION["Asset"]  . ">" . "< ASSET-OLD_"  . $_SESSION["AssetOld"]  . ">". " " . "< TPX_" .  $_SESSION["Time"]  . ">" ."]";
                $_SESSION["Balises2"] = $_SESSION["Balises2"];
                echo $_SESSION["Balises2"].'ElseIF old-asset and new-asset';
            }
            // Function suite clique sur le bouton précédent.
    elseif(isset($_SESSION['Balises2'])){
            $page='5';
            precedent();
        }
    ?>
    Quelle est mon erreur?

    Merci.

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Bonjour,

    Attention que l'utilisation de elseif implique forcément que CHAQUE condition précédente est fausse.
    Il est donc possible de valider (ou d'invalider) plusieurs variables à différentes étapes.

    Evitez également d'écrire de multiples négations sur une condition, ça ne change rien à part complexifier sa lecture
    if(!empty($test)) est strictement identique à if(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!empty($test)) sauf que c'est impossible de le savoir directement dans le second cas.
    Donc au lieu d'écrire !!!empty($_POST['old-asset']) écrivez simplement !empty($_POST['old-asset']).

    Maintenant, je résume les étapes de vos conditions. Elles sont VRAIES quand :
    1. new pas vide & old pas vide
    2. new osef & old pas vide
    3. new pas vide & old pas vide <== aie, vu que cette condition est déjà remplie par le point 2, on arrive jamais ici...


    Pour régler votre problème, vous devriez inverser les blocs 3 et 2

    Par contre, la fin me choque un peu... c'est peut-être correct mais je trouve ça étrange que tout porte sur les valeurs de $_POST et sur la création de variables de session et que le dernier elseif repose sur une session ???
    Ca voudrait dire que vous initialisez une session afin de recharger une page en POST pour afficher la page précédente ??? Je pense qu'il y a erreur de compréhension de ma part, ou de conception de votre part

    En y regardant de plus près, et d'après vos conditions, vous n'arrivez jamais dans le dernier cas de figure étant donné que la condition 1 étant que rien ne soit vide, que les 2 autres étant que l'un ou l'autre soit vide. Ca couvre donc 100% des cas.
    Pour reprendre le titre du sujet, il est peut-être possible de parer ce problème par l'utilisation de la fonction isset() mais ça me parait être deux comportements très différents qu'on ne devraient pas être gérés au même endroit

  3. #3
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Bonjour darkstar123456,
    Merci pour toutes ses explications.
    Effectivement je me suis emmêlé les pinceaux dans le tapis.
    Je vais y réfléchir.

    Pour
    Par contre, la fin me choque un peu... c'est peut-être correct mais je trouve ça étrange que tout porte sur les valeurs de $_POST et sur la création de variables de session et que le dernier elseif repose sur une session ???
    Ca voudrait dire que vous initialisez une session afin de recharger une page en POST pour afficher la page précédente ??? Je pense qu'il y a erreur de compréhension de ma part, ou de conception de votre part
    Les pages reçoivent des balises en $_POST et je les transforme en $_SESSION.
    Cela me permet de pouvoir les appeler dans un ordre différent selon les pages affichées. et cela me permet aussi de faire une balise $_SESSION générale qui traite toutes les autres balises.

    Mais c'est vous qui avez raison j'ai du encore faire des boulettes. pour le moment cela fonctionne, je verrai plus-tard pour modifier. je garde en mémoire votre analyse.

    Je vais me concentrer sur le empty.
    Merci.

  4. #4
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    J'ai ce code qui fonctionne que sur deux choix, le troisième choix va aussi dans le 1er IF au lieux d'aller dans le troisième ElseIF.
    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
    26
    27
    28
    <?php
    // Conditions de traitement des balises reçues
     if(isset($_POST['balise'])){
        $page='5';
        $_SESSION["_PDT"]= $_POST['demg'];
        $_SESSION["Prt"]= $_POST['prt'];
        $_SESSION["Asset"]= $_POST['new-asset'];
        $_SESSION["AssetOld"]= $_POST['old-asset'];
        $_SESSION["Time"]= $_POST['time'];
        // $_SESSION["Balises1"] = $_SESSION["Balises2"];
     
     
    // Si les deux variables sont pleines.
        if(!empty($_POST["new-asset"]) && !empty($_POST["old-asset"]))
        {
             echo' new-asset // IF';
        }
    // Si la variable old-asset est pleine et si la variable new-asset est vide.
        elseif(!empty($_POST["old-asset"]) && empty($_POST["new-asset"]))
                {
            echo 'old-asset // ElseIF ';
                }
    // Si la variable new-asset est pleine et la variable old-asset est vide.
        elseif(!empty($_POST["new-asset"]) && empty($_POST['old-asset']))
            { 
            echo 'new-asset + old-asset >>3// Else';
            }
    }// FIN IF PRINCIPAL
    Je ne comprends plus rien.
    Merci

  5. #5
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Bonjour,

    A partir du moment où votre premier condition vérifie si rien n'est vide (et qu'il n'y a que 2 conditions), vous pouvez abandonner les vérifications !empty() sur les conditions d'après car on sait qu'au moins une des 2 est vide.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        if (!empty($_POST["new"]) && !empty($_POST["old"])) {
     
        } else if(!empty($_POST['new'])) {
     
        } else if(!empty($_POST['old'])) {
     
        }

    Cependant, il vous manque peut-être un cas où les 2 sont vides (avec un else), mais ce n'est pas forcément utile dans votre cas


    le troisième choix va aussi dans le 1er IF au lieux d'aller dans le troisième
    Qu'entendez-vous par "le 3e choix" ? Avez-vous vérifié vos données avant d'être sur de la route qu'elles devaient prendre ?
    Je vous conseille d'afficher les valeurs et de constater ce qu'elles valent.
    Pourquoi ne pas créer un petit script d'exemple ?

    J'en ai créé un petit de mon côté, l'URL ne sera pas disponible éternellement mais la voici pour l'instant : https://tests.pierre-roels.com/empty-isset/
    Et voici son code PHP qui gère l'affichage des résultats :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    if (!empty($_POST['action']) && $_POST['action'] == 'submit') {
        echo '<hr />';
        echo '<h2>Résultats</h2>';
        if (!empty($_POST["new"]) && !empty($_POST["old"])) {
            echo '<div class="alert alert-success">Rien n\'est vide !</div>';
        } else if (!empty($_POST['new'])) {
            echo '<div class="alert alert-warning"><strong>NEW</strong> n\'est pas vide !</div>';
        } else if (!empty($_POST['old'])) {
            echo '<div class="alert alert-warning"><strong>OLD</strong> n\'est pas vide !</div>';
        } else {
            echo '<div class="alert alert-danger">Tout est vide :(</div>';
        }
    }
    ?>

    Pour l'historique, voici le code complet de la page :
    (je sais que le code HTML est un peu light mais c'est juste un test temporaire, on s'en fou du W3C XD)
    Code html : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous">
    <div class="container">
        <h1>empty ou isset ?</h1>
        <p>
            Code d'explication à destination de :<br />
            <a href="https://www.developpez.net/forums/d2132383/php/langage/empty-isset/" target="_blank">https://www.developpez.net/forums/d2132383/php/langage/empty-isset/</a>
        </p>
        <form method="post" action="">
            <div class="mb-3">
                <label for="new">Old assets</label>
                <textarea name="old" id="old" class="form-control"><?php if (!empty($_POST['old'])) echo stripslashes($_POST['old']); ?></textarea>
            </div>
     
            <div class="mb-3">
                <label for="new">New assets</label>
                <textarea name="new" id="new" class="form-control"><?php if (!empty($_POST['new'])) echo stripslashes($_POST['new']); ?></textarea>
            </div>
     
            <div class="mb-3">
                <input type="hidden" name="action" value="submit" />
                <button type="submit" class="btn btn-primary">Envoyer</button>
            </div>
        </form>
     
        <?php
        if (!empty($_POST['action']) && $_POST['action'] == 'submit') {
            echo '<hr />';
            echo '<h2>Résultats</h2>';
            if (!empty($_POST["new"]) && !empty($_POST["old"])) {
                echo '<div class="alert alert-success">Rien n\'est vide !</div>';
            } else if (!empty($_POST['new'])) {
                echo '<div class="alert alert-warning"><strong>NEW</strong> n\'est pas vide !</div>';
            } else if (!empty($_POST['old'])) {
                echo '<div class="alert alert-warning"><strong>OLD</strong> n\'est pas vide !</div>';
            } else {
                echo '<div class="alert alert-danger">Tout est vide :(</div>';
            }
     
            echo '<h2>Valeur de $_POST</h2>';
            echo PHP_EOL . '<pre>raw $_POST data : ' . print_r($_POST, true) . '</pre>' . PHP_EOL;
        }
        ?>
    </div>

  6. #6
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Bonjour darkstar123456,
    A partir du moment où votre premier condition vérifie si rien n'est vide (et qu'il n'y a que 2 conditions), vous pouvez abandonner les vérifications !empty() sur les conditions d'après car on sait qu'au moins une des 2 est vide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     if (!empty($_POST["new"]) && !empty($_POST["old"])) {
     
        } else if(!empty($_POST['new'])) {
     
        } else if(!empty($_POST['old'])) {
     
        }
    J'ai essayé et cela fait la même chose, il reste dans le IF dès que ($_POST["new"] est plein.
    Je pense que le programme ne lit pas &&.
    je suis sous IIS php version 7.4
    Merci

  7. #7
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Si juste avant la condition vous insérez :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($_POST['old-asset'], $_POST['new-asset']);

    Qu'est-ce que ça affiche ?
    Ca devrait vous donner le type de données (string normalement), la longueur et le contenu de chaque variable.

  8. #8
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    cela donne: string(9) "old-asset" string(9) "new-asset"

  9. #9
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Si vous ne faites que ce test, il est évident que ça passe toujours par le if() vu qu'aucun des deux n'est vide ^^
    Testez toutes les possibilités et là seulement vous pourrez dire que quelque chose ne fonctionne pas comme prévu

  10. #10
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Voici les 3 tests
    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
    $_POST['new-asset']='';
    $_POST['old-asset']= 'old-asset';
    var_dump($_POST['old-asset'], $_POST['new-asset']);
    // affiche >>>>string(9) "old-asset" string(0) ""
     
     
    $_POST['new-asset']='';
    $_POST['old-asset']= '';
    var_dump($_POST['old-asset'], $_POST['new-asset']);
    // affiche >>>>string(0) "" string(0) ""
     
    $_POST['new-asset']='new-asset';
    $_POST['old-asset']= '';
    var_dump($_POST['old-asset'], $_POST['new-asset']);
    // affiche >>>>string(0) "" string(9) "new-asset"
    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
    26
    27
    28
    29
    <?php
    // Set session variables
    $page='5';
    $_SESSION["_PDT"]= $_POST['demg'];
    $_SESSION["Prt"]= $_POST['prt'];
    $_SESSION["Asset-New"]= $_POST['new-asset'];
    $_SESSION["Asset-Old"]= $_POST['old-asset'];
    $_SESSION["Time"]= $_POST['time'];
    //$_SESSION["Balises1"] = $_SESSION["Balises2"];
     
    //var_dump($_POST['old-asset'], $_POST['new-asset']);
    if (!empty($_POST['new-asset']) && $_POST['old-asset'] == 'submit') {
      var_dump($_POST['old-asset'], $_POST['new-asset']); // /// string(1) " " string(6) "ASSET1" //
      echo '<hr />';
      echo '<h2>Résultats</h2>';
      if (!empty($_POST["new-asset"]) && !empty($_POST["old-asset"])) {
          var_dump($_POST['old-asset'], $_POST['new-asset']); // Ne donne RIEN
          echo 'Rien n\'est vide !>';
      } else if (!empty($_POST['new-asset'])) {
          var_dump($_POST['old-asset'], $_POST['new-asset']);
          echo 'NEW n\'est pas vide !';
      } else if (!empty($_POST['old-asset'])) {
          var_dump($_POST['old-asset'], $_POST['new-asset']); // Ne donne rien
          echo 'OLDn\'est pas vide !';
      } else {
          echo 'Tout est vide';
      }
    }
    ?>
    Ai-je bien compris ce que vous demandez?

  11. #11
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Ai-je bien compris ce que vous demandez?
    Ben... je crois pas

    C'est à vous de savoir... que veulent dire les commentaires "ne donne rien" ?

    C'est à vous de savoir : "quand je fais ça, je dois passer par là, est-ce que je vois bien le message au bon endroit ?"

    Avoir un var_dump() dans chaque condition n'importe pas car la valeur ne change pas.
    C'est pour ça qu'on l'affiche juste une fois au-dessus.
    Il m'aurait fallu le résultat valeurs <=> message affiché pour chaques valeurs testées :

    Code php : 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
    $_POST['new-asset']='';
    $_POST['old-asset']= 'old-asset';
    var_dump($_POST['old-asset'], $_POST['new-asset']);
    // valeurs >>>>string(9) "old-asset" string(0) ""
    // affiche >>>> OLD n'est pas vide
     
    $_POST['new-asset']='new-asset';
    $_POST['old-asset']= '';
    var_dump($_POST['old-asset'], $_POST['new-asset']);
    // valeurs >>>>string(0) "" string(9) "new-asset"
    // affiche >>>> NEW n'est pas vide
     
    $_POST['new-asset']='';
    $_POST['old-asset']= '';
    var_dump($_POST['old-asset'], $_POST['new-asset']);
    // valeurs >>>>string(0) "" string(0) ""
    // affiche >>>> Tout est vide
     
    $_POST['new-asset']='new-asset';
    $_POST['old-asset']= 'old-asset';
    var_dump($_POST['old-asset'], $_POST['new-asset']);
    // valeurs >>>>string(9) "old-asset" string(9) "new-asset"
    // affiche >>>> Rien n'est vide



    Attention cependant !! Vous avez changé les règles du jeu en modifiant la condition principale :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!empty($_POST['new-asset']) && $_POST['old-asset'] == 'submit') {

    Il devient impossible de passer cette condition.... et surtout, même si on la passe, ça rend obsolète le elseif car seule la première condition est valide si la condition parent est valide

  12. #12
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Bonjour à tous,
    En fait entre temps, avant de démissionner de mon CDD, j'ai voulu tester une autre solution.
    Donc à la 51ème solution. Cela fonctionne.
    Je me suis basé sur les valeurs d'une variable.
    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
    <?PHP
    if(isset($_POST['balise'])){
      // Set session variables
      $page='5';
      $_SESSION["_PDT"]= $_POST['demg'];
      $_SESSION["Prt"]= $_POST['prt'];
      $_SESSION["Asset-New"]= $_POST['new-asset'];
      $_SESSION["Asset-Old"]= $_POST['old-asset'];
      $_SESSION["Time"]= $_POST['time'];
      //$_SESSION["Balises1"] = $_SESSION["Balises2"];
    if($_POST['demg'] === 'REN'){
      echo'ALL ASSET';
    }
    elseif($_POST['demg'] === 'REP'){
      echo'OLD ASSET';
    }
    elseif($_POST['demg'] === 'DEM_PDT'||'PRT'||'NDO') {
      echo'NEWASSET';
    }
    }
    ?>
    C'est une solution qui fonctionne, mais ce n'est pas la solution à mon problème de base.
    Un énorme merci à vous tous, et surtout pour votre franchise et toutes vos aides, et votre patience envers un nul de chez nul comme moi.

  13. #13
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 453
    Points : 4 978
    Points
    4 978
    Par défaut
    Bonjour,
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    elseif($_POST['demg'] === 'DEM_PDT'||'PRT'||'NDO')


    à remplacer par :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    elseif(in_array($_POST['demg'],["DEM_PDT","PRT","NDO"]))
    //ou bien 
    elseif($_POST['demg'] === 'DEM_PDT'||$_POST['demg'] === 'PRT'||$_POST['demg'] === 'NDO')

  14. #14
    Membre habitué Avatar de two3d
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2012
    Messages : 126
    Points : 168
    Points
    168
    Par défaut
    Pas mal le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elseif(in_array($_POST['demg'],["DEM_PDT","PRT","NDO"]))

  15. #15
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Hello,

    Houla ! Il est bizarre ce code
    Pourquoi la valeur testée est $_POST['balise'], alors que finalement, la seule chose qu'on regarde c'est $_POST['demg'].
    Peut-être le code a été raccourci pour le forum ? Si ce n'est pas le cas, ce n'est pas particulièrement correct d'écrire ça

    Effectivement, l'écriture || m'a vachement surpris aussi. On ne peut pas écrire ça et généralement on préférera effectivement le in_array() qui est plus souple et facile à lire

    Pour ce qui est d'une suite de elseif() qui se base sur une seule variable, on testera alors plutôt via la fonction switch()

    Voici votre code adapté à l'utilisation de switch() :
    Code php : 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
    <?php
     
    if (!empty($_POST['demg'])) {
        // Attention à ne pas oublier les break
        // Oublier un break ne retourne pas d'erreur car c'est possible comme écriture
        switch ($_POST['demg']) {
            case 'REN':
                echo'ALL ASSET';
                break;
            case 'REP':
                echo 'OLD ASSET';
                break;
            case 'DEM_PDT':
            case 'PRT':
            case 'NDO':
                echo 'NEW ASSET';
                break;
            default:
                // On peut même avoir un cas par défaut :-)
                break;
        }
    }

    Sinon pour en revenir à l'erreur initiale, vous auriez pu tester le formulaire de test que j'ai créé dans la réponse #5

  16. #16
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Bonjour two3d ,
    Merci beaucoup pour votre message.
    Je vais le modifier.

    Bonjour darkstar123456,
    Le $_POST['balise'] est obligatoire car je dois savoir de quel façon j'accède à la page.
    Merci pour votre code.
    De plus j'ai déjà des pages avec un switch, et je n'y ai même pas pensé.
    Je vais faire la correction.

    Je garde dans mes fichiers perso, les deux solutions.

    Merci très sincèrement pour vos aides et votre passion.

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

Discussions similaires

  1. !empty et isset
    Par Kel-T dans le forum Langage
    Réponses: 5
    Dernier message: 14/05/2010, 09h24
  2. empty() et isset()
    Par LeGilou dans le forum Langage
    Réponses: 4
    Dernier message: 31/10/2008, 16h54
  3. empty et !isset
    Par s4mk1ng dans le forum Langage
    Réponses: 2
    Dernier message: 07/07/2008, 15h36
  4. Checkbox, empty, isset
    Par Anduriel dans le forum Langage
    Réponses: 1
    Dernier message: 11/07/2006, 23h23
  5. [Tableaux] la difference entre isset et empty
    Par ghita269 dans le forum Langage
    Réponses: 2
    Dernier message: 23/10/2005, 02h07

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