Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/06/2011, 14h09   #1
Membre actif
 
Avatar de Jacobian
 
Inscription : février 2008
Messages : 394
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 394
Points : 161
Points : 161
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 :
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 :
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 :
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
Jacobian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 09h56   #2
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
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.
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 20h53   #3
Membre actif
 
Avatar de Jacobian
 
Inscription : février 2008
Messages : 394
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 394
Points : 161
Points : 161
en fait j'ai fait la solution suivant mais je trouve ça pas propre:

Code :
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 :
1
2
3
4
 
var selectedItems = getSelectedCheckbox();
selectedItems = selectedItems.join(";");
....send('sel_country='+selectedItems);
et je le recupere comme suit:

Code :
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
Jacobian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 08h26   #4
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
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 ?
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 10h04   #5
Membre habitué
 
Avatar de Chen norris
 
Inscription : mai 2004
Messages : 124
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2004
Messages : 124
Points : 101
Points : 101
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 :
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 :
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).
__________________
Chen norris
C/C++, C#, Java, PHP & SQL coder
Web developer
Chen norris est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h45.


 
 
 
 
Partenaires

Hébergement Web