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 :

SELECT onchange another SELECT


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut SELECT onchange another SELECT
    Bonjour à tous,
    Voici une base de ce que j'ai fais : https://jsfiddle.net/zarkoffe/vksnoxhr/50/
    Objectif : Sélectionner la référence d'un article (chargée depuis un bdd), et remplir le bon input en face en chargeant son nom (depuis une bdd aussi du coup).
    Au code ci-dessus j'ai tenté de faire ceci, mais sans succès et sans erreur. Je clique sur 'Ajouter', et ma ligne ne s'ajoute pas.

    Code HTML : 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
                  <td>
                    <select type="text" class="form-control scope article_ref" style="width: 100%;" onchange="ref_to_rearticle(this.value)">
                      <option></option>
                      <?php $list = $bdd->query('SELECT * FROM produit WHERE produit_contact = "'.$_SESSION['Contact_id'].'" ORDER BY `produit_ref` ASC');
                      while ($data = $list->fetch()) { ?>
                      <option value="<?php echo $data['produit_ref']; ?>"><?php echo $data['produit_ref']; ?></option>
                      <?php } $list->closeCursor(); ?>
                    </select>
                  </td>
                  <td>
                    <div id="article_refarticle">
                      <?php
                      $article_ref = $_POST['article_ref'] ?? 'null';
                      $requete = $bdd->prepare('
                          SELECT * FROM produit
                          WHERE produit_ref = :ref
                      ');
                      $stmt->bindValue(':ref', strtoupper($article_ref), PDO::PARAM_STR);
                      $stmt->execute();
            
                      while ($donnees = $stmt->fetch(PDO::FETCH_ASSOC)) {
                          echo "<input type=\"text\" value=\"{$donnees['produit_nom']}\" />";
                      }
                      ?>
                    </div>
                  </td>
    et l'ajax:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function ref_to_rearticle(produit_ref) {
      $.ajax({
        url: "modal_header/Actions/ajoutdevis.php",
        method: "POST",
        data: { article_ref: produit_ref }
      })
      .done(function( retour_html ) {
        $("#article_refarticle").html( retour_html );
      })
      .fail(function() {
        alert( "error facture creation ajax" );
      });	
    }
    merci d'avance!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    et donc... ?

    On doit deviner le code de ajoutdevis.php ?

    D'autant que le code que tu montres ne semble pas correspondre à celui du fiddle...

  3. #3
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut
    Il y est, tout mon code est sur la même page. Je vise la page où je suis déjà en faite.
    Dans ma logique je vise ce fichier, il trouve la div avec l'ID qu'il cherche, et devrait faire son taff. Mais ça ne marche pas apparemment

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Zarkoffe Voir le message
    ...tout mon code est sur la même page...
    Ce n'est pas possible, puisque tu fais un appel Ajax : tu appelles forcément une AUTRE page, externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        url: "modal_header/Actions/ajoutdevis.php",

  5. #5
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut
    D'accord je veux bien mais ça ne m'arrange pas.
    Mon objectif est lorsque je sélectionne une valeur dans mon select, je remplisse l'input à côté.
    On est bien d'accord que le seul moyen de faire cela est l'ajax non?
    Les 2 étant sur la même page, je suis censé faire comment? mettre mon input tout seul dans un fichier plus loin, faire un include tout pourri de ce fichier et le viser avec l'AJAX?
    Est-ce la solution où il y en a t-il une meilleure?

    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je crois que tu n'as pas compris comment fonctionne Ajax...


    Tu t'attaques à un code complexe (avec ajout/suppression dynamique de lignes), alors que tu ne maitrises pas les bases d'Ajax.

    Commence par un code SIMPLE et MINIMALISTE.

  7. #7
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut
    Je l'utilise sur un certain nombre de mes pages, je vois bien comment il fonctionne Je m'y prends de la même manière et ça fonctionne très bien.
    Seulement là j'essaye de viser la page où je suis déjà et il ne semble pas apprécié.

    Si tu pouvais répondre à ma question ça pourrait m'éclairer un peu plus
    Bon je pense que je vais faire include et mettre mon input tout seul dans un autre fichier, en attendant de trouver une meilleure soluce.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Je pense déjà que ta méthodologie est mauvaise.
    Sélectionner le produit APRES avoir ajouté la ligne n'a aucun sens...

    (et l'histoire de l'include est tout aussi ridicule... : Ajax doit appeler un fichier PHP externe et indépendant !)

    Voilà qui serait plus simple :

    • UN SEUL <select> de la référence produit (+ son nom !)
    • + le bouton "Ajouter LE produit"

    Au clic sur le bouton :
    • récupération de la ref_produit sélectionnée
    • appel ajax -> transmission de la ref_produit
    • fichier php externe -> requête SQL -> construction HTML de la ligne à ajouter (<tr>), AVEC les <input> remplis.
    • AJOUT de la ligne (code HTML) dans la <table>


    Par conséquent, il faut :
    • ajouter le <select> AVANT le bouton "Ajouter le produit"
    • modifier le code dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $('#add_article').click(function () {
    ...
    OUBLIE ta "table fantôme".
    • Le code HTML <tr>.......................</tr> doit être dans le fichier externe.
    • Pour le retour, l'ajout de la ligne se fera avec .append()
    Dernière modification par Invité ; 01/07/2019 à 11h37.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Suivant MA méthode, ça donne ça :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <select type="text" id="select_produit">
    	<option value="">...</option>
    	<option value="1">article 1</option>
    	<option value="2">article 2</option>
    	<option value="3">article 3</option>
    	<option value="4">article 4</option>
    </select>
    <button id="add_produit" class="btn btn-success">Ajouter un produit</button>
    Code jQuery : 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
    $(document).ready(function()
    {
    	$('#add_produit').click(function () {    // "Ajouter un produit"
    		var produit_ref = $('#select_produit').val();
    		if( produit_ref != '')
    		{
    			$.ajax({
    				url: "modal_header/Actions/ajout-tr-produit.php",
    				method: "POST",
    				data: { 'produit_ref': produit_ref }
    			})
    			.done(function( retour_html ) {
    				$("tbody#table_article").append( retour_html );
    			})
    			.fail(function() {
    				alert( "error" );
    			});
    		}
    	});
     
    });
    Fichier externe ajout-tr-produit.php :
    Code p : 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
    if( !empty($_POST['produit_ref']) )
    {
            require( 'connexion.php'); // connexion à la BDD (A ADAPTER)
     
            $sql = "SELECT * FROM produit WHERE produit_ref = :ref";
            $stmt = $bdd->query( $sql );
            $stmt->bindValue(':ref', strtoupper($_POST['produit_ref']), PDO::PARAM_STR);
            $stmt->execute();
     
            $data = $stmt->fetch(PDO::FETCH_ASSOC);
    ?>
    		<tr>
                  <td><input type="checkbox" name="chkbox[]"></td>
                  <td><input type="text" class="form-control" name="produit_nom[]" value="<?php echo $data['produit_nom']; ?>" /></td>
                  <td><input type="text" class="form-control" name="produit_unite[]" value="<?php echo $data['produit_unite']; ?>" /></td>
                  <td><input type="text" class="form-control" name="produit_prix_unitaire[]" value="<?php echo $data['produit_prix_unitaire']; ?>" /></td>
                  <td><input type="text" class="form-control" name="produit_quantite[]" value="1" /></td>
                  <td><input type="text" class="form-control" name="produit_prix_net[]" value="<?php echo $data['produit_prix_unitaire'] * 1; ?>" /></td>
    		</tr>
    <?php
    }

Discussions similaires

  1. onChange dans un select
    Par nebule dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 03/12/2007, 11h19
  2. onchange d'un select, marche pas
    Par man123 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/12/2005, 22h08
  3. problème avec select sur onchange
    Par Kerod dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 01/12/2005, 14h05
  4. code javascript dans onchange d'un <select>
    Par grochenel dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/11/2005, 20h25
  5. SELECT event onChange ?
    Par akaii dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 29/11/2004, 10h15

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