OVH Cloud OVH Cloud

probleme de transmission de variable

7 réponses
Avatar
Mobilator
bonjour à tous.

J'ai un gros probléme.

Voila ce que j'ai au debugger :

J'ai une variable $dob_year qui contient ttes les années de 1900 à 2000 et
qui est initialisée par :

$today = getdate();
$first_year = 1900;
$last_year = $today['year'] - 10;
for ($i=$last_year; $i >= $first_year; $i--) {
$dob_year[] = array('id' => sprintf('%02d', $i), 'text' => sprintf('%02d',
$i));
}

j'execute la commande :

toto('dob_year', $dob_year);

qui appelle la fonction :

toto($name, $values, $default = '', $parameters = '', $required = false) {


ensuite quand je passe dans if (empty($default) && isset($GLOBALS[$name]))
$default = stripslashes($GLOBALS[$name]); (juste aprés être rentré dans
la fonction)

j'ai l'erreur :
Notice: Array to string conversion in <chemin> on line 276

J'ai donc passé le debugger et je me rend compte qu'au moment de rentrer
dans la fonction, le programme met bien 'dob_year'dans $name de la fonction.

Mais que dans $GLOBALS[$name] il met le contenue de $dob_year


Quelqu'un peut me dire pourquoi ?

Ca fait 3h que je galere là dessus.

Merci à tous.

7 réponses

Avatar
Michel BONZI
bonjour à tous.

Bonjour,

J'ai un gros probléme.

Voila ce que j'ai au debugger :

J'ai une variable $dob_year qui contient ttes les années de 1900 à 2000 et
qui est initialisée par :

$today = getdate();
$first_year = 1900;
$last_year = $today['year'] - 10;
for ($i=$last_year; $i >= $first_year; $i--) {
$dob_year[] = array('id' => sprintf('%02d', $i), 'text' => sprintf('%02d',
$i));
}

j'execute la commande :

toto('dob_year', $dob_year);

qui appelle la fonction :

toto($name, $values, $default = '', $parameters = '', $required = false) {
Après être entré dans la fonction on peut considérer que :

$name='dod_year';
$values=$dod_year;
Tu pourrait mettre :
function($name,&$values...
et récupéré directement le tableau $dod_year sans utiliser $GLOBALS


ensuite quand je passe dans if (empty($default) && isset($GLOBALS[$name]))
$default = stripslashes($GLOBALS[$name]); (juste aprés être rentré dans
Tu fait un stripslashes sur un tableau.

$GLOBALS[$name]=>$GLOBAL['dod_year']=>$dod_year qui est un tableau.
la fonction)

j'ai l'erreur :
Notice: Array to string conversion in <chemin> on line 276

J'ai donc passé le debugger et je me rend compte qu'au moment de rentrer
dans la fonction, le programme met bien 'dob_year'dans $name de la fonction.

Mais que dans $GLOBALS[$name] il met le contenue de $dob_year
Effectivement, c'est normal!



Quelqu'un peut me dire pourquoi ?
Parceque $GLOBALS[$name] correspond au tableau $dod_year, utilise la

notation &$values pour traiter le tableau $dod_year directement !

Ca fait 3h que je galere là dessus.

Merci à tous.
De rien.


--
Michel BONZI

Avatar
CrazyCat
Mobilator wrote:
J'ai donc passé le debugger et je me rend compte qu'au moment de rentrer
dans la fonction, le programme met bien 'dob_year'dans $name de la fonction.
Mais que dans $GLOBALS[$name] il met le contenue de $dob_year


Logique:
tu lui dis de traiter $GLOBALS[dob_year]...
c'est un peu comme si tu disais à ta fonction:
global $dob_years;

pardon, c'est exactement pareil.

Alors, faire un stripslashes sur un tableau (vu que $dob_years est un
tableau), ça me semble illusoire... du genre a te provoquer une erreur :)


--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net

Avatar
Olivier Miakinen

bonjour à tous.

J'ai un gros probléme.

Voila ce que j'ai au debugger :

J'ai une variable $dob_year qui contient ttes les années de 1900 à 2000 et
qui est initialisée par :

$today = getdate();
$first_year = 1900;
$last_year = $today['year'] - 10;


Si on est bien en 2005, tu traites uniquement les années de 1900 à 1995,
non ?

for ($i=$last_year; $i >= $first_year; $i--) {
$dob_year[] = array('id' => sprintf('%02d', $i), 'text' => sprintf('%02d',
$i));
}


Bon, je ne comprends pas à quoi ça sert, mais $dob_year est un tableau
(simple) de tableaux (associatifs).

j'execute la commande :

toto('dob_year', $dob_year);

qui appelle la fonction :

toto($name, $values, $default = '', $parameters = '', $required = false) {


ensuite quand je passe dans if (empty($default) && isset($GLOBALS[$name]))
$default = stripslashes($GLOBALS[$name]); (juste aprés être rentré dans
la fonction)


Décortiquons.

$name vaut 'dob_year'
$GLOBALS[$name] vaut donc la variable globale $dob_year, qui est un
tableau de tableaux. Or la fonction stripslashes agit sur des chaînes de
caractères, pas sur des tableaux. Tu voulais faire quoi exactement ?

j'ai l'erreur :
Notice: Array to string conversion in <chemin> on line 276


Normal.

J'ai donc passé le debugger et je me rend compte qu'au moment de rentrer
dans la fonction, le programme met bien 'dob_year'dans $name de la fonction.

Mais que dans $GLOBALS[$name] il met le contenue de $dob_year

Quelqu'un peut me dire pourquoi ?


Ben oui. Vois mon autre réponse, et lis la doc.


--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
Mobilator
"Olivier Miakinen" <om+ a écrit dans le message de news:
d0kpfb$24pg$

bonjour à tous.

J'ai un gros probléme.

Voila ce que j'ai au debugger :

J'ai une variable $dob_year qui contient ttes les années de 1900 à 2000
et
qui est initialisée par :

$today = getdate();
$first_year = 1900;
$last_year = $today['year'] - 10;


Si on est bien en 2005, tu traites uniquement les années de 1900 à 1995,
non ?


Oui. je pars du principe que les enfants de moins de 10 ans qui font des
achats sur internet est assez rare :)


Avatar
Mobilator
J'ai essaye 4 fois de poster ce message, il est censuré à chaque fois par le
modérateur.
Je ne comprend vraiment pas ce qu'il y a de contraire à la charte dans ce
message et ce probleme me tracasse vraiment.

STP M. le modérateur. Laisse passer ce post.

Merci.

"Michel BONZI" a écrit dans le message de
news: 422de0c4$0$25586$
bonjour à tous.

Bonjour,

J'ai un gros probléme.

Voila ce que j'ai au debugger :

J'ai une variable $dob_year qui contient ttes les années de 1900 à 2000
et qui est initialisée par :

$today = getdate();
$first_year = 1900;
$last_year = $today['year'] - 10;
for ($i=$last_year; $i >= $first_year; $i--) {
$dob_year[] = array('id' => sprintf('%02d', $i), 'text' =>
sprintf('%02d', $i));
}

j'execute la commande :

toto('dob_year', $dob_year);

qui appelle la fonction :

toto($name, $values, $default = '', $parameters = '', $required = false)
{
Après être entré dans la fonction on peut considérer que :

$name='dod_year';
$values=$dod_year;
Tu pourrait mettre :
function($name,&$values...
et récupéré directement le tableau $dod_year sans utiliser $GLOBALS


Merci de votre réponse. Mais j'ai l'impression que vous vous êtes mélangé
entre la variable $name et $value pour vos explications.

D'aprés ma logique, $name reçoit la chaine de caractére 'dob_year'
Et $value reçoit le contenu du tableau $dob_year.

Alors pourquoi trouve t on dans $GLOBALS[$name] le contenu du tableau
$dob_year qui devrait normalement être dans $value et n'a rien à voir avec
$name qui contient la chaine de caractere 'dob_year' ?

C'est ca que je comprend pas.


Avatar
CrazyCat
Mobilator wrote:
Je ne comprend vraiment pas ce qu'il y a de contraire à la charte dans ce
message et ce probleme me tracasse vraiment.


Le problème est que l'on demande de ne citer que le minimum nécessaire.
Lorsqu'on répond à un message, on enlève le superflu.

D'aprés ma logique, $name reçoit la chaine de caractére 'dob_year'
Et $value reçoit le contenu du tableau $dob_year.
Alors pourquoi trouve t on dans $GLOBALS[$name] le contenu du tableau
$dob_year qui devrait normalement être dans $value et n'a rien à voir avec
$name qui contient la chaine de caractere 'dob_year' ?


$GLOBALS[$name] est équivalent à $dob_year si $name contient dob_year.

$GLOBALS est le tableau des variables, qui permet de les appeler par
leur nom. Dans ton script, que fais-tu? tu appelles littéralement
$GLOBALS["dob_year"], qui n'est autre que $dob_year.

--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net

Avatar
Sebastian 'CrashandDie' Lauwers
Mobilator wrote:

J'ai essaye 4 fois de poster ce message, il est censuré à chaque fois par le
modérateur.


Aïe aïe aïe, quelle mot dérangeant... Les modérateurs ne censurent pas,
ils modèrent.

Je ne comprend vraiment pas ce qu'il y a de contraire à la charte dans ce
message et ce probleme me tracasse vraiment.


Vous citez près de 35 lignes (33 pour être précis). Seuls les citations
de moins de 20 lignes (continue), sont acceptées sans problème, entre 20
et 30 lignes de citation (continue), c'est laissé à l'appréciation du
modérateur, si le message est vraiment bénéfique ou autre, enfin, si la
citation dépasse 30 lignes, ils refusent systématiquement.

Vous comprenez où je veux en venir. Votre message n'avait nul droit de
cité sur ce newsgroup. Enfin, CC l'a laissé passer, l'histoire est terminée.

STP M. le modérateur. Laisse passer ce post.


Quand on est vraiment respectueux d'une personne qu'on ne connait pas,
on le vouvoie.

Merci.


Amicalement,
S.