Acceder à un tableau dans un onchange

Petit nouveau ! | 2 Messages

20 déc. 2007, 19:38

Bonjour. Je suis débutant de chez débutant, car je ne pratique que depuis 2 mois, et je n'ai jamais eu de formation HTML, javascript ou php, je me débrouille sur le tas avec une paire de bouquins, Google, et l'appli que je reprend...

Pour aller droit au but (je détaille pour faire le rapprochement avec le code qui suit) : j'ai une série de x catalogues externes (référencés avec un code CLITD et un libellé LIITD, ex : code = IC, libellé = chaine info client) enregistrés dans une table MySql (T2G72). Je dois les afficher dans une liste déroulante (type_catal_ext), avec le code dans le value du select ($id_72) et le libelle dans le texte ($nom_72).

Pour chaque catalogue, j'ai une et une seule référence. Dans l'appli que je reprend, j'ai un tableau typdoc_catext associé, sur 2 dimensions, qui contient le code du catalogue et sa référence, ex typdoc_catext [0] = code (soit IC), typdoc_catext[1] = Reference001.

Je voudrais qu'à coté de ma liste déroulante, il y ait une zone saisissable (ref_entree) qui affiche la référence du catalogue externe du libellé selectionné dans la liste, et surtout que toute modif soit prise en compte et répercutée dans la tableau...

j'ai donc chargé mon select comme suit :

Code : Tout sélectionner

echo "<td><select name=\"type_catal_ext\" onchange=\"javascript:afficheLib()\">"; $query = "select CLITD, LIITD from T2G72 order by LIITD asc"; $result = mysql_query($query); $i = 0; while($row = mysql_fetch_row($result)){ $id_72 = $row[0]; $nom_72 = $row[1]; echo "<option value=".$typdoc_catext[$i][1].">".$nom_72; $i = $i+1; } echo "</select>";
et le javascript comme suit :

Code : Tout sélectionner

function afficheLib(){ rang = document.forms[0].elements["type_catal_ext"].options[document.forms[0].elements["type_catal_ext"].selectedIndex].index; document.forms[0].ref_entree.value = document.forms[0].elements["type_catal_ext"].options[rang].value; }
N'ayant pas réussi à accéder au tableau typdoc_catext dans le javascript, j'ai donc chargé la référence typdoc_catext[$i][1] dans la value du select à la place du $id_72, ce qui me permet de la manipuler dans la fonction afficheLib et de la forcer dans le zone ref_entree.

Là où ça se corse, c'est que je voudrais répercuter chaque saisie dans le tableau typdoc_catext...
J'ai donc codé la zone de saisie comme suit :

Code : Tout sélectionner

echo "<td id=\"page_titre3\" colspan=\"2\">\t\tReference"."<input type=\"text\" name=\"ref_entree\" onchange=\"javascript:moveLib();\">";
et la fonction

Code : Tout sélectionner

function moveLib(){ document.forms[0].ref_rang.value = rang; alert("rang."+rang+"."); alert("libelle."+document.forms[0].ref_entree.value+"."); }
et dans mes fenetres d'alerte, je vois bien apparaître pour rang le rang de la ligne selectionné et pour libellé le libelle qui a été saisi.

Mais je n'arrive pas à coder proprement pour forcer le tableau typdoc_catext avec la valeur saise : si j'utilise
typdoc_catext[rang][1]=libelle

à la suite du moveLib dans le onchange de ref_entree, il me dit que ce tableau a la valeur null ou n'est pas un objet...

j'ai essayé avec des " ", des ' ', des {} et des [], avec des document.forms[0].elements[.... je l'ai déclaré en hidden .... impossible de manipuler ce tableau dans le onchange...

Comme j'ai le nez dedans et que je n'ai pas de recul à cause de mon inexpérience, je n'avance pas...

je fais appel à vos bonnes volontés, si qlq'un a une suggestion :) , voire une solution :D , ce serait super sympa....

d0m
Mammouth du PHP | 1141 Messages

21 déc. 2007, 09:55

Tu ne peux pas manipuler un tableau PHP en javascript.
Demande toi à quoi te sert ce tableau afin de trouver une autre méthode pour ce que tu veux faire.
Sinon tu peux tout simplement passer par un rechargement de la page. Le javascript est censé faire quelques changements d'ordre visuel, pas du traitement de données.

Petit nouveau ! | 2 Messages

21 déc. 2007, 10:11

bon ben comme ça c'est clair....merci pour l'info !!!

je n'ai plus qu'a :cry: dans mon coin.... je veux dire retrousser mes manches et trouver une autre solution...

merci de ta réponse !!

a+