Vous n'êtes pas identifié(e).
Pages :: 1
Saluton,
Ce matin j'ai remis les mains dans le cambouis du petit formulaire du livre d'or de mon site de chansons hébergé chez Manicow (WDMédia en PHP 5, j'imagine)
Et là j'ai eu une surprise avec ce code :
*****
<p>Piège à robots, merci de répondre en chiffres. Combien font <b><?php echo $premier. '</b> et <b>'.$second.'</b>';?></p>
<p>
<label for="captcha" title="Veuillez saisir le résultat en chiffres" class="oblig">* réponse :</label>
<input type="text" name="captcha" size="3" tabindex="3" >
</p>
En effet, alors qu'il s'agissait selon moi d'une étourderie de ma part, ce code affiche bien les littéraux correspondant aux chiffres tirés au hasard, alors que selon moi, il devrait afficher les chiffres.
J'ai donc modifié mon code comme ceci
****
<p>Piège à robots, merci de répondre en chiffres. Combien font <b><?php echo $chiffres[$un]. '</b> et <b>'.$chiffres[$deux].'</b>';?></p>
<p>
<label for="captcha" title="Veuillez saisir le résultat en chiffres" class="oblig">* réponse :</label>
<input type="text" name="captcha" size="3" tabindex="3" >
</p>
Ce qui fonctionne tout à fait normalement mais je m'interroge, par quelle magie, dans le premier code, les index se transformaient-ils en leurs littéraux ?
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Salut Mk,
Désolé mais tes deux codes sont strictement identiques.
Dans un tableau associatif il y a une clé et une valeur $array=array(key=>value) et lorsque tu écris $array[$a], $a corresponds à l'index de la clé (key) et la valeur est retournée (value).
Donc si tu souhaites connaître la valeur de la clé à la position $a, il te faut écrire
$key=array_keys($array,$array[$a]);
print $key[0];
en espérant avoir été utile
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Merci mon bon Jc, de porter assistance au troisième âge.
D'où mon incompréhension.
Comment se fait-il que, dans le premier code
affichait bel et bien les valeurs du tableau associatif sans même se référer à celui-ci ?
Je finissais par me demander si, dans la config PHP du serveur, il n'y avait pas une directive du genre de la vieille directive register_global sur ON et qui transformait tout index de $_SESSION en variable éponyme; $_SESSION['premier'] et $premier, $_SESSION['second'] et $second.
Car dès que j'utilisais $un et $deux, et non plus $premier et $second, le phénomène disparaissait.
Je réalise que cela peut provenir d'un temps de latence entre la mise à jour par FTP du code sur le serveur et sa prise en compte par le serveur. (Persistance de cache, probablement). Cette explication, moins ésotérique, me semble plus probable, même si je reste assez perplexe.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Salut Mk.
C'est normal :
Si tu fais $un=1; et que la clé du premier index de ton tableau associatif est 1, il va y avoir correspondance, mais ce n'est pas une obligation dans un cas général.
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Quand tu dis que c'est normal, es-tu en train de me dire que si j'ai $un = 1 et $chiffres[1]='un' alors echo $un; va afficher 'un' comme si je faisais echo $chiffres[$un]; ?
Si c'est ça, je sens que je vais avoir un gros mal de tête.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Non j'ai pas dit ça ^^
Voilà ce que j'ai dit, exprimé différemment:
1) Tu as choisi comme valeurs de clé dans ton tableau associatif les nombres 1,2,3,4,5,6,7,8,9
2) Si tu définis une variable $un=1, alors la valeur de ta variable est identique à la valeur de la première clé de ton tableau
3) c'est donc normal mais dans un cas général c'est rarement le cas. Disons que c'est ton choix qui a crée un contexte particulier ou cette "coïncidence".
Dernière modification par Jc (29-04-2014 11:41:29)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Mouais, je ne comprends rien du tout à ton propos.
Le symptôme auquel j'ai été confronté s'est manifesté de la sorte :
J'ai défini un tableau associatif $chiffres
Tout simplement pour éviter la position 0 ce qui est assez stupide puisque j'aurais aussi bien pu définir 0=>'zéro'.
J'ai ensuite tiré au sort deux nombres $premier et $second dans l'intervalle 1-9.
J'ai copié ces valeurs dans des items associatifs de $_SESSION
J'ai alors observé que $premier et $second ne contenaient pas des valeurs numériques comprises entre 1 et 9 mais leurs équivalents littéraux.
Et ce phénomène n'a disparu que lorsque j'ai cessé de donner comme noms à mes variables les index que je leur attribuais dans $_SESSION et je ne trouve pas cela normal du tout.
D'où ma version avec $un et $deux et $_SESSION['premier'] et $_SESSION['second'].
Et rien de ce que tu écris n'explique ce curieux phénomène à mes neurones séniles.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Il n'y a pas plus simple
1) $premier et $second n'ont rien à voir avec ton tableau associatif
2) ils ont tous les deux pour type int et pour valeur rand(1,9) soit un chiffre numérique compris entre un et 9 inclus.
3) A partir de là c'est normal que lorsque que tu fais print $premier tu obtiennes un chiffre compris entre un et 9 inclus.
Maintenant concernant ton tableau associatif,
1) tu as choisis - à juste titre - de nommer tes clés avec des chiffres de 1 à 9 inclus, de manière à les faire coïncider avec les valeurs que peuvent prendre tes variables $premier et $second. A partir de là, il est donc parfaitement normal qu'il y ait parfaitement correspondance entre leur valeur respectives
2) Il y a correspondance exacte entre la valeur d'index de la clé et la valeur de la clé elle-même (je ne parle que des valeurs numériques) ainsi pour obtenir la valeur de $premier en chiffres, tu te sers de $premier comme index dans ton tableau associatif pour en obtenir la valeur en chiffres :
$premier=3; print $chiffres[$premier]; // retourne 'trois';
as-tu compris maintenant?
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Saluton, mon Jc,
C'est vraiment un dialogue de sourds.
2) Il y a correspondance exacte entre la valeur d'index de la clé et la valeur de la clé elle-même (je ne parle que des valeurs numériques) ainsi pour obtenir la valeur de $premier en chiffres, tu te sers de $premier comme index dans ton tableau associatif pour en obtenir la valeur en chiffres :
Là je suppose qu'il faut remplacer tes "en chiffres" par "en lettres".
Que de confusion !
Tout cela j'en étais vraiment persuadé jusqu'à ce que je découvre que dans mon premier script
me retournait
un et trois
au lieu de
1 et 3
par exemple.
D'où mon étonnement et mon post.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
salut,
Là je suppose qu'il faut remplacer tes "en chiffres" par "en lettres".
Non car dans un tableau associatif, l'index du tableau et la clé sont confondus, ainsi quand tu dis qu'il n'y a pas d'index 0 dans un tableau associatif l'exemple suivant peut prêter à confusion:
$tableau=array(0=>'abc','B'=>'bcd');
print $tableau[0]; // retourne 'abc'
Dernière modification par Jc (30-04-2014 06:58:12)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
l'exemple suivant peut prêter à confusion
Pourquoi ?
Tout cela n'éclaircit rien du phénomène auquel j'ai été confronté hier.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Moi je ne vois rien d'anormal. Ton premier exemple (initial) affiche les nombres en chiffres et dans le second cela s'affiche en lettres car tu interroges le tableau contrairement à ce que tu fais dans ton premier exemple. Qu'est ce qui te choques la dedans?
Dernière modification par Jc (30-04-2014 07:52:51)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Ce qui me choque c'est que dans le premier exemple, inexplicablement pour moi, $premier et $second affichaient les littéraux et non les chiffres.
Décidément, on est dans l'impasse tous les deux.
Je ne sais pas lequel des deux s'explique mal, mais on ne s'en sort pas.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Voilà, c'est fait et
affiche les littéraux.
C'est un truc de dingue.
vérifie toi-même :http://www.avcxjo-moko-kantas.fr/oralibro.php
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Je viens de faire afficher phpinfo() à partir du serveur et, ô surprise, register_globals est sur 'on'.
Il n'est donc pas impossible que le serveur établisse des passerelles entre $_SESSION['premier'] ou $_SESSION['second'] et $premier et $second comme je le subodorais.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Pages :: 1