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 :

Mettre à jour un champ texte suivant le choix d'une liste déroulante


Sujet :

AJAX

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 109
    Points : 151
    Points
    151
    Par défaut Mettre à jour un champ texte suivant le choix d'une liste déroulante
    Bonjour tout le monde !

    Je me tourne vers vous parce que j'ai un petit problème pour mettre à jour un champ texte en fonction du choix d'une liste déroulante.

    Mes données sont enregistrées dans une base de données (jdr)

    Pour commencer, je vous met un bout de html

    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
     
    Choix de la classe <select class="separator_ligne"
    					name="classe" id="classe_select" size="1">
    					<option value="sloop" checked="checked">Sloop</option>
    					<option value="caravelle">Caravelle</option>
    					<option value="galere">Galère</option>
    					<option value="cuirasse">Cuirassé</option>
    					<option value="fregate">Frégate</option>
    					<option value="gallion">Gallion</option>
    				</select> 
    				Expériences <input id="exp" class="separator_ligne size-input"
    					type="text" value="" />
    				Type de canon <select class="separator_ligne" name="type" id="type_canon"
    					size="1">
    					<option value="leger" checked="checked">Léger</option>
    					<option value="naval">Naval</option>
    					<option value="lourd">Lourd</option>
    				</select> 
    				Dégats : <input id="DD_degat" class="separator_ligne size-input"
    					type="text" value="" />
    l'idée c'est de mettre à jour le champ expérience en fonction de la liste classe. J'ai réussit cette partie là. Je vous met mes script php et 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
    16
    17
    18
    19
    20
    21
    22
     
    <?php
    // init bdd
    $bdd = mysqli_connect ( 'localhost:3306', 'root', 'root' );
    mysqli_select_db ( $bdd, 'jdr' );
    //
     
    if(isset($_POST['classe'])) {
        $query = 'SELECT exp,classe 
            FROM bateau 
            WHERE classe ="' . $_POST['classe'] . '";';
        $result = mysqli_query ( $bdd, $query );
        $query_result = array();
        while($row = mysqli_fetch_assoc ( $result )){
            $query_result[]['exp']= $row['exp'];
        }
        echo json_encode(array('experience' => $query_result[0]['exp']));
    }
     
    // fermeture bdd 
    mysqli_close($bdd);
    ?>
    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
     
    // Fonction de mise à jour
    $(document).ready(function() {
    	get_experience();
        $('#classe_select').on('change', function() {
            get_experience();
        });
    });
     
    $(document).ready(function(){
    	get_degat();
    	/*$('#type_canon').on('change',function() {
    		get_degat();
    	});*/
    });
     
    // Récupération des données dans la base de données
    function get_experience(){
    	var ajaxData = {
            classe: $('#classe_select').val()
        };
        $.ajax({
            method: "POST",
            url: "includes/mon_ajax.php",
            data: ajaxData,
            dataType: 'json'
        }).done(function( jsonResult ) {
            $('#exp').val(jsonResult.experience);
        }).fail(function( jqXHR, textStatus ) {
        	  alert( "Request failed: " + textStatus );
        });
    }
     
    function get_degat(){
    	var ajaxData = {
            classe: $('#type_canon').val()
        };
    	console.log($('#type_canon').val());
    	$.ajax({
            method: "POST",
            url: "includes/mon_ajax_degat.php",
            data: ajaxData,
            dataType: 'json'
        }).done(function( jsonResult ) {
            $('#DD_degat').val(jsonResult.valeur_degat);
        }).fail(function( jqXHR, textStatus ) {
        	  alert( "Request failed: " + textStatus );
        });
    }
    J'ai donc voulu adapter ma syntaxe au champ dégats qui se met à jour avec la liste type de canon. Et là.... ça ne fonctionne pas du tout : j'obtient le message parse error.

    voilà le code php associée au type de canon :
    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
     
    <?php
    // init bdd
    $bdd = mysqli_connect ( 'localhost:3306', 'root', 'root' );
    mysqli_select_db ( $bdd, 'jdr' );
    //
    if(isset($_POST['type'])==0){
            echo  'aucune entrée';
    }
     
    if(isset($_POST['type'])){
            $query = 'SELECT type,degat
            FROM canon
            WHERE type ="' . $_POST['type'] . '";';
            $result = mysqli_query ( $bdd, $query );
            $query_result = array();
            while($row = mysqli_fetch_assoc ( $result )){
                    $query_result[]['DD_degat']= $row['DD_degat'];
            }
            echo json_encode(array('valeur_degat' => $query_result[0]['DD_degat']));
    }
    // fermeture bdd 
    mysqli_close($bdd);
    ?>
    Visiblement, lorsque la fonction get_degat est appelée, la condition $_POST['type'])==0 est validée. Je ne comprend absolument pas pourquoi...

    Je vous remercie d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 109
    Points : 151
    Points
    151
    Par défaut
    je viens de me rendre compte d'un truc stupide dans mon ajax. Dans la fonction get_degat j'avais mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var ajaxData = {
            classe: $('#type_canon').val()
        };
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var ajaxData = {
            type: $('#type_canon').val()
        };
    dans le fichier mon_ajax_degat.php, isset($_POST['type']) n'est plus égal à 0.

    Maintenant j'obtient {valeur_degat : NULL}...

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 109
    Points : 151
    Points
    151
    Par défaut
    Finalement j'ai trouvé...

    J'avais une erreur dans le fichier mon_ajax_degat.php : je me simplement trompé de variable dans la query

    la solution est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while($row = mysqli_fetch_assoc ( $result )){
    		$query_result[]['degat']= $row['degat'];
    	}
    	echo json_encode(array('valeur_degat' => $query_result[0]['degat']));
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while($row = mysqli_fetch_assoc ( $result )){
    		$query_result[]['DD_degat']= $row['DD_degat'];
    	}
    	echo json_encode(array('valeur_degat' => $query_result[0]['degat']));
    En effet DD_degat (qui est l'id du champ à remplir) ne me sert que pour remplir le bon champ dans le ajax. De ce fait il n'a rien à faire dans le php...

    Du coup j'ai fait du duck debugging...

    Cette discussion est donc résolue !

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

Discussions similaires

  1. [WD-2007] champ texte lié au choix dans une liste déroulante
    Par ricore dans le forum Word
    Réponses: 3
    Dernier message: 16/03/2012, 23h10
  2. Réponses: 7
    Dernier message: 30/01/2010, 12h28
  3. [AC-2007] affichage de données dans un champ à partir d'un choix d'une liste déroulante
    Par Joebar-3 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 07/07/2009, 10h43
  4. Réponses: 2
    Dernier message: 28/11/2008, 11h22
  5. Cacher un champs texte selon la valeur d'une liste déroulante
    Par ntahi dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/08/2007, 15h46

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