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

AJAX Discussion :

[AJAX] Un httpRequest un peu compliqué


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut [AJAX] Un httpRequest un peu compliqué
    Bonjour à tous,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    var paramA = document.getElementsByName("paramA[]");
    retourne un tableau donc tu dois préciser l'indice.
    $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+.

  3. #3
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    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 ?

  4. #4
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut


    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 : 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
     
    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 : 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
     
    $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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requete un peu compliqué pour moi
    Par passie dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/04/2006, 15h08
  2. [MySQL 4.1.17] requete un peu compliqué à faire
    Par Zen_Fou dans le forum Administration
    Réponses: 1
    Dernier message: 26/04/2006, 17h41
  3. code une somme un peu complique
    Par Battosaiii dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 08/04/2006, 16h00
  4. [AJAX]probleme HTTPRequest
    Par GTJuanpablo dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 12/02/2006, 11h24
  5. [SQL - ORACLE] Requete un peu compliquée (pour moi)
    Par Worldofdada dans le forum Langage SQL
    Réponses: 15
    Dernier message: 03/11/2005, 08h25

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