Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
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 11/12/2010, 14h57   #1
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Par défaut Un httpRequest un peu compliqué

Bonjour à tous,

Au départ, j'ai un formulaire dynamique PHP :

Code :
1
2
3
4
5
 
for($i=0; $i<10; $i++){
echo "<input type='text' name='paramA[]'>";
echo "<input type='text' name='paramB[]'>";
}
Ce que je voudrais, c'est pouvoir le remplir avec une BDD (qui contiendrait le même type d'informations pour une famille donnée) interrogée via httpRequest et un clic sur un lien qui appelle la fonction JS :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
function remplit(id_famille){
if(xhr.readyState == 4) {
var paramA = document.getElementsByName("paramA[]");
var paramB = document.getElementsByName("paramB[]");
paramA.value = xhr.responseText; 
// c'est là où ça coince
//mais il faudrait que les champs dynamiques soient remplis avec ce qui //revient du fichier php "pre_remplit"
}
xhr.open("POST","pre_remplit.php",true);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
data = "id_famille="+id_famille;
xhr.send(data);		
 
}
Côté PHP - fichier "pre_remplit", j'interroge tout simplement une table - mais j'ai besoin d'une boucle while, et c'est là que ça coince aussi...

Code :
1
2
3
4
5
6
7
8
9
10
 
$sql = mysql_query("SELECT paramA, paramB FROM table WHERE id_famille='".$_POST['id_famille']."' ORDER BY id ASC");
$param = array();
$i = 0;
while($row = mysql_fetch_assoc($sql)){
$param[$i]['paramA'] = $row['paramA'];
$param[$i]['paramB'] = $row['paramB'];
$i++;
}
echo $param; // là, j'envoie un tableau et je ne sais pas le récupérer en JS
Variante : pas de tableau, mais cela ne fonctionne pas non plus :

Code :
1
2
3
4
5
6
7
8
 
$sql = mysql_query("SELECT paramA, paramB FROM table WHERE id_famille='".$_POST['id_famille']."' ORDER BY id ASC");
 
while($row = mysql_fetch_assoc($sql)){
echo $row['paramA']; 
echo $row['paramB'];
}
// dans cette config, j'envoie à JS les données en boucle, plutôt que "d'un seul coup" avec le tableau de la version ci-dessus.
Voila, si j'ai réussi à faire comprendre le truc...je veux bien de l'aide.
D'avance, merci.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2010, 07h11   #2
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 271
Points : 7 271
Bonjour,

Citation:
var paramA = document.getElementsByName("paramA[]");
retourne un tableau donc tu dois préciser l'indice.
Citation:
$param[$i]['paramA'] = $row['paramA'];
Utilise un flux xml pour le résultat, c'est plus facile à manipuler,voici un exemple, ce problème est mainte fois résolue, faits une recherche.

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2010, 08h58   #3
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bonjour,

Je viens de lire ce post attentivement.
Tu veux dire que pour remplir mon formulaire et tous ses champs texte, il faudrait que le PHP renvoie un flux XML avec les réponses vers Ajax ?

Donc que ma boucle while génère des noeuds XML ?
C'est bien ça ?
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2010, 10h58   #4
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285


Et bien oui, c'est ça !
Merci bien : c'est exactement ce qu'il me fallait et ça fonctionne impecc !
Voici les sources, si ça peut aider quelqu'un :

Côté ajax :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
function remplit_champs(id_cat){
var xhr = getXhr();
xhr.onreadystatechange = function() { 
 
       if(xhr.readyState == 4) {
	var rst = xhr.responseXML;
	var items = rst.getElementsByTagName('element');
	var paramA = document.getElementsByName("paramA[]");
	var paramB = document.getElementsByName("paramB[]");
 
	for(var i=0; i< items.length; i++){
	paramA[i].value = rst.getElementsByTagName('leParamA')[i].firstChild.nodeValue;
	paramB[i].value = rst.getElementsByTagName('leParamB')[i].firstChild.nodeValue;			
             }
      }
return xhr.readyState;
} 
 
xhr.open("POST","traitement.php",true);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
data = "id_cat="+id_cat;
xhr.send(data);		
}
... et côté PHP - page traitement.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
$id_cat = $_POST['id_cat'];
if(!$id_cat){
exit();
}
$sql = mysql_query("SELECT paramA, paramB FROM table WHERE id_cat='".$id_cat."' ORDER BY id ASC");
 
header("Content-type:text/xml");
echo '<?xml version="1.0" encoding="utf-8"?>';
echo "<racine>";
 
while($row = mysql_fetch_assoc($sql)){
    echo '<element>';
    echo '<leParamA>';
    echo $row["paramA"];
    echo '</leParamA>';
    echo '<leParamB>';
    echo $row["paramB"];
    echo '</leParamB>';
    echo '</element>';
}
echo '</racine>';
et le tour est joué !
Bonne journée à tous.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h55.


 
 
 
 
Partenaires

Hébergement Web