Mauvais nom de variable? [Résolu]

Signaler
Messages postés
46
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
12 décembre 2015
-
Messages postés
46
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
12 décembre 2015
-
Bonjour,
je ne comprend pas mon erreur, voici le code et l'explication du problème:
<?php
$PNJBDD=unserialize($donneesjoueurs['PNJ']);
$compte=count($PNJBDD);
if ($compte>=1)
{
$i=0;
while ($i<$compte)
{
$i++;
$variable='pnj'.$i;
${$variable}=$PNJBDD[$i];
$reponsePNJ = mysql_query("SELECT *FROM pnj WHERE id='${$variable}'") or die("erreurPNJ");
$donneesPNJ = mysql_fetch_array($reponsePNJ);
$variablex=${$variable}.'x';
$variabley=${$variable}.'y';
${$variablex}=$donneesPNJ['x'];
${$variabley}=$donneesPNJ['y'];
echo ${$variablex}; /// CECI AFFICHE LA BONNE VALEUR
echo $pnj1x; /// CECI N'AFFICHE RIEN
}///fin du WHILE
}
?>

NB:oui, je sais qu'un tableau commence à zéro mais la première valeur de celui-ci ne m'intéresse pas à ce moment.

10 réponses

Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
3
je pense que les lignes 14 et 15 devraient être
$variablex = $variable . 'x';
$variabley = $variable . 'y';

sinon, pour $i = 1, les variables $pnj1x et $pnj1y sont inconnues

--
Messages postés
14
Date d'inscription
lundi 30 septembre 2013
Statut
Membre
Dernière intervention
3 mai 2014

Bonsoir,

Si je comprends bien :
echo $pnj1x; /// CECI N'AFFICHE RIEN
$pnj1x devrais afficher quelque chose ?

Mais à aucun moment dans ton code tu affectes quelques choses à cette variable.

Je ne sais pas si cela auras de l'effet mais il manque un espace après * dans ta requête SQL.
Messages postés
46
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
12 décembre 2015
3
La requête est bonne vu que la bonne valeur est retournée ligne 19.
Comprends tu ce que fait ${$var} ?
edit:${$var}=valeur donne une valeur à la variable au nom contenu dans $var
Messages postés
14
Date d'inscription
lundi 30 septembre 2013
Statut
Membre
Dernière intervention
3 mai 2014

Au temps pour moi, je ne connaissais pas cette syntaxe.
Messages postés
6648
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
4
Bonjour,

$PNJBDD=unserialize($donneesjoueurs['PNJ']);
unset($PNJBDD[0]);


A+
Messages postés
46
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
12 décembre 2015
3
Ça ne change rien (et c'est normal vu que le traitement des données est bonne comme le prouve echo ${$variablex} ).

par contre j'aimerais bien comprendre ta logique qui dit que supprimer une valeur non utilisée (et que j'aurais pu vouloir utiliser plus tard) va régler mon problème...

Merci
Messages postés
46
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
12 décembre 2015
3
Up
Je vient de me remettre sur ce code, et je viens de trouver un plan B en rajoutant une étape:
${'pnj'.$i.'x'}=${$variablex};
${'pnj'.$i.'y'}=${$variabley};

Désormais, mon
echo $pnj1x;
fonctionne (si bien sûr j'ai deux PNJ minimum en BDD).
Si cela peut servir à quelqu'un...
Messages postés
46
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
12 décembre 2015
3
Merci tpoinsot,
$variablex = $variable . 'x';
fonctionne!

Par contre je n'ai pas compris ce que tu voulais dire au sujet de
$i
.

Nouveau problème de syntaxe du-coup, j'utilisais mon étape supplémentaire pour multiplier la valeur par 50 comme ceci:
${'pnj'.$i.'x'}=(${$variablex})*50;

Hors,
$variablex=($variable . 'x')*50;
ne fonctionne pas.
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
3
j'imagine que tu veux en fait
${$variablex} *= 50;

Lorsque tu fais
$variablex=($variable . 'x')*50;
tu multiplie le nom de la variable par 50 au lieu du contenu.
--
Messages postés
46
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
12 décembre 2015
3
Oui, ce qui m'oblige donc à ajouter une étape pour le calcul.
Ce qui n'est pas grave du tout et rend le code un peu plus lisible :)
(Pour info mon PNJ est en case 4, et les cases font 50*50 pixels).
http://vassili.org/terramortuis