Tableau php vers tableau javascript [Résolu]

Signaler
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
-
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
-
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

Merci beaucoup !
A voir également:

25 réponses

Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
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...
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Salut,

c'est le PHP qui écrit le javacsript... Donc il faut que tu "écrives" ton tableau javascript à partir du tableau PHP :

Ca devrait donner qq chose comme ça :
(Je mets le js écrit en vert...)

<?php
$arr2D = // tableau deux dimensions

echo "var arr2D = new Array();\n";

foreach( $arr2D as $arra1D ) {

    echo "arr2D.push( new Array('".implode("','",$arr1D)."') );\n";

}
?>
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
1
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 ??
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
1
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);  )

$cleEntr = array_keys($contact);
                        foreach($cleEntr as $indice)
                        {
                            $contactLie = $contact[$indice];
                            $nbContact = count($contactLie);
                            echo '<script language="javascript">tabJS["'.$indice.'"].push(new Array());</script>';
                            for($k=1 ; $k<$nbContact ; $k++)
                            {
                                echo '<script language="javascript">tabJS["'.$indice.'"]['.$k.']= new Array("'.$contactLie[$k]['idContact'].'","'.$contactLie[$k]['nomContact'].'");</script>';
                            }
                        }

Mais il me dis que tabJS[mesIndices] n'a pas de propriété, quelque soit l'indice que j'utilise ...
Je deviens folle, je commence à tout mélanger lol

Qu'est-ce qui ne va pas svp?
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
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.

A+
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
1
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!
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
1
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 :

echo 'tabProvisoire['.$k.'-1] =["'.$contactLie[$k]['idContact'].'","'.$contactLie[$k]['nomContact'].'"];';

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)

Voilà voilà ! Merci
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Euh... Ben peut-être tu peux essayer de créer les indices suivants :

echo "tab['key$i'] = 'truc';"; // avec $i un entier

et en Js, tu récupère ainsi :

for( var i=5; i<8; i++ ) {
    tab[ 'key'+i ] ; // ainsi, tu as bien une chaîne de caractère...
}

C'est bon ?
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
1
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 ...

J'comprends pas tout là lol
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Moi c'est la ['.$k.'-1] que j'aime moyen dans ton exemple de ci dessus...

Etant dans un bon jour, je vais te pondre une fonction pour faire ce que tu veux, bouge pas !
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
1
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)
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
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>
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
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>
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
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>
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Essai 4 :
http://www.phpcs.com/code.aspx?ID=38096

Tant qu'a faire ;)

Bonne lecture !
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
1
Lol vi le 4° essai est un peu mieux que les autre :)

Merci :) jvé essayer de comprendre ce que tu as fais !!
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
1
Ben je comprens pas trop en fait lol
Comment ça se fait qu'il te compte pas ton entier en tant qu'entier ??
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Ben si, il prend bien en compte les index 5,6,7 comme des entier coté JS. La preuve est que je les appelle vai un entier

Sinon, ça correspond à tes besoins ?
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
1
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 ??
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Re-

regarde mieux mon exemple...
J'ai fait exprès de demander l'index 0 (et j'ai fait le test avec 2). il me répond 'undefined' (idem avec 2).

Donc ce que j'ai fait semble correspondre à ton cahier des charges.

Jusqu'à preuve du contraire bien sûr.
A+