[RESOLU] Condition pour créer une variable.

Eléphant du PHP | 213 Messages

23 août 2022, 16:54

Bonjour,

J'ai fais un code pour créer une variable si condition.

Code : Tout sélectionner

<?php // Conditions de traitement des balises reçues // Set session variables //$page='5'; $_SESSION["_PDT"]= $_POST['demg']; $_SESSION["Prt"]= $_POST['prt']; $_SESSION["Asset"]= $_POST['new-asset']; $_SESSION["Asset-Old"]= $_POST['old-asset']; $_SESSION["Time"]= $_POST['time']; if (isset($_SESSION['BaliseA'])) { //Création BaliseB baliseAsset1(); } if (isset($_SESSION['BaliseA'])&& isset($_SESSION['BaliseB'])) { //Création BaliseC baliseAsset2(); } if (isset($_SESSION['BaliseA'])&& isset($_SESSION['BaliseB'])&& isset($_SESSION['BaliseC'])) { //Création BaliseD baliseAsset3(); } ?>
Malheureusement , dès que j'arrive à la deuxième condition, cela rentre aussi dans les autres conditions.
voici ce qu'affiche le résultat.

Code : Tout sélectionner

: [DEM_PDT_PCF < AE_XXX>< TPX_1>]BaliseA [DEM_PDT_PCF < AE_bbbbbbbbbbbbb>< TPX_2>]BaliseB créée----case NDO, DEM_PDT, PRT [DEM_PDT_PCF < AE_XXX>< TPX_1>]BaliseA [DEM_PDT_PCF < AE_bbbbbbbbbbbbb>< TPX_2>]BaliseB [DEM_PDT_PCF < AE_bbbbbbbbbbbbb>< TPX_2>]BaliseC créée --case NDO, DEM_PDT, PRT [DEM_PDT_PCF < AE_XXX>< TPX_1>]BaliseA [DEM_PDT_PCF < AE_bbbbbbbbbbbbb>< TPX_2>]BaliseB [DEM_PDT_PCF < AE_bbbbbbbbbbbbb>< TPX_2>]BaliseC [DEM_PDT_PCF < AE_bbbbbbbbbbbbb>< TPX_2>]BaliseD créée___case NDO, DEM_PDT, PRT
le résultat devrait être que la création de la baliseB

Code : Tout sélectionner

[DEM_PDT_PCF < AE_XXX>< TPX_1>]BaliseA [DEM_PDT_PCF < AE_bbbbbbbbbbbbb>< TPX_2>]BaliseB créée----case NDO, DEM_PDT, PRT
j'ai essayé avec des "!empty && empty" des "isset && !isset", cela rentre toujours dans toutes les conditions.
La seule condition qui fonctionne c'est la première qui va créer seulement la BaliseB.
Mais apprès impossible de faire condition par condition.
Car dans l'affichage du résultat, les BalisesC et BaliseD ne doivent pas apparaitre, elles n'existe pas pour le moment.

Voici le fichier des functions demandées.

Code : Tout sélectionner

<!-- //############################################################## --> <?PHP function BaliseAsset() { // $page='5'; 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': $_SESSION["BaliseA"] = "[" . $_SESSION["_PDT"] ."_" . $_SESSION['Prt'] . " " . "< AE_" . $_SESSION["Asset"] . ">" ." " . "< AS_" . $_SESSION["Asset-Old"] . ">" . ""."< TPX_" . $_SESSION["Time"] . ">" ."]"; echo $_SESSION['BaliseA']."case REN"; break; case 'REP': $_SESSION['BaliseA'] = "[" . $_SESSION["_PDT"] ."_" . $_SESSION['Prt'] . " " . "< AS_" . $_SESSION["Asset-Old"] . ">" . ""."< TPX_" . $_SESSION["Time"] . ">" ."]"; echo $_SESSION['BaliseA']."case REP"; break; case 'DEM_PDT': case 'PRT': case 'NDO': $_SESSION['BaliseA'] = "[" . $_SESSION["_PDT"] ."_" . $_SESSION['Prt'] . " " . "< AE_" . $_SESSION["Asset"] . ">" . ""."< TPX_" . $_SESSION["Time"] . ">" ."]"; echo $_SESSION['BaliseA']."BalisA ceéée----case NDO, DEM_PDT, PRT"; break; default: // On peut même avoir un cas par défaut :-) break; }// Fin du switch }// Fin du IF empty }// Fin Function ?> <!-- ############################################################## --> <?PHP function baliseAsset1() { // $page='5'; 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': $_SESSION["BaliseB"] = "[" . $_SESSION["_PDT"] ."_" . $_SESSION['Prt'] . " " . "< AE_" . $_SESSION["Asset"] . ">" ." " . "< AS_" . $_SESSION["Asset-Old"] . ">" . ""."< TPX_" . $_SESSION["Time"] . ">" ."]"; echo $_SESSION['BaliseB']."case REN"; break; case 'REP': $_SESSION['BaliseB'] = "[" . $_SESSION["_PDT"] ."_" . $_SESSION['Prt'] . " " . "< AS_" . $_SESSION["Asset-Old"] . ">" . ""."< TPX_" . $_SESSION["Time"] . ">" ."]"; echo $_SESSION['BaliseB']."case REP"; break; case 'DEM_PDT': case 'PRT': case 'NDO': $_SESSION['BaliseB'] = "[" . $_SESSION["_PDT"] ."_" . $_SESSION['Prt'] . " " . "< AE_" . $_SESSION["Asset"] . ">" . ""."< TPX_" . $_SESSION["Time"] . ">" ."]"; echo '<br><br>'.$_SESSION['BaliseA'].'BaliseA <br>'.$_SESSION['BaliseB']."BaliseB créée----case NDO, DEM_PDT, PRT"; break; default: // On peut même avoir un cas par défaut :-) break; }// Fin du switch }// Fin Empty }// Fin Function ?> <!-- ############################################################## --> <?PHP function baliseAsset2() { // $page='5'; 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': $_SESSION["BaliseC"] = "[" . $_SESSION["_PDT"] ."_" . $_SESSION['Prt'] . " " . "< AE_" . $_SESSION["Asset"] . ">" ." " . "< AS_" . $_SESSION["Asset-Old"] . ">" . ""."< TPX_" . $_SESSION["Time"] . ">" ."]"; echo $_SESSION['BaliseC']."case REN"; break; case 'REP': $_SESSION['BaliseC'] = "[" . $_SESSION["_PDT"] ."_" . $_SESSION['Prt'] . " " . "< AS_" . $_SESSION["Asset-Old"] . ">" . ""."< TPX_" . $_SESSION["Time"] . ">" ."]"; echo $_SESSION['BaliseC']."case REP"; break; case 'DEM_PDT': case 'PRT': case 'NDO': $_SESSION['BaliseC'] = "[" . $_SESSION["_PDT"] ."_" . $_SESSION['Prt'] . " " . "< AE_" . $_SESSION["Asset"] . ">" . ""."< TPX_" . $_SESSION["Time"] . ">" ."]"; echo '<br><br>'.$_SESSION['BaliseA'].'BaliseA <br>'.$_SESSION['BaliseB'].'BaliseB <br>'.$_SESSION['BaliseC']."BaliseC créée --case NDO, DEM_PDT, PRT"; break; default: // On peut même avoir un cas par défaut :-) break; }// Fin du switch }// Fin Empty }// Fin Function ?> <!-- ############################################################## --> <?PHP function baliseAsset3() { // $page='5'; 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': $_SESSION["BaliseD"] = "[" . $_SESSION["_PDT"] ."_" . $_SESSION['Prt'] . " " . "< AE_" . $_SESSION["Asset"] . ">" ." " . "< AS_" . $_SESSION["Asset-Old"] . ">" . ""."< TPX_" . $_SESSION["Time"] . ">" ."]"; echo $_SESSION['BaliseD']."case REN"; break; case 'REP': $_SESSION['BaliseD'] = "[" . $_SESSION["_PDT"] ."_" . $_SESSION['Prt'] . " " . "< AS_" . $_SESSION["Asset-Old"] . ">" . ""."< TPX_" . $_SESSION["Time"] . ">" ."]"; echo $_SESSION['BaliseD']."case REP"; break; case 'DEM_PDT': case 'PRT': case 'NDO': $_SESSION['BaliseD'] = "[" . $_SESSION["_PDT"] ."_" . $_SESSION['Prt'] . " " . "< AE_" . $_SESSION["Asset"] . ">" . ""."< TPX_" . $_SESSION["Time"] . ">" ."]"; echo '<br><br>'.$_SESSION['BaliseA'].'BaliseA <br>'.$_SESSION['BaliseB'].'BaliseB <br>'.$_SESSION['BaliseC'].'BaliseC <br>'.$_SESSION['BaliseD']."BaliseD créée___case NDO, DEM_PDT, PRT"; break; default: // On peut même avoir un cas par défaut :-) break; }// Fin du switch }// Fin Empty }// Fin Function ?>
Merci.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

23 août 2022, 17:34

Si tu veux que le traitement s'arrête après avoir rempli 1 condition, alors il faut que tu utilises des elseif

Si tu fais un enchainement de if() et que les conditions de chacun sont valides, c'est normal qu'il les exécutes tous.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 213 Messages

24 août 2022, 15:33

Bonjour @rthur,

J'ai essayé avec des elseif, et je rencontre aussi des erreurs.
Ne serait-il pas plus judicieux de créer un tableau, comportant déjà le nom des Balises, même si elles ne sont pas encore créées.
J'ai essayé ce code, mais erreur à la déclaration du tableau.

Code : Tout sélectionner

$baliseInt= array($_SESSION['BaliseA'],$_SESSION['BaliseB'],$_SESSION['BaliseC'],$_SESSION['BaliseD']); switch ($baliseInt) { case $_SESSION['BaliseA']: baliseAssetB(); break; case $_SESSION['BaliseB']: baliseAssetC(); break; case $_SESSION['BaliseC']: baliseAssetD(); break; default: // On peut même avoir un cas par défaut :-) break; }
je vais tout refaire avec les elseif.

Code : Tout sélectionner

if(isset($_SESSION['BaliseA'])) { baliseAssetB(); } elseif(isset($_SESSION['BaliseB'])) { baliseAssetC(); } elseif(isset($_SESSION['BaliseC'])) { baliseAssetD(); }
Cela modifie la $_SESSION['BaliseB'] quand je veux créer la $_SESSION['BaliseC']), et ne créé pas la $_SESSION['BaliseB']), donc je rentre à chaque fois dans baliseAssetB(); au lieu de rentrer ensuite dans baliseAssetC();
Merci
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Eléphant du PHP | 213 Messages

24 août 2022, 16:34

Bonjour,

J'ai trouvé la solution.
Voici le code final.

Code : Tout sélectionner

if(isset($_SESSION['BaliseA'])&&!isset($_SESSION['BaliseB'])) { baliseAssetB(); } elseif((isset($_SESSION['BaliseA'])&&isset($_SESSION['BaliseB'])&&!isset($_SESSION['BaliseC']))) { baliseAssetC(); } elseif((isset($_SESSION['BaliseA'])&&isset($_SESSION['BaliseB'])&&isset($_SESSION['BaliseC'])&&!isset($_SESSION['BaliseD']))) { baliseAssetD(); }
Et voici l'affichage correcte.

Code : Tout sélectionner

[DEM_PDT_PCF < AE_AAA>< TPX_1>] [DEM_PDT_PCF < AE_AAA>< TPX_1>]A [DEM_PDT_PCF < AE_BBB>< TPX_2>]B [DEM_PDT_PCF < AE_CCCC>< TPX_3>]C [DEM_PDT_PCF < AE_DDDDD>< TPX_4>]BaliseD créée___case NDO, DEM_PDT, PRT
Ne me demandez pas comment j'ai fait, car j'ai essayé tellement de solutions.
Je ne sais si le code est propre, mais au moins il fonctionne.
Merci à tous pour vos aides, explications, votre patience.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.