IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Array PHP and Array javascript


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de Jacobian
    Inscrit en
    Février 2008
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 425
    Points : 245
    Points
    245
    Par défaut Array PHP and Array javascript
    Bonjour le forum,
    en fait mon truc il est banal dont voici la description:
    je construis mon view de la façon suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ..... debut boucle while
    <input name=\"sel_country[".$i."]\" id=\"sel_country[".$i."]\" value=\"".$country[$i]['name']."\" type=\"checkbox\">
    ........ fin boucle while
    dans ma page je veux lancer une requête ajax pour cela j'aurais besoin des éléments sélectionné voici ma méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function getSelectedCheckbox() {
    	   var retArr = new Array();
    	   for (var i = 1; i <= <?php echo count($this->country); ?>; i++) {
    			elts = document.adminForm.elements['sel_country['+ i +']'];
    			alert(elts.name+':::::'+elts.name+':::::'+elts.value);
    			if (typeof(elts) != 'undefined' && elts.checked){
    				//retArr[elts.value]=elts.id; //ici le code dont j'aurais //besoin
    				}
    	    }
    		return retArr;  
    	}
    ensuite dans ma requete ajax j'envoi l'array recupere par getSelectedCheckbox() et dans mon controller je le récupère comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...................
    $sel_country = $_GET["sel_country"];
    foreach ($sel_country as $id_country => $name_country){
    .......
    }
    .....
    ................
    mon scousi et que je veux pas changer ma méthode du controler, comment construire l'array par getSelectedCheckbox a envoyer a cette méthode ?
    c-a-d construire un array en java script de type

    Merci par avance

  2. #2
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Sans modifier ton actuel code dans le contrôleur ? Impossible car on ne peut pas passer un array dans une requête sans le sérialiser.
    Et donc il faudra le desérialiser dans ton contrôleur avant de l'exploiter.

    Sinon il y a une différence entre le "prototype" que tu veux pour ton tableau et le prototype exploité dans ta boucle foreach...
    Relis-toi et indiques nous ce que tu désires vraiment.

  3. #3
    Membre actif Avatar de Jacobian
    Inscrit en
    Février 2008
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 425
    Points : 245
    Points
    245
    Par défaut
    en fait j'ai fait la solution suivant mais je trouve ça pas propre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function getSelectedCheckbox() {
    	   var retArr = new Array();
    	   for (var i = 1; i <= <?php echo count($this->country); ?>; i++) {
    			elts = document.adminForm.elements['sel_country['+ i +']'];
    			if (typeof(elts) != 'undefined' && elts.checked){
    				retArr.push(new Array(elts.id,elts.value));
    				}
    	    }
    		return retArr;  
    	}
    ensuite dans la requête ajax:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var selectedItems = getSelectedCheckbox();
    selectedItems = selectedItems.join(";");
    ....send('sel_country='+selectedItems);
    et je le recupere comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $sel_country = explode(";", $_GET['sel_country']);
    foreach ($sel_country as  $field ){
    			$field = explode(",", $field);
    			$id_country = $field[0];
    			$name_country= $field[1];
    s'il y a d'autre proposition je suis la

  4. #4
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Si à ce stade la requête est bien envoyée il ne reste plus qu'à regarder ce qu'elle envoie.
    Si tu es sous Firefox installes l'extension Firebug qui te permettra de visionner la requête Ajax envoyée ainsi que le retour.
    Il serait bon aussi d'afficher dans ton contrôleur la variable reçue afin d'en voir l'état.

    Edit: bouarf vive le matin... J'avais pas vu que tu indiquais que cette solution fonctionnait...
    Pour ma part cela ne me choque pas, qu'est ce qui te dérange tant ?

  5. #5
    Membre actif Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Points : 248
    Points
    248
    Par défaut
    Bonjour,

    Tu peux te tourner du côté de la notation JSON qui te permettra d'échanger des objets complexes (des tableaux entre autre). En premier lieu, tu crées tes objets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var donnees = {
        param1: "valeur1",
        param2: "valeur2",
        ...
    }
    Ensuite, pour l'envoyer via une requête Ajax, j'utilise la librairie Javascript Prototype qui permet de transformer mon objet via la méthode toQueryString() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    new Ajax.Request(
    	urlAppelee,
    	{
    		method: "get",
    		onLoading: ...,
    		onSuccess: ...,
    		onFailure: ...,
    		parameters: $H(donnees).toQueryString()
    	});
    Il semble que plus de monde se tourne vers JQuery que Prototype, donc je pense que JQuery propose une méthode similaire (désolé, je connais beaucoup moins comme librairie).

Discussions similaires

  1. Array dans un Array.. Dans un Array
    Par blinkman04 dans le forum Langage
    Réponses: 3
    Dernier message: 27/01/2014, 14h36
  2. Tableau javascript rempli avec des index d'un tableau array php.
    Par madina dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 13/08/2011, 17h40
  3. array PHP > JavaScript
    Par Shirraz dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/06/2010, 22h45
  4. array php dans fonction javascript?
    Par vidzo dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 29/09/2009, 09h29
  5. tableau PHP numéroter array
    Par actarus44 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 01/10/2006, 21h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo