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 :

Récupérer l'id d'un select dynamiquement


Sujet :

JavaScript

  1. #1
    Membre actif
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2013
    Messages : 120
    Points : 293
    Points
    293
    Par défaut Récupérer l'id d'un select dynamiquement
    Bonjour le forum,

    Pour présenter rapidement le contexte : je dois créer une petite application web mettant en relation des produits, sous-produits et contact, j'ai donc une BDD MySQL qui tourne derrière pour la partie stockage.

    Pour être un peu plus User-friendly, lors de la mise en relation de données, la liste déroulante du sous-produit est liée au produit pour récupérer uniquement les sous-produits correspondant.

    Pour générer la liste liée, je suis passé par JavaScript et je bloque pour récupérer l'id de la liste déroulante afin d'ajouter l'information dans la BDD.

    vAjoutLiaison.php
    Code php : 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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    <!DOCTYPE html>
    <html>
        <head>
    		<meta charset="utf-8"/>
    		<link rel="stylesheet" href="Style\styleAjout.css" />
            <title>myRPI - Ajout d'une entrée</title>
    		<script type="text/javascript" src="../javascript/arrayPHP2JS.js" charset="iso_8859-1"></script>
    		<script type="text/javascript" src="../javascript/changeSousProduit.js" charset="iso_8859-1"></script>
    	</head>
     
    	<header>
    		<div class="bouton">
    			<a class="boutonRetour" href="vGestionSousProduit.php">
    				<h1>Retour</h1>
    			</a> 
    		</div>	
    	</header>
        <body>
    	<form method="post" action="../controller/cAjoutLiaison.php"  id="demoForm" >
    		<p class="titre">Liaison</p>
    		<fieldset id="formulaire">
     
    			<?php
    				require_once("../model/connexionBD.php");
    				$sql = "SELECT idSP as idsp, libelleSP as lsp, Produit.idp as idp, libelleP as lp FROM SousProduit, Produit WHERE SousProduit.idp = Produit.idP ORDER BY Produit.idP;";
    				$requete = $connexion->prepare($sql);
    				$requete->execute();
     
    				$produit = array();
    				$id = 0;
    				$temoin = 0;
     
    				foreach($requete->fetchAll() as $p) 
    				{
    					$pr = $p['idp'];
    					$sp = $p['idsp'];
    					if($temoin != $pr)
    					{
    						$produit[$pr][0] = $p['lp'];
    						$produit[$pr][1] = array();
    						$produit[$pr][2] = array();
    						$temoin = $pr;
    						$id = 0; 
    					}
     
    					$produit[$pr][1][$id] = $sp;
    					$produit[$pr][2][$id] = $p['lsp'];
    					$id++;
    				}
    				$chaine = htmlspecialchars(serialize($produit), ENT_QUOTES);
    			?>
    			<script type="text/javascript">
    				/* <![CDATA[ */
    				<!--
     
    				var tableau = new PhpArray2Js('<?php echo $chaine; ?>');
    				var tab = tableau.retour();
    			</script>
    			<legend>Sélectionnez un produit</legend>
    			<select name="produit" id="produit" onchange="changeSousProduit(tab,this.value);">
    			<option value="vide">- - - Choisissez un produit - - -</option>
    			<?php
    			/* Construction de la première liste : on se sert du tableau PHP */
    				$nr = count($produit);
    				foreach($produit as $nbr => $nom)
    				{
    			?>
    				<option value="<?php echo($nr); ?>"><?php echo($nom[0]); ?></option>
    			<?php
    				}
    			?>
    			</select>
        <!-- ICI, le secret : on met un bloc avec un id ou va s'insérer le code de
             la seconde liste déroulande -->
    			<span id="sousProduit">
    			</span><br />
     
    			<label>Categorie :</label>
    			<select name="idCategorie">
    			<?php
    				require_once("../model/connexionBD.php");
    				$sql = "SELECT libelleC FROM Categorie;";
    				$requete = $connexion->prepare($sql);
    				$requete->execute();
    				foreach($requete->fetchAll() as $p) 
    				{
    					echo "<option>".$p['libelleC']."</option><br/>";
    				}	
    			?>
    			 </select>
    			 <label>Contact :</label>
    			<select name="idContact">
    				<option></option>
    			<?php
    				require_once("../model/connexionBD.php");
    				$sql = "SELECT nom , prenom FROM Contact;";
    				$requete = $connexion->prepare($sql);
    				$requete->execute();
    				foreach($requete->fetchAll() as $p) 
    				{
    					echo "<option>".$p['nom']. " " .$p['prenom']. "</option><br/>";
    				}	
    			?>
    			 </select>
    			 <label>Description :</label>
    				<input type="text" name="description" size="30" /><br>
    		</fieldset>		
    		<p id="buttons">
    			<input type="submit" value="Envoyer" />
    			<input type="reset" value="Reset" />
    		</p>
    	</form>
        </body>
    </html>

    changeSousProduit.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
    /* On crée la fonction qui va construire la seconde liste déroulante */
    function changeSousProduit(tab,idr)
    {
        if(idr != "vide")
        {
        /* On compte les départements de cette région */
        var nbd = tab[idr][1].length;
    	var form_d  = '<select name="sousProduit" id="sousProduit">';
        for(var j = 0;  j < nbd; j++)
        {
            form_d += '  <option value="'+ tab[idr][1][j] +'">'+ tab[idr][2][j] +" ("+ tab[idr][1][j] +')<\/option>';
        }
        form_d += '</select>';
        }
        else
        {
            form_d = "";
        }
        document.getElementById("sousProduit").innerHTML += form_d;
    }
    cAjoutLiaison.php
    Code php : 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
    <?php
    	require_once("../model/connexionBD.php");
     
                    $sousProduit = $_POST["sousProduit"];
    	        $produit = $_POST["produit"];
    		$categorie = $_POST["idCategorie"];
    		$contact = $_POST["idContact"];
    		$description = $_POST["description"];
     
    		$SQL1 =  "SELECT idP FROM Produit WHERE libelleP = '$produit';";
    		$req = $connexion->prepare($SQL1);	
    		$req->execute();
    		$idP =0;
    		foreach($req->fetchAll() as $p)
    		{
    			$idP = $p['idP'];
    		}	
    		echo $idP;
    		$SQL2 =  "SELECT idSP FROM SousProduit WHERE libelleSP = '$sousProduit';";
    		$req = $connexion->prepare($SQL2);	
    		$req->execute();
    		$idSP = 0;
    		foreach($req->fetchAll() as $p)
    		{
    			$idSP = $p['idP'];
    		}	
    		echo $idSP;
    		$SQL3=  "SELECT idC FROM Categorie WHERE libelleC = '$categorie';";
    		$req = $connexion->prepare($SQL3);	
    		$req->execute();
     
    		foreach($req->fetchAll() as $p)
    		{
    			$idC = $p['idC'];
    		}	
    		echo $idC;
    		$SQL4 =  "SELECT idC FROM Contact WHERE nom = '$contact';";
    		$req = $connexion->prepare($SQL4);	
    		$req->execute();
    		$idCo = 0;
    		foreach($req->fetchAll() as $p)
    		{
    			$idCo = $p['idC'];
    		}	
     
     
    		$sql = "INSERT INTO Correspond VALUES('$idP',  '$idSP' ,  '$idC',1, '$description);";
    		$requete = $connexion->prepare($sql);	
    		$requete->execute();
     
    	}
    ?>

    Si vous avez une idée sur comment faire, je suis preneur !

    Merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    J'avais rencontré un problème pareil avec Symfony et JQuery.
    J'ai résolu mon probleme comme suis:
    - recuperer le string de select déja choisi, autrement tu dois choisir un objet de la liste ,cet objet est representé par un nom..
    avec JQuery il ya divers moyens( .html(); text() ..)
    -une fois tu as le string , tu cherche l'objet qui lui correspond coté serveur .

    Peut etre qu'il ya mieux ,mais ça tourne chez moi




    Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    Une discussion est terminée ? Alors le bouton est votre ami !

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 098
    Points : 44 675
    Points
    44 675
    Par défaut
    Bonjour,
    on y verrait plus clair si tu fournissais le code HTML généré ( CTRL +U).

    Tu peux toujours regarder : Créer des listes déroulantes liées entre elles sans utiliser Ajax

Discussions similaires

  1. Récupérer Contenu Select Dynamique
    Par Azerøth dans le forum Langage
    Réponses: 6
    Dernier message: 21/07/2016, 15h33
  2. [UI] Récupérer la valeur s'un champ select dynamiquement
    Par polakDesIles dans le forum jQuery
    Réponses: 2
    Dernier message: 03/11/2014, 08h18
  3. Réponses: 26
    Dernier message: 06/05/2009, 00h14
  4. Réponses: 5
    Dernier message: 17/07/2008, 09h18
  5. récupérer la valeur d'un select dans un autre
    Par alexander dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/03/2005, 19h43

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