Mauvais nom de variable?

Résolu
Rom1sab
Messages postés
46
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
12 décembre 2015
- Modifié par Rom1sab le 2/05/2014 à 20:28
Rom1sab
Messages postés
46
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
12 décembre 2015
- 14 oct. 2014 à 10:17
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

tpoinsot
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
4
14 oct. 2014 à 08:35
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

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

2 mai 2014 à 22:48
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.
0
Rom1sab
Messages postés
46
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
12 décembre 2015
3
Modifié par Rom1sab le 2/05/2014 à 23:04
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
0
Carouge10
Messages postés
14
Date d'inscription
lundi 30 septembre 2013
Statut
Membre
Dernière intervention
3 mai 2014

3 mai 2014 à 01:13
Au temps pour moi, je ne connaissais pas cette syntaxe.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mpmp93
Messages postés
6651
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
4
3 mai 2014 à 14:43
Bonjour,

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


A+
0
Rom1sab
Messages postés
46
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
12 décembre 2015
3
3 mai 2014 à 14:52
Ç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
0
Rom1sab
Messages postés
46
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
12 décembre 2015
3
10 oct. 2014 à 11:45
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...
0
Rom1sab
Messages postés
46
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
12 décembre 2015
3
14 oct. 2014 à 10:01
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.
0
tpoinsot
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
4
14 oct. 2014 à 10:10
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.
--
0
Rom1sab
Messages postés
46
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
12 décembre 2015
3
14 oct. 2014 à 10:17
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
0