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

Vue hybride

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

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    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 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
    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 confirmé
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    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 confirmé
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    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 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
    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 confirmé
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    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

+ 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