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 :

[PHP-JS] Traitement d'un objet HTMLCOLLECTION


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre éclairé
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Points : 687
    Points
    687
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    &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++

  3. #3
    Membre actif Avatar de pimpmyride
    Inscrit en
    Décembre 2005
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 321
    Points : 207
    Points
    207
    Par défaut
    je vais pas repondre à ta question mais quelque chose me choque au niveau de ton code.

    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
    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

Discussions similaires

  1. [COM] PHP en communication avec l'objet COM
    Par joe_le_mort dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 22/05/2012, 15h57
  2. [XML] Code PHP pour traitement de fichier XML
    Par gaggy dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 12/09/2007, 19h44
  3. [PHP/MySql]traitement d'une liste dynamique
    Par ben_popcorn dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 29/09/2006, 13h51
  4. [PHP-JS] Traitement des données dans une autre page...
    Par sekiryou dans le forum Langage
    Réponses: 5
    Dernier message: 04/03/2006, 10h06

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