cs_chamallow
Messages postés363Date d'inscriptionmercredi 18 mai 2005StatutMembreDernière intervention29 janvier 2007
-
9 juin 2006 à 10:59
cs_chamallow
Messages postés363Date d'inscriptionmercredi 18 mai 2005StatutMembreDernière intervention29 janvier 2007
-
15 juin 2006 à 13:45
Bonjour,
Ca fait plusieurs jours que je suis sur un problème et je n'arrive pas à le résoudre.
En fait, il s'agit d'une fenêtre popup, où on retrouve un champ de saisie texte pour une recherche. Quand l'utilisateur valide sa recherche, je fais une requête me récupérant le nom de toutes les entreprises correspondantes, et je les mets dans une combobox.
Pour chaque entreprise trouvée, je fais une autre requête afin de récupérer tous les contacts de l'entreprise et leurs informations pour les mettre dans une deuxième combobox (juste pour leur nom).
Je stocke les informations de chaque contact dans un tableau pour l'indice entreprise auquel il correspond.Et les infromations de chaque contact sont stockées sous forme de tableau associatif. J'ai donc un tableau à 3 dimensions.
Donc au final je me retrouve avec un tableau de données comme le suivant (pour l'entreprise idEntreprise, pour son premier contact trouvé, et la première information souhaitée :
$tab [idEntreprise][1][1] = info1;
Quand je change le choix de la première combobox (entreprise), je voudrais afficher dans la deuxième combobox le nom des contacts liés.
Pour éviter de recharger la page, je voulais passer par du javascript. Mais j'arrivais pas à envoyer mon tableau PHP au javascript. Pendant mes recherches, j'ai vu qu'en fait il faut convertir le tableau PHP en tableau Javascript. J'ai essayé mais je n'y arrive pas !!
Alors voilà, j'aimerais un petit peu d'aide pour créer mon tableau 3 dimensions en javascript si possible :p
J_G
Messages postés1406Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention28 août 200710 13 juin 2006 à 10:01
Salut,
effectivement... Je viens de faire un petit essai ! Et l'associativité est possible (un monde qui s'écroule) Milles excuses pour cette fausse route.
Donc, en espérant que cela pourra t'aider à mieux comprendre la tecnique à employé :
<html>
<head>
<script type= "text/javascript">
<!--
// donc un tableau
var tab = new Array();
// qui sera associatif
tab['hop'] = 'truc';
tab['pouet'] = 'machin';
// mutlidimension.... première étape
tab['chose'] = ['prospere','et','youpla','boum'];
// mutlidimensionnel et associatif
var t = new Array(); // il faut construire les dimensions les unes après les autres
t['salut'] = 'temporaire';
t['bonjour'] = 'bonsoir';
tab['multi'] = t; // Puis hop dans le tableau tab
// ce qu'il ne faut pas faire !!!
tab['ouf']['tralala'] = 'enfin fini';
-->
</script>
</head>
<script type="text/javascript">
<!--
// OK OK OK
document.write(tab['hop']+'
');
document.write(tab['pouet']+'
');
document.write(tab['chose'][2]+'
');
// OK
document.write(tab['multi']['bonjour']+'
');
// Erreur : tab.ouf has no properties
// Fichier source : file:///C:/Documents%20and%20Settings/Jg/Bureau/test.html
// Ligne : 18
document.write(tab['ouf']['tralala']+'
');
-->
</script>
</html>
Voila, voila.
Passe une bonne journée, et encore désolé de t'avoir enduit d'erreur...
cs_chamallow
Messages postés363Date d'inscriptionmercredi 18 mai 2005StatutMembreDernière intervention29 janvier 20071 12 juin 2006 à 09:06
Ok merci :) Ben alors j'ai quelques petites questions ...
Une fois que j'ai créé un tableau comme ça, je le passe comment à ma fonction javascript ??
Et puis là ça crée le tableau, mais ça affiche aussi ce que fais les echo, c'est obligatoire ??
cs_chamallow
Messages postés363Date d'inscriptionmercredi 18 mai 2005StatutMembreDernière intervention29 janvier 20071 12 juin 2006 à 14:14
Bon j'ai essayé faire refaire le tableau en JS, sauf que j'ai voulu que ce soit avec des indices associatifs, alors j'ai pas fait de push, mais ça donne ça en gros :
($contact, c'est le tableau qui contient les contacts liés aux entreprise, et ils sont mis sous forme de tableau pour l'indice entreprise en question => $contact[idEntreprise] = SQL_SELECT_ROWS($reqContact); )
J_G
Messages postés1406Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention28 août 200710 12 juin 2006 à 19:57
Salut,
En fait, le gros problème est que les tableaux JavaScript ne savent pas être associatif.
Le objet qui gère les association clef-valeur s'appelle un dictionnaire
dico = new ActiveXObject("Scripting.Dictionary");
new AciveXObject... donc c'est réservé à IE.
Il faut que tu trouve un moyen de te passer de l'associativité. Si vraiment tu en as besoin, peut-être peux-tu créer un tableau 'clef' et un autre 'valeur'. Puis tu fabrique une API (interface de programmation) qui permette de manipuler ce "type de donnée".
Sinon, évite de réouvrir une balise <script> pour chaque ligne de ton script... C'est inutile ! Regarde mon exemple pour voir comment insérer du javascript dans du HTML.
cs_chamallow
Messages postés363Date d'inscriptionmercredi 18 mai 2005StatutMembreDernière intervention29 janvier 20071 13 juin 2006 à 07:06
Bizarre,partout où j'ai cherché, on dit que le tableaux associatifs existent en javascript!
Et les balises script c'était pour voir si ça allait mieux!
cs_chamallow
Messages postés363Date d'inscriptionmercredi 18 mai 2005StatutMembreDernière intervention29 janvier 20071 13 juin 2006 à 10:54
Bon et bien on y est presque :p
Merci de m'aider !!!
Alors ben maintenant j'arrive bien à récupérer le tableau en javascript, par contre y'a deux ptits problèmes, le problème je sais d'où ça vient, et le deixème jsuis pas sûre que ça en soit un !
Alors on commence par le deuxième c'est plus facile :
Et qu'ensuite je demande de l'afficher pour l'indice x, c'est normal que ça affiche un truc dans le genre : id,nomContact ???
Et deuxième problème, c'est que mon tableau associatif, les indices sont en fait des id d'une table, donc il sont entiers. Sauf que, ben quand on veux un tableau avec 3 cases dont l'indice est 5,6,7, ben on se retrouve avec un tableau avec des indices allant de 0 à 7 (logique puisque c'est des entiers!). Bon en php j'ai triché, et je les ai mis en chaines en fait, et ça marche, mais en javascript non, et là ça me pose problème. Alors on peut faire en sorte que mon indice entier, devienne un indice chaine ?? (parce que je crois que y'a pas de conversion d'entier à chaine)
cs_chamallow
Messages postés363Date d'inscriptionmercredi 18 mai 2005StatutMembreDernière intervention29 janvier 20071 13 juin 2006 à 14:43
C'est ce que je me suis dis, mais quand je fais ça, c'est bizarre, il me dis qu'il y a plus rien dans mon tableau :'(
Ca va me rendre folle ce truc lol
En plus j'avais dis une connerie, y'a bien une méthode pour convertir un entier en chaîne, mais ça me fait la même chose que la méthode que tu me proposes ...
cs_chamallow
Messages postés363Date d'inscriptionmercredi 18 mai 2005StatutMembreDernière intervention29 janvier 20071 13 juin 2006 à 14:54
Lol merci
Le ['.$k.'-1] en fait je l'ai viré lol :) Mais c'était parce qu'en fait quand je parcours un résultat d'une requête ça part toujours de 1 (parce que j'utilise une fonction pour traiter tout le tralalal d'une requête, et elle a été faite comme ça lol)
J_G
Messages postés1406Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention28 août 200710 13 juin 2006 à 15:52
Ok ok ok ok ok...
Alors, accroche toi au pinceau, j'enlève l'échelle !
<meta http-equiv= "Content-Type" content="text/html; charset=UTF-8" /><meta name="Generator" content="Kate, the KDE Advanced Text Editor" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="Generator" content="Kate, the KDE Advanced Text Editor" />
(Bon, je suis désolé car je sens que l'affichage sera très laid dans le post... Par ailleur, les accents ne sont pas passés au copier/collé.)
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="Generator" content="Kate, the KDE Advanced Text Editor" /> <?php /* Ok, je te fais une petite explication rapide... C'est ce qu'on appelle de "L'extrem programming" ;)...Le but :transformer un tableau PHP, meme mutli-dimensionnel, en un tableau JS!!! Ce tableau ne doit pas contenir d'objet ou ressource PHP !!! (pas de controle, mais le script JS plantera)Comment :L'appel de le fonction envoi a la sortie standard (echo) le script JS permettant de creer le tableauPour la construction des tableaux mutli-dimensionel, elle passe par des tableaux JS temporaires nommes temp_{uniqid}En entree :(array) $php_array => le tableau PHP a traduire en JS(STRING) $js_array_name = > le nom du tableau JS qui sera construit En sortie : (string) => le script JS permettant la construction du tableauEn cas d'errur :FALSE est retourne par la fonction, une erreur de type E_USER_NOTICE est generee*/ function php2js($php_array,$js_array_name){// controle des parametre d'entreeif( !is_array($php_array)){trigger_error("php2js() = > 'array' attendu en parametre 1, '".gettype($array)."' fourni !?!");returnfalse;}if( !is_string($js_array_name)){trigger_error("php2js() = > 'string' attendu en parametre 2, '".gettype ( $array)."' fourni !?!");returnfalse;} // Creation du tableau en JS $script_js = "var $js_array_name = new Array();\n" ; // on rempli le tableau JS a partir des valeurs de son homologue PHP foreach($php_arrayas$key => $value){// pouf, on tombe sur une dimension supplementaireif(is_array($value)){// On demande la creation d'un tableau JS temporaire$temp = uniqid ( 'temp_'); // on lui choisi un nom bien barbare $t = php2js($value,$temp);// est on creer le script// En cas d'erreur, on remonte l'info aux recursions superieuresif($t= == false )returnfalse; // Ajout du script de creation du tableau JS temporaire $script_js. = $t;// puis on applique ce tableau temporaire a celui en cours de construction$script_js.= "{$js_array_name}['{$key}'] = {$temp};\n" ; } // Si la clef est un entier, pas de guillemets elseif(is_int($key))$script_js. = "{$js_array_name}[{$key}] = '{$value}';\n" ; // sinon avec les guillemets else$script_js. = "{$js_array_name}['{$key}'] = '{$value}';\n" ; }return$script_js;} // fin de la fonction php2js // on defini un tableau bien galere...$arr = array('salut'= >'bonjour' , 'pouet' =>'truc','mutli'= >array ( 'truc' =>'chose','bidule'= >'chouette' , 'triple' =>array('hop'= >'la' , 'you' =>'pi')),'piege'= >array ( 5 =>'cinq',6= >'six' , 7 =>'sept'));?><html><head><script type= "text/javascript" >
<!--
// creation du tableau JS ici <?phpecho php2js($arr,'arr');?> -->
</script></head> ### Le tableau PHP devant etre copie en JS ###
<?phpprint_r($arr);?>
### Le script construisant l'homologue JS ###
<?phpecho php2js($arr,'arr');?>
<script type ="text/javascript"> <!--
// Verification de la bonne creation du tableau...document.write("arr['mutli']['triple']['hop'] = "+arr['mutli']['triple']['hop'] + '
');
document.write("arr['piege'][5] = "+arr['piege'][5] + '
');
document.write("arr['piege'][7] = "+arr['piege'][7] + '
');
document.write("arr['piege'][0] = "+arr['piege'][0] + '
');
-->
</script></html>
J_G
Messages postés1406Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention28 août 200710 13 juin 2006 à 15:53
Essai 2 :
<meta http-equiv= "Content-Type" content="text/html; charset=UTF-8" /><meta name="Generator" content="Kate, the KDE Advanced Text Editor" /> <?php /* Ok, je te fais une petite explication rapide... C'est ce qu'on appelle de "L'extrem programming" ;)...Le but :transformer un tableau PHP, meme mutli-dimensionnel, en un tableau JS!!! Ce tableau ne doit pas contenir d'objet ou ressource PHP !!! (pas de controle, mais le script JS plantera)Comment :L'appel de le fonction envoi a la sortie standard (echo) le script JS permettant de creer le tableauPour la construction des tableaux mutli-dimensionel, elle passe par des tableaux JS temporaires nommes temp_{uniqid}En entree :(array) $php_array => le tableau PHP a traduire en JS(STRING) $js_array_name = > le nom du tableau JS qui sera construit En sortie : (string) => le script JS permettant la construction du tableauEn cas d'errur :FALSE est retourne par la fonction, une erreur de type E_USER_NOTICE est generee*/ function php2js($php_array,$js_array_name){// controle des parametre d'entreeif( !is_array($php_array)){trigger_error("php2js() = > 'array' attendu en parametre 1, '".gettype($array)."' fourni !?!");returnfalse;}if( !is_string($js_array_name)){trigger_error("php2js() = > 'string' attendu en parametre 2, '".gettype ( $array)."' fourni !?!");returnfalse;} // Creation du tableau en JS $script_js = "var $js_array_name = new Array();\n" ; // on rempli le tableau JS a partir des valeurs de son homologue PHP foreach($php_arrayas$key => $value){// pouf, on tombe sur une dimension supplementaireif(is_array($value)){// On demande la creation d'un tableau JS temporaire$temp = uniqid ( 'temp_'); // on lui choisi un nom bien barbare $t = php2js($value,$temp);// est on creer le script// En cas d'erreur, on remonte l'info aux recursions superieuresif($t= == false )returnfalse; // Ajout du script de creation du tableau JS temporaire $script_js. = $t;// puis on applique ce tableau temporaire a celui en cours de construction$script_js.= "{$js_array_name}['{$key}'] = {$temp};\n" ; } // Si la clef est un entier, pas de guillemets elseif(is_int($key))$script_js. = "{$js_array_name}[{$key}] = '{$value}';\n" ; // sinon avec les guillemets else$script_js. = "{$js_array_name}['{$key}'] = '{$value}';\n" ; }return$script_js;} // fin de la fonction php2js // on defini un tableau bien galere...$arr = array('salut'= >'bonjour' , 'pouet' =>'truc','mutli'= >array ( 'truc' =>'chose','bidule'= >'chouette' , 'triple' =>array('hop'= >'la' , 'you' =>'pi')),'piege'= >array ( 5 =>'cinq',6= >'six' , 7 =>'sept'));?><html><head><script type= "text/javascript" >
<!--
// creation du tableau JS ici <?phpecho php2js($arr,'arr');?> -->
</script></head> ### Le tableau PHP devant etre copie en JS ###
<?phpprint_r($arr);?>
### Le script construisant l'homologue JS ###
<?phpecho php2js($arr,'arr');?>
<script type ="text/javascript"> <!--
// Verification de la bonne creation du tableau...document.write("arr['mutli']['triple']['hop'] = "+arr['mutli']['triple']['hop'] + '
');
document.write("arr['piege'][5] = "+arr['piege'][5] + '
');
document.write("arr['piege'][7] = "+arr['piege'][7] + '
');
document.write("arr['piege'][0] = "+arr['piege'][0] + '
');
-->
</script></html>
J_G
Messages postés1406Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention28 août 200710 13 juin 2006 à 15:54
Essai 3 :
<meta http-equiv= "Content-Type" content="text/html; charset=UTF-8" /><meta name="Generator" content="Kate, the KDE Advanced Text Editor" /> <?php /* Ok, je te fais une petite explication rapide... C'est ce qu'on appelle de "L'extrem programming" ;)...Le but :transformer un tableau PHP, meme mutli-dimensionnel, en un tableau JS!!! Ce tableau ne doit pas contenir d'objet ou ressource PHP !!! (pas de controle, mais le script JS plantera)Comment :L'appel de le fonction envoi a la sortie standard (echo) le script JS permettant de creer le tableauPour la construction des tableaux mutli-dimensionel, elle passe par des tableaux JS temporaires nommes temp_{uniqid}En entree :(array) $php_array => le tableau PHP a traduire en JS(STRING) $js_array_name = > le nom du tableau JS qui sera construit En sortie : (string) => le script JS permettant la construction du tableauEn cas d'errur :FALSE est retourne par la fonction, une erreur de type E_USER_NOTICE est generee*/ function php2js($php_array,$js_array_name){// controle des parametre d'entreeif( !is_array($php_array)){trigger_error("php2js() = > 'array' attendu en parametre 1, '".gettype($array)."' fourni !?!");returnfalse;}if( !is_string($js_array_name)){trigger_error("php2js() = > 'string' attendu en parametre 2, '".gettype ( $array)."' fourni !?!");returnfalse;} // Creation du tableau en JS $script_js = "var $js_array_name = new Array();\n" ; // on rempli le tableau JS a partir des valeurs de son homologue PHP foreach($php_arrayas$key => $value){// pouf, on tombe sur une dimension supplementaireif(is_array($value)){// On demande la creation d'un tableau JS temporaire$temp = uniqid ( 'temp_'); // on lui choisi un nom bien barbare $t = php2js($value,$temp);// est on creer le script// En cas d'erreur, on remonte l'info aux recursions superieuresif($t= == false )returnfalse; // Ajout du script de creation du tableau JS temporaire $script_js. = $t;// puis on applique ce tableau temporaire a celui en cours de construction$script_js.= "{$js_array_name}['{$key}'] = {$temp};\n" ; } // Si la clef est un entier, pas de guillemets elseif(is_int($key))$script_js. = "{$js_array_name}[{$key}] = '{$value}';\n" ; // sinon avec les guillemets else$script_js. = "{$js_array_name}['{$key}'] = '{$value}';\n" ; }return$script_js;} // fin de la fonction php2js // on defini un tableau bien galere...$arr = array('salut'= >'bonjour' , 'pouet' =>'truc','mutli'= >array ( 'truc' =>'chose','bidule'= >'chouette' , 'triple' =>array('hop'= >'la' , 'you' =>'pi')),'piege'= >array ( 5 =>'cinq',6= >'six' , 7 =>'sept'));?><html><head><script type= "text/javascript" >
<!--
// creation du tableau JS ici <?phpecho php2js($arr,'arr');?> -->
</script></head> ### Le tableau PHP devant etre copie en JS ###
<?phpprint_r($arr);?>
### Le script construisant l'homologue JS ###
<?phpecho php2js($arr,'arr');?>
<script type ="text/javascript"> <!--
// Verification de la bonne creation du tableau...document.write("arr['mutli']['triple']['hop'] = "+arr['mutli']['triple']['hop'] + '
');
document.write("arr['piege'][5] = "+arr['piege'][5] + '
');
document.write("arr['piege'][7] = "+arr['piege'][7] + '
');
document.write("arr['piege'][0] = "+arr['piege'][0] + '
');
-->
</script></html>
cs_chamallow
Messages postés363Date d'inscriptionmercredi 18 mai 2005StatutMembreDernière intervention29 janvier 20071 13 juin 2006 à 17:27
Ben s'il le compte comme entier ca va pas alors, ça veut dire que t'auras un tableau allant de 0 à 7 là, et moi je veux éviter ça justement !!
Parce que dans ce cas, ça marche aussi dans mon cas, sauf que je veux pas que ça fasse un aussi grand tableau pour 3 index !!
Sinonje voulais te demander, on est obliger de faire la création du tableau JS dans l'entête HTML ??