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

JavaScript Discussion :

[AJAX] Récupération de données AJAX -> PHP


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut [AJAX] Récupération de données AJAX -> PHP
    Bonjour à Toutes et Tous,

    Les codes ci-dessous s'affichent correctement sur mon site, mais j'ai besoin de récupérer les valeurs d'un select (liste déroulante) après une requête MySQL par AJAX. Je m'explique avec les codes suivants :

    Ceci est le script :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <script language="Javascript" type="text/JavaScript">
    function makeRequest(url,id_niveau,id_ecrire){ 
    	var http_request = false; 
            if (window.XMLHttpRequest) { 
                http_request = new XMLHttpRequest(); 
                if (http_request.overrideMimeType) { 
                    http_request.overrideMimeType("text/xml"); 
                } 
            } else if (window.ActiveXObject) { 
                try { 
                    http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
                } catch (e) { 
                    try { 
                        http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
                    } catch (e) {} 
                } 
            } 
     
            if (!http_request) { 
                alert("Abandon :( Impossible de créer une instance XMLHTTP"); 
                return false; 
            } 
     
            http_request.onreadystatechange = function() { traitementReponse(http_request,id_ecrire); } 
     		http_request.open("POST", url, true); 
    		http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
    		obj=document.getElementById(id_niveau); 
    		data="val_sel="+obj.value; 
    		code_du_produit = document.getElementById("code_du_produit").value; 
    		largeur_envoi = document.getElementById("largeur_envoi").value; 
    		hauteur_envoi = document.getElementById("hauteur_envoi").value; 
    		taux_tva = document.getElementById("taux_tva").value; 
    		http_request.send(data + "&products_ls_id=" + products_ls_id + "&code_du_produit=" + code_du_produit + "&largeur_envoi=" + largeur_envoi + "&hauteur_envoi=" + hauteur_envoi + "&taux_tva=" + taux_tva);
     
    } 
     
    function traitementReponse(http_request,id_ecrire) { 
    	var affich=""; 
    	if (http_request.readyState == 4) { 
    		if (http_request.status == 200) { 
     			var affich_list=http_request.responseText; 
    				obj = document.getElementById(id_ecrire); 
                    obj.innerHTML = affich_list; 
    		} 
    		else { 
                    alert("Un probleme est survenu avec la requete."); 
            } 
        } 
    } 
    </script>
    Puis l'appel au fichier externe :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <?php
            require('includes/application_top.php');
            
            $table = $_POST['val_sel'];
            $largeur_recue = sprintf("%d", $_POST['largeur_envoi']);
            $hauteur_recue = sprintf("%d",$_POST['hauteur_envoi']);
            $code_du_produit = sprintf("%d",$_POST['code_du_produit']);
            $taux_tva_recue = $_POST['taux_tva'];
            
            if($table=="Choisissez") {
                    exit;
            }
            
            $recherche_moteur = tep_db_query("SELECT MAX(largeur) AS largeur_max, MIN(largeur) AS largeur_min, MAX(hauteur) AS hauteur_max, MIN(hauteur) AS hauteur_min FROM " . TABLE_AJAXPRODUIT . " WHERE products_id = '$code_du_produit' ORDER BY largeur");
     
            while($recherche_moteur_resultat = tep_db_fetch_array($recherche_moteur)) {
            
                    if ($largeur_recue >= $recherche_moteur_resultat['largeur_min']) {
                            if ($largeur_recue <= $recherche_moteur_resultat['largeur_max']) {
                                    if ($hauteur_recue >= $recherche_moteur_resultat['hauteur_min']) {
                                            if ($hauteur_recue <= $recherche_moteur_resultat['hauteur_max']) {
                                                    $produit_moteur = tep_db_query("SELECT DISTINCT ap.largeur, ap.hauteur, ap.moteur, am.moteur_nm, am.moteur_prix, am.moteur_code, am.moteur_type 
                                                    FROM " . TABLE_AJAXPRODUIT . " ap, 
                                                    $table am 
                                                    WHERE (ap.largeur >= '$largeur_recue') AND (ap.hauteur >= '$hauteur_recue') 
                                                    AND ap.products_id = '$code_du_produit' 
                                                    AND am.moteur_nm = ap.moteur 
                                                    ORDER BY ap.largeur, ap.hauteur, am.moteur_code 
                                                    LIMIT 3
                                                    ");
                                                    
                                                    $aff = '<select>';
                                                    while($resultat_moteur = tep_db_fetch_array($produit_moteur)) {
                                                    
                                                            if ($resultat_moteur['moteur_prix'] != 0) {
                                                                    $aff .= '<option size="30" name="' . $resultat_moteur['moteur_type'] . '" value="' . $resultat_moteur['moteur_type'] . '">' . $resultat_moteur['moteur_type'] . ' ( + ' . $resultat_moteur['moteur_prix'] . ' )</option>';
                                                            } else {
                                                                    echo "Pas de moteurs disponibles !" . "\n";
                                                            }
                                                    }
                                                    $aff .= '</select>';
                                                    echo $aff;
                                            } else {
                                                    echo "Pas de moteurs disponibles !";
                                            }
                                    } else {
                                            echo "Pas de moteurs disponibles !";
                                    }
                            } else {
                                    echo "Pas de moteurs disponibles !";
                            }
                    } else {
                            echo "Pas de moteurs disponibles !";
                    }
            }
            
            require(DIR_WS_INCLUDES . 'application_bottom.php');
    ?>
    Et, pour terminer, l'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $tmp_html .= '
                       <tr>
                       <td class="main" width="60%">' . $op_data['name'] . ' :' . ($op_data['instructions'] != '' ? '<br /><span class="smallText">' . $op_data['instructions'] . '</span>' : '' ) . '</td>
                       <td class="main" width="40%">
                       <div id="id_list1">
                        <input type="checkbox" value="products_moteur" name="niv1" id="id_niv1" onClick="makeRequest(\'ajaxmoteur.php\', \'id_niv1\', \'id_niv2\');">
                         <br><br>
                       </div>
                       <div id="id_niv2">
                       <!-- ici sera charge la reponse mode texte de PHP à la request AJAX -->
                       </div>
                       <input type="text" size="30" id="' . $code_produit_id . '" name="' . $code_produit_id . '" ' . $maxlength . ' /></td>
                       </tr>';
    J'aimerais pouvoir récupérer les valeurs qui sont dans la balise <div id="id_niv2"> de mon affichage.

    Ma requête SQL me sort les 3 valeurs que j'ai besoin et AJAX m'affiche correctement ces 3 valeurs sous forme de select-option. Ca, ça fonctionne.

    Mais j'aurais besoin de récupérer le choix unique et de l'intégrer dans cet input sous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" size="30" id="' . $code_produit_id . '" name="' . $code_produit_id . '" ' . $maxlength . ' />      ICI     </td>
    Merci d'avance de vos lumières.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut
    Chers Toutes et Tous,

    Je tiens à apporter quelques commentaires sur mon dernier envoi pour votre réponse tant attendue :

    1. ma requête est correctement exécutée
    2. l'affichage de la balise <select> contient bien mes données


    Par conséquent, je souhaite pouvoir utiliser mes valeurs transmises et pouvoir recopier dans une balise de type TEXT la sélection effectuée par l'internaute de la liste déroulante affichée.

    Merci de votre envoi

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    le plus simple semble d'ajouter à l'endroit désiré, un span destiné à recevoir ces infos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <span id="span_criteres"></span>
    Tu devrais alors pouvoir faire
    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 traitementReponse(http_request,id_ecrire,id_span) { 
    	var affich=""; 
    	if (http_request.readyState == 4) { 
    		if (http_request.status == 200) { 
     			var affich_list=http_request.responseText; 
    				obj = document.getElementById(id_ecrire); 
                    obj.innerHTML = affich_list; 
    		le_span = document.getElementById(id_span); 
                    le_span.innerHTML = val1 + "&nbsp;" + val2 + "&nbsp;" + val3;
    		} 
    		else { 
                    alert("Un probleme est survenu avec la requete."); 
            } 
        } 
    }
    Le seul problème étant que je n'ai pas bien compris où tu devais aller chercher ces 3 valeurs

    A+

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut
    Bonjour E.Bzz,

    Merci pour la réponse.

    Le seul problème étant que je n'ai pas bien compris où tu devais aller chercher ces 3 valeurs
    En fait ces trois valeurs sont produites dans mon appel au fichier externe

    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
    <?php
    $produit_moteur = tep_db_query("SELECT DISTINCT ap.largeur, ap.hauteur, ap.moteur, am.moteur_nm, am.moteur_prix, am.moteur_code, am.moteur_type 
                                                    FROM " . TABLE_AJAXPRODUIT . " ap, 
                                                    $table am 
                                                    WHERE (ap.largeur >= '$largeur_recue') AND (ap.hauteur >= '$hauteur_recue') 
                                                    AND ap.products_id = '$code_du_produit' 
                                                    AND am.moteur_nm = ap.moteur 
                                                    ORDER BY ap.largeur, ap.hauteur, am.moteur_code 
                                                    LIMIT 3
                                                    ");
                                                    
                                                    $aff = '<select>';
                                                    while($resultat_moteur = tep_db_fetch_array($produit_moteur)) {
                                                    
                                                            if ($resultat_moteur['moteur_prix'] != 0) {
                                                                    $aff .= '<option size="30" name="' . $resultat_moteur['moteur_type'] . '" value="' . $resultat_moteur['moteur_type'] . '">' . $resultat_moteur['moteur_type'] . ' ( + ' . $resultat_moteur['moteur_prix'] . ' )</option>';
                                                            } else {
                                                                    echo "Pas de moteurs disponibles !" . "\n";
                                                            }
                                                    }
                                                    $aff .= '</select>';
                                                    echo $aff;
    ?>
    puis ces 3 valeurs sont correctement affichées dans mon fichier php dans la balise <div>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div id="id_niv2">
                       <!-- ici sera charge la reponse mode texte de PHP à la request AJAX -->
                       </div>
    Merci de ta suite

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Oui, c'est ce que tu avais dit ...

    Mais dans le select généré par Ajax, je ne vois que 2 valeurs : moteur_type et moteur_prix
    A moins que ton select récupère systématiquement 3 lignes, mais dans ce cas, difficile de deviner ....

    J'ai loupé quelque chose ?

    A+

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut
    En effet

    moteur_type et moteur_prix sont les deux valeurs qui s'affichent correctement formatées dans un select de trois entrées

    J'aurai besoin donc de pouvoir recopier ces deux valeurs transmises dans un input de type TEXT :

    Exemple :

    select et options visibles et correctement affichés actuels :
    Proto 134
    ProtA 234
    ProtB 456

    Lors du choix de l'internaute, exemple Poto 134, cette option se copie dans un autre champ de type TEXT

    Quizz

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

Discussions similaires

  1. [PostgreSQL] Dans le cadre de l'ajax, récupération de données, mais en double
    Par jeremy.GELB dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/03/2015, 09h07
  2. Réponses: 3
    Dernier message: 22/11/2010, 09h18
  3. [Tableaux] Récupération de données en PHP
    Par Edukam dans le forum Langage
    Réponses: 4
    Dernier message: 20/02/2008, 18h39
  4. [AJAX] base de donnée Ajax
    Par kawther dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/02/2007, 16h52
  5. Récupération de données AJAX
    Par mxh77 dans le forum 4D
    Réponses: 1
    Dernier message: 03/02/2007, 07h02

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