Problème tableau

Signaler
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
-
Messages postés
1
Date d'inscription
lundi 12 juin 2006
Statut
Membre
Dernière intervention
12 juin 2006
-
Bonjour,

J'aimerais savoir comment on passe un tableau en javascript. En fait je sais faire, mais la variable (le tableau) est déclaré en php, et est passé en paramètre d'une fonction javascript, qui est appellée quand on change la sélection d'une combobox.
Et donc il faut que je passe le tableau mais à l'indice sélectionnée (enfin à l'identifiant choisie)!

echo ("<form><select name='selectResultat' onChange="javascript:afficheContacts(this.options[this.selectedIndex].value,'$contact[this.options[this.selectedIndex].value]')"><option value='#'>Entreprise : </option>");

'$contact[this.options[this.selectedIndex].value]' => ne marche pas

Est-ce que quelqu'un voit comment le faire svp?? Merci beaucoup d'avance!

10 réponses

Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
1
J'ai peut-être pas été très très claire ...
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
clair : ce n'est pas ça...
mais : qui n'y  a donc dans $contact ?
et : quoi que fait la function affichContacts ?
et : que si on gère le select pourquoi ne pas mettre this,
au ieu de ce $contact dont on ne connais pas le contenu ?

cordialement   Bul http://marcel-Bultez.chez-Alice.fr/B>
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
1
Ok.

Alors je vais essayer de tout bien réexpliquer lol

En fait, j'ai une table dans une base de données qui contient des  noms d'entreprises, et une autre qui contient les contacts liés à chacune des entreprises (et encore une pour faire le lien entre les deux mais bon).
Donc en fait, ce que je veux, c'est que l'utilisateur entre le nom (ou une partie du nom) d'une entreprise. Je recherche toutes les entreprises qui correspondent et je les affiche dans une combobox (ça c'est OK).
Maintenant on m'a demandé également d'afficher les contacts en même temps. Donc je me suis dis que j'allais remplir une seconde combobox pour mettre mes contacts.
Maintenant vu que le contenu de cette deuxième combobox change en fonction de lapremière, je me suis dis que j'allais passer par du javascript.

Alors au départ je fais ma requête PHP qui récupère mes entreprises. Pour chaque entreprise, je mets le nom dans la combobox et l'id en value de l'option. Et je fais également une requête pour récupérer les contacts que je met dans un tableau pour l'indice de l'entreprise, comme ça on s'y retrouve plus vite.
Ce qui donne : $contact[idEntreprise] = contacts récupérés dans la bd et liés à l'idEntreprise en cours

Ensuite, la fonction affichContacts devrait (c'est ce que je voudrais arriver à faire), récupérer l'identifiant de l'entreprise sélectionnée dans la combobox (donc this.options[this.selectedIndex].value) et également le tableau (enfin la case) qui est lié à l'entreprise (donc $contact[this.options[this.selectedIndex].value]).
Donc la fonction parcourait le tableau pour l'id que j'ai recu en paramètre afin d'afficher les contacts dans la deuxième combobox.

En fait au début je passais que $contact, mais j'ai pas réussi à le parcourir en javascript (j'ai pas compris pourquoi), donc jme suis dis que je donnerais directement la bonne case du tableau, mais je trouve pas la bonne syntaxe pour le passage de paramètres !!

Voilà j'espère que ça t'aidera à m'aider lol Merci en tout cas de t'être penché sur le problème!
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
à priori 2 questions.

1° afficher les lignes dont le début = caractères frappés.
     j'ai mis dans ce site, un "traitement sur les select"
     où un exemple existe.
2° 2 select liés.
    soit en javascript, ce qui suppose que toutes les
           données possibles du 2ème select soient
           déjà en javascript, dans un array par exemple
           ( ou en html )
    soit en php, et là, le 2ème select est généré par
           une requête dans la base de données à partir
           de ce qu'a sélectionné l'utilisateur dans le 1er.





pour utiliser une variable php, en javascript :
html ou javascript.....<?php echo $variable;?>....

cordialement   Bul.   Site/B>
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
1
Bon alors pour ton 1°, le traitement des select j'avais déjà vu lol, et bon c'est pas mon problème puisque ça ça marche.
Pour le 2°, jsuis obligé de faire la requête en php, d'ailleurs elle est faire d'avance, seulement après faut récup la bonne partie du tableau pour l'afficher.
Seulement le problème c'est que j'arrive pas à envoyer ma variable php au javascript ! Soit je me retrouve avec un truc undefined, soit il récupère un truc bizarre (par exemple, j'avais réussi à récupérer un tableau, quand j'ai demander de me l'afficher case par case en alert, il m'a afficher A puis R puis R puis A puis Y).
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
en fait, on n'envoie pas une variable php au javascript.
php, sur le serveur, crée/génère la page html/javascript,
puis l'envoie vers le client, où le javascript s'exécute.

http://marcel-bultez.chez-alice.fr/documents/PHP/PHP.php
le 1er chapitre parle des "relations" javascript/php
et il y a, "un peu plus bas", un exemple de 2 select liés.
des exemples/explications existent aussi ici même.

cordialement   Bul.Site

/B>
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
1
Je me suis mal exprimée, désolée. On va finir par y arriver lol

Je sais bien tout ce que tu as dis, et je voulais éviter de recharger la page en passant les paramètres de la première combobox en passant par du javascript.

Bon alors je pense que c'est un problème de syntaxe, parce que mon tableau remplit en PHP est bon (oui je l'affiche dans le code PHP et il est nickel), seulement j'arrive pas à l'utiliser en javascript (quand je change de choix dans la combobox).

On reprends

Je fais une requête SQL en PHP et je récupère toutes les entreprises correspondant à ma recherche. Pour chacune des entreprises, je cherche les contacts qui y sont liés. A chaque ligne résultat, je la met dans un tableau $contact à l'indice "identifiant de l'entreprise".
Ce qui fait que dans mon tableau $contact, j'ai une "case" par entreprise (qui est l'indice des entreprises retourné par la première requête),
puis pour chacune de ces cases entreprises, j'ai une "case" par contact liée trouvé, et enfin pour chacune de ses cases contact, j'ai un tableau qui contient les informations (les champs de la base) pour les contacts.

Maintenant, je veux que quand je change le choix de ma combobox entreprises, j'appelle une fonction javascript qui va me remplir la deuxième combobox avec les bons contacts (qui sont dans le tableau $contact hein).

Donc, ça donne en code allégé (lol) :

$requete = "SELECT idEntite,nomEntite FROM devis_entite WHERE nomEntite LIKE '%".$_POST["entreprise"]."%' AND categorie='".$_POST["cat"]."' ORDER BY nomEntite ASC;";
$resultat = SQL_SELECT_ROWS($requete);//On exécute la requête
$nbResultat = count($resultat); //On récupère le nombre de résultat
if($nbResultat==1)
{
           //Si aucun résultat n'a été trouvé, on prévient l'utilisateur :
           echo 'Aucun résultat n\'a été trouvé !';
}
else
{
           $contact = array();
          echo ("<form><select name='selectResultat' onChange="javascript:afficheContacts(this.options[this.selectedIndex].value,'$contact')"><option value='#'>Entreprise : </option>");
           for($i=1 ; $i<$nbResultat ; $i++)
           {
                     echo '<option value="'.$resultat[$i][0].'">'.$resultat[$i][1].'</option>';
                     $reqContact = "SELECT c.idContact,c.nomContact FROM devis_contact c inner join devis_entiteContact ec on c.idContact=ec.idContact WHERE ec.idEntite=".$resultat[$i][0]." ORDER BY nomContact ASC;";
                      }
                            $contact[$resultat[$i][0]] = SQL_SELECT_ROWS($reqContact); //On exécute la requête
               }
                echo "</select>";
}

Bon ben le problème c'est le paramètre rouge qui est donné à la fonction javascript (le premier marche bien c'est ok).
Si je passe $contact (le tableau entier donc) comme ci-dessus, et que je fais alert("Nombre d'élements : " + contactsLies.length); dans la fonction javascript(contactLies c'est $contact).Il me dis qu'il y a 5 élément, quand je les affiche ça met met A,R,R,A,Y.

Si je mets juste $contact (sans l'entourer de '), il me dis que y'a un élément, et quand j'essaye de l'afficher, il me met undefined.

Si je lui donne un bon indice directement ('$contact[27]'), il me dit qu'il y a 0 élément.

Enfin bref, je vois pas comment lui donner mon tableau là.

Merci pour votre aide !!
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
1
Est-ce qu'il ne faudrait pas convertir le tableau php en tableau javascript ?? parce que je suis tombée sur ce genre de sources sur le forum phpcs ...
Messages postés
363
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
29 janvier 2007
1
Bon ben j'essaye de le transformer en tableau javascript (j'ai essayé plusieurs façons trouvées), mais toujours rien !! je commence à me tirer les cheveux lol
Messages postés
1
Date d'inscription
lundi 12 juin 2006
Statut
Membre
Dernière intervention
12 juin 2006

Hello

Je viens d'avoir ce problème en voulant passé un tableau déclaré dans un fichier Asp et je voulais l'envoyer dans une fonction JavaScipt dans un fichier externe. Voilà comment j'ai fait (je te laisse traduire en PHP après):





<% For j = 0 To UBound(paramArry) - 1 %>



f1("<%=myArray(j)%>");



<% Next %>


Où les balises % sont la partie Asp et f1 la fonction JavaScript.

En espérant que ça t'aide!


@+

->  Never change a working system <-
CodingAl