Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
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 26/07/2007, 10h30   #1
Membre habitué
 
Inscription : mai 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 499
Points : 149
Points : 149
Par défaut [PHP-JS] Traitement d'un objet HTMLCOLLECTION

Bonjour,

Mon problmème est le suivant.

J'ai un formulaire dont une partie est complétée par une fonction php qui affiche les résultats d'une requête :

Code :
1
2
3
4
5
6
7
8
9
10
for($i = 0; $i < $num_result; $i++)
        {
          $row = mysql_fetch_array($resultat);
          echo "<tr height='5%'>
		  <td id='tdcontenu'><input type='text' name='ordreProd[$i]' id='ordreProd' value='$row[1]' size='4' onchange='verifNombre(this)'><input type='hidden' name='cleProd[$i]' 'id='cleProd' value='$row[0]'></td>
	             <td id='tdcontenu'>$row[2]</td>
	             <td id='tdcontenu'>$row[3]</td>
	             <td id='tdcontenu'><input type='text' name='requiredquantite[$i]' id='quantite' value=''  size='4' onchange='verifNombre(this)'></td>
	            </tr>";
        }
Via une fonction AJAX, je désire enregistrer ces résultats qui auront préalablement étés complétés :

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
25
26
27
28
29
30
31
32
33
function enregInv()
 {
  xhrEnrInv = getXhr();
  xhrEnrInv.onreadystatechange = function()
   {
    if(xhrEnrInv.readyState == 4 && xhrEnrInv.status == 200)
     {
      document.getElementById('erreur').innerHTML = xhrEnrInv.responseText;
     }
   }
  xhrEnrInv.open("POST",'../transferts/ajaxEnregInv.php',true);
  xhrEnrInv.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
 
  leJour = document.getElementById('jour');
  jour = leJour.options[leJour.selectedIndex].value;
  leMois = document.getElementById('mois');
  mois = leMois.options[leMois.selectedIndex].value;
  lannee = document.getElementById('annee');
  annee = lannee.options[lannee.selectedIndex].value;
 
  var cleProd = new Array();
  var ordreProd = new Array();
  var quantite = new Array();
 
  for(cpt = 1; cpt <=10; cpt++)
   {
    cleProd[cpt] = document.getElementsByName('cleProd[cpt]').value;
    ordreProd[cpt] = document.getElementsByName('ordreProd[cpt]').value;
    quantite[cpt] = document.getElementsByName('quantite[cpt]').value;
   }
 
  xhrEnrInv.send("jour="+jour+"&mois="+mois+"&annee="+annee+"&cleProd="+cleProd+"&ordreProd="+ordreProd+"&quantite="+quantite);
 }
Cette fonction envoie donc à un script php 6 variables dont 3 tableaux.

Ce sont notemment ces 3 tableaux qui me posent problème lors du traitement : je ne parviens pas à traiter leur contenu. Si, dans mon script php, j'effectue :

Code :
1
2
3
4
$cleProd = $_POST['cleProd'];
 $ordreProd = $_POST['ordreProd'];
 $quantite = $_POST['quantite'];
echo $cleProd[1] . $ordreProd[1] . $quantite[1];
ça m'affiche 3 virgules.

Si je fais un echo d'une des variables POST, ça m'indique objet HTMLCOLLECTION.

Malgré mes recherches, je ne vois pas comment traiter ce type d'objet.

Quelqu'un pourrait-il m'aider?

Merci d'avance.

Christophe
dubitoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2007, 14h13   #2
Membre chevronné
 
Avatar de djayp
 
Inscription : avril 2004
Messages : 290
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 290
Points : 617
Points : 617
Envoyer un message via ICQ à djayp
Salut,

je ne sais pas si c'est la meilleure méthode, mais voici une astuce pour pouvoir envoyer les valeurs d'un tableau via Ajax :

Tu as donc dans ton formulaire plusieurs champs du même nom :

Code :
1
2
3
<input type="text" name="ordreProd[0]" value="valeur1" >
<input type="text" name="ordreProd[1]" value="valeur2">
<input type="text" name="ordreProd[2]" value="valeur3">
dans ta requete ajax, tu construis ton url en ajoutant une à une les valeurs de ton tableau :

Code :
1
2
3
4
var url = "";
for (i=0; i<= document.getElementsByName('ordreProd').length; i+++) { 
   url = url + "&ordreProd[]" + document.getElementsByName('ordreProd').value;  
}
Ce qui te donnera pour url :
Code :
&ordreProd[]=valeur1&ordreProd[]=valeur2&ordreProd[]=valeur3
Tu concatènes avec le reste des valeurs à envoyer et le tour est joué !

Voilà tu devrais pouvoir t'en sortir en répliquant cette astuce à tes trois tableaux.

A++
__________________
Djay
http://j-place.developpez.com/
djayp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2007, 15h13   #3
Membre actif
 
Avatar de pimpmyride
 
Inscription : décembre 2005
Messages : 303
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 303
Points : 156
Points : 156
je vais pas repondre à ta question mais quelque chose me choque au niveau de ton code.

Citation:
for($i = 0; $i < $num_result; $i++) { $row = mysql_fetch_array($resultat); echo "<tr height='5%'> <td id='tdcontenu'><input type='text' name='ordreProd[$i]' id='ordreProd' value='$row[1]' size='4' onchange='verifNombre(this)'><input type='hidden' name='cleProd[$i]' 'id='cleProd' value='$row[0]'></td> <td id='tdcontenu'>$row[2]</td> <td id='tdcontenu'>$row[3]</td> <td id='tdcontenu'><input type='text' name='requiredquantite[$i]' id='quantite' value='' size='4' onchange='verifNombre(this)'></td> </tr>"; }
tu peux aisement remplacer ton for par ceci
Citation:
while($row = mysql_fetch_array($resultat)){
// instruction
}
je n'ai jamais exploiter de resultat mysql comme tu l'as fait mais ca me parait tres tordu. C'est peut etre ca qui te pose probleme avec tes tableaux
pimpmyride 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 10h13.


 
 
 
 
Partenaires

Hébergement Web