8768 sujets

Développement web côté serveur, CMS

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


<?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.
:
[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

[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.

<!-- //############################################################## -->
  <?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  [smile]
          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  [smile]
          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  [smile]
          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  [smile]
          break;
  }// Fin du switch
  }// Fin Empty
}// Fin Function
?>


Merci.
Salut,

Étant donné qu'il ne peut y avoir qu'une condition 'true' à chaque execution, il est préférable (de mon point de vue) d'utiliser "elseif".

De plus j'ai ajouté empty() afin de tester si la variable n'est pas vide.

Donc si une variable n'est pas définie OU vide alors on créer la variable suivante.


<?php

//$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']) or empty($_SESSION['BaliseA']))
{  

    baliseAsset1();

}
elseif((!isset($_SESSION['BaliseA']) and !isset($_SESSION['BaliseB'])) or (empty($_SESSION['BaliseA']) and empty($_SESSION['BaliseB']))) 
{  

    baliseAsset2();

}
elseif((!isset($_SESSION['BaliseA']) and !isset($_SESSION['BaliseB']) and !isset($_SESSION['BaliseC'])) or (empty($_SESSION['BaliseA']) and empty($_SESSION['BaliseB']) and empty($_SESSION['BaliseC'])))
{  

    baliseAsset3();

}



J'espère t'avoir apporter de l'aide Smiley smile
Bonne journée,
Maël
Modifié par maelstaudt (24 Aug 2022 - 08:01)
Bonjour Maël,

Merci pour ton code, et tes explications.
Je viens de tester ton code, malheureusement, dès-que la BaliseA est créée, ensuite il ne rentre dans aucune condition, et n'affiche pas d'erreur, mais la BaliseB n'est pas créée.
Merci à toi.
Bonne journée.
Le fonctionnement que tu viens de me décrire est logique par rapport au code; j'ai mal interprété ce que tu souhaiterais.

Alors nous allons déjà le faire en français :

Tu souhaites créer BaliseA à quelle condition ?
Tu souhaites créer BaliseB à quelle condition ?
Tu souhaites créer BaliseC à quelle condition ?
Une seule condition peut-être vraie ?

Merci
Bonjour maelstaudt,
C'est sûrement que je me suis encore mal exprimé, ce n'est pas de ta faute.
La BaliseA se créée en premier automatiquement, mais si l'user faire ajouter une action,
donc cela créera la BaliseB.
Si BaliseA est vraie donc BaliseB à créer
Si BaliseB est vraie donc BaliseC à créer
Si BaliseC est vraie donc BaliseD à créer
Si BaliseD est vraie donc BaliseE à créer
Si BaliseE est vraie donc BaliseF à créer
Uns seule condition doit être vraie.

Merci de tout cœur pour ta patience.
Dans ce cas il faut imbriquer les condition :

Exemple :

if(isset($_SESSION['BaliseA']))
{

    baliseAsset1();

    if(isset($_SESSION['BaliseB']))
    {

        baliseAsset2();

        if(isset($_SESSION['BaliseC']))
        {

            baliseAsset3();

            if(isset($_SESSION['BaliseD']))
            {

                baliseAsset4();
                
                //Ainsi de suite...

            }

        }

    }

}


Après il serait peut-être judicieux d'utiliser une boucle pour effectuer ces conditions.
Regarde déjà, si le principe que je t'ai proposé correspond à ton besoin.

Maël
Bonjour Maël,

J'avais déjà fait cela , mais pas de la même façon que toi.
Mais malheureusement cela créé toutes les variables, une fois que je veux créer la BaliseB.

DEM_PDT_PCF < AE_XXX>< TPX_1>]BaliseA
[DEM_PDT_PCF < AE_XXX>< TPX_2>]BaliseB créée----case NDO, DEM_PDT, PRT

[DEM_PDT_PCF < AE_XXX>< TPX_2>]BaliseC créée --case NDO, DEM_PDT, PRT

[DEM_PDT_PCF < AE_XXX>< TPX_2>]BaliseD créée___case NDO, DEM_PDT, PRT

Et si je veux créer la baliseC cela remplace la BaliseB

DEM_PDT_PCF < AE_XXX>< TPX_1>]BaliseA
[DEM_PDT_PCF < AE_XXX>< TPX_3>]BaliseB créée----case NDO, DEM_PDT, PRT

[DEM_PDT_PCF < AE_XXX>< TPX_3>]BaliseC créée --case NDO, DEM_PDT, PRT

[DEM_PDT_PCF < AE_XXX>< TPX_3>]BaliseD créée___case NDO, DEM_PDT, PRT


Je vais essayer avec un switch......
Merci.
Modérateur
Bonjour,

si je comprend bien , tu as besoin de savoir si dans ton tableau $_SESSION tu as des clés commençant par BaliseA , BaliseB , etc ... puis en ajouter une incrémenter d'une lettre.

Il serait probablement plus simple d'extraire toutes tes clés BaliseX , de les trier par ordre alphabétique, prendre la dernière et l’incrémenter de 1 pour en créer une nouvelle .

voir https://www.php.net/manual/fr/language.operators.increment.php pour les options d'incrementation

En gros , tu n'as a tester que la dernière.

cdt
Modifié par gcyrillus (24 Aug 2022 - 14:09)
Bonjour gcyrillus,
Non car les 'BaliseA' ou B ou C, se créée sous condition.
si la A est existante rentrer dans la functionA pour créer la B
si la B est existante rentrer dans la functionB pour créer la C
si la C est existante rentrer dans la functionC pour créer la D
et ainsi de suite.
avec ce code j'arrive bien que dans la FunctionB

 if(!empty($_SESSION['BaliseA'])&& !isset($_SESSION['BaliseB']))
        {  baliseAssetB();
 if(!empty($_SESSION['BaliseA'])&&!empty($_SESSION['BaliseB'])&& isset($_SESSION['BaliseC'])&& !isset($_SESSION['BaliseD']))
            {baliseAssetC();
                if(!empty($_SESSION['BaliseA'])&&!empty($_SESSION['BaliseB'])&& !empty($_SESSION['BaliseC'])&& isset($_SESSION['BaliseD']))
                {baliseAssetD();
                }
            }
        }//Fin If Principal.

Si je veux créer la C je ne rentre pas dans la functionC ni dans les autres. Pas d'affichage de résultat sur la page.
Bonjour,

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

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.

[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.