[RESOLU] variable dynamique et session

Petit nouveau ! | 6 Messages

22 sept. 2019, 09:11

bonjour,

Pour mon projet de site web ayant pour objectif de simuler les mécaniques d'équipement d'un jeu vidéo (théorycrafting sur swtor) j'ai besoin de générer de nombreuses variables. Pour cela j'ai mis en place le code suivant.

J'arrive ainsi à générer la liste des noms de variables correspondants mais pas à faire en sorte que ces noms génèrent des variables de session. Je galère et je n'arrive pas à comprendre ce qui ne va pas... Si quelqu'un a une idée de ce qui ne pas je suis preneur, ou s'il y a une autre manière de gérer ces variables, qui doivent stocker des nombres sur lesquels nous allons calculer ensuite. Une telle génération prenant beaucoup de temps de chargement.
for($i=0;$i<5;$i++)
              {
                for($j=0;$j<10;$j++)
                {
                  for ($k=0;$k<14;$k++)
                  {
                    $var1="'".$liste[$i]['modification'].$liste[$j]['statistique'].$liste[$k]['piece']."'"; //génère la liste des noms de variables à partir des mots contenus dans la base de donnée dans diverses colonnes. 
                    if(isset($_SESSION[$var1])){}else{$_SESSION[$var1]=0;}
                  //echo " ";  //vérification manuelle des valeurs en chargeant la page initialisation.
                  //echo $_SESSION[$var1];
                  //echo "<br/>";
                  }
                }
              }

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8503 Messages

22 sept. 2019, 23:15

Bonjour,

3 petits commentaires/suggestions :
$var1="'".$liste[$i]['modification'].$liste[$j]['statistique'].$liste[$k]['piece']."'";
Les guillemets simples ne font pas partie de ton nom de variable donc tu n'as pas besoin de les ajouter.

if(isset($_SESSION[$var1])){}else{$_SESSION[$var1]=0;}
Ça c'est très "laid" comme code.
Si tu veux faire une action si la variable n'existe pas alors autant le mettre directement en condition if (isset($var)===false)
ou en version courte if (!isset($var))


Je te recommande d'utiliser var_dump() pour voir le contenu de tes variables et faire ton debug, c'est + fiable et + complet que de faire des echo.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 6 Messages

23 sept. 2019, 17:49

J'ai retiré les guillemets dans le nom mais ca ne change pas mon problème. Les variables ne se génèrent pas comme je le voudrais, à chaque itération le code crée la même variable session[$var1] au lieu d'utiliser le contenu de la variable pour donner le nom.

Pour le code très "laid" j'ai juste épuré la partie calculatoire incluse dans la condition si la variable existe déjà.

Petit nouveau ! | 6 Messages

30 sept. 2019, 12:17

Est-ce tout simplement impossible de générer automatiquement plusieurs variables de session ? Dois-je alors passer par des variables normales ? Sont-elles alors transmises d'une page à l'autre avec un include ?
exemple :

page 1 variable var1 déclarée
page 2 appelle la page 1, peut-on utiliser la var1 pour un calcul dans la page 2 ?

Avatar du membre
Mammouth du PHP | 1225 Messages

30 sept. 2019, 12:34

Salut, je dirai que si tu n'as qu'une variable dans la session c'est soit que php ne passe qu'une fois dans ta triple boucle (à priori pas possible), soit que le nom de variable construit à partir du tableau liste est toujours le même quelques soient les index lus (plus probable).
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8503 Messages

30 sept. 2019, 12:40

J'avoue que je ne comprends pas grand chose à tes explications.
Donc il faut que tu avances dans ton debugage, que tu fasses une version ultra simple de ton code pour vérifier ce que tu dis ne pas fonctionner, car il est certain que les noms de variables de sessions peuvent être dynamiques.
Exemple :
<?php
for($i=0;$i<5;$i++) {
	$_SESSION[$i]='abc'.$i;
}
var_dump($_SESSION);
/* renvoie un array (size=5)
  0 => string 'abc0' (length=4)
  1 => string 'abc1' (length=4)
  2 => string 'abc2' (length=4)
  3 => string 'abc3' (length=4)
  4 => string 'abc4' (length=4)
*/
page 1 variable var1 déclarée
page 2 appelle la page 1, peut-on utiliser la var1 pour un calcul dans la page 2 ?
Oui, c'est le principe d'un include(), mais honnêtement, ça te prendrai 1 minutes à tester, donc plutôt que de poser la question, crée 2 pages, définie une variable et fais un test.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 6 Messages

30 sept. 2019, 17:03

Je n'avais pas compris le var_dump.... en fait le code fonctionne bien mais les variables ne sont pas utilisées par mes autres pages.... alors que les noms semblaient correspondre entre eux. Ce n'était visiblement pas le cas. J'ai donc trouvé de quoi corriger le problème. En tout cas, merci pour l'aide.