Problème de recuperation de valeur d'une liste [Résolu]

Messages postés
486
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
15 mars 2019
- - Dernière réponse : msi79
Messages postés
486
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
15 mars 2019
- 9 sept. 2018 à 20:31
Bonjour,
j'ai une liste déroulante et j’aimerai récupérer ces valeurs après avoir fait un submit.
NB: hier jordane45 m'a aidé à afficher les valeur de cette mème liste déroulante .

voici le formulaire traité hier.
<?php 
/**
* Petit rappel
* comment écrire correctement son code en php :
* http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code
*/


//-------------------------------------------//
//affichage des erreurs php
//-------------------------------------------//
/*
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
*/

//-------------------------------------------//
//connexion à la bdd
//-------------------------------------------//
//require_once 'connect_pdo.php';


//-------------------------------------------//
//VERIF L'EXISTENCE DU TELEPHONE
//-------------------------------------------//
$sql = "SELECT * 
      FROM tb_sous_famille SF
      LEFT JOIN cree_produit P ON P.id_sousfamille = SF.id
      ORDER BY SF.design ";


  try{
     $req_1 = $pdo->prepare($sql);
     $req_1->execute();
     $resulsMDP = $req_1->fetchAll();
    }catch(PDOException  $e){
     echo "ERREUR DE REQUETE : " . $sql . '  error : '.$e->getMessage();
    }
  
  $nbr = !empty($resulsMDP) ? count($resulsMDP) : 0;
  
/*  $arrDesigns = array();
  if(!empty($resulsMDP)){
    foreach($resulsMDP as $R){
      $arrDesigns[] = $R['design']; //echo $arrDesigns[1];
    }
  }
 */ 
  $arrDesigns = array();
  if(!empty($resulsMDP)){
    foreach($resulsMDP as $R){
      $arrDesigns[$R['design']] = $R['design'];
    }
  }
  
  $arrPacks = array();
  if(!empty($resulsMDP)){
    foreach($resulsMDP as $R){
      $arrPacks[$R['design']][] = $R['produit'];
    }
  }
  
   ?>

    <script type="text/javascript" src="./js/dept_xhr_detail.js" charset="iso_8859-1"></script>
<form action="" method="post" id="chgdept"  >
<div class="row">
  <div class="col-md-6 mb-3">
  	<label for="validationCustom03">Category:</label>
      <select class="form-control form-control-lg" name="category" id="validationCustom03" onchange="ChangecatList()" required>
        <option value="">Choose... </option>
        <?php 
        if(!empty($arrDesigns)){
          foreach($arrDesigns as $D){
            echo '<option value="'.$D.'">'.$D.'</option>';
            
         }
        }
       ?>
        <option value="Curriculum Development and Alignment">Curriculum Development and Alignment</option>
        <option value="District Committee">District Committee</option>
      </select>
	<div class="invalid-feedback">
	</div>
  </div>
  <div class="col-md-6 mb-3">
  	<label for="validationCustom04">Activity:</label>
     <select class="form-control form-control-lg" id="validationCustom04" name="produit" onchange="getDepartements_detail(this.value);"></select>
    <div class="invalid-feedback">
	</div>
  </div>
</div>

 <div class="row">
      <div class="col-md-1"></div>
      <div class="col-md-4">
        <input type="submit" class="btn btn-primary btn-lg btn-block"  name="ok" id="ok" value="Enregistrer" />
      </div>
      <div class="col-md-3"></div>
</div>

</form>  


le code js:
<script type="text/javascript">
var catAndActs =  <?php echo json_encode($arrPacks) ?>;

catAndActs['Curriculum Development and Alignment'] = ['Capstone Development', 'Course Of Study Development / Revision', 'Standards Alignment / Rollout', 'Other'];

//pour voir dans la console ce que ça donne :
console.log("catAndActs :");
console.log(catAndActs);


function ChangecatList() {  
  var catList = document.getElementById("validationCustom03");
  var actList = document.getElementById("validationCustom04");
  var selCat = catList.options[catList.selectedIndex].value;

  actList.innerHTML = "";
  var cats = catAndActs[selCat];
  console.log('selCat : ' + selCat);
  console.log('cats : ' + cats);
  if (cats) {
    for (var i = 0; i < cats.length; i++) {
      var cat = new Option(cats[i], i);
      actList.options.add(cat);
    }
  }
} 
</script>


quand je clique sur le bouton valider , par exemple pour le produit NEON, c'est plutot 1 qui est envoyé au lieu de NEON . Ce 1 ne correspon ni a l'ID de NEON ni à l'ID de la catégorie.

NB j'aime avoir un ruc qu genre
3/NEON avec 3 comme ID de NEON . je ferai un explode() pour recuperer le ID de NEON et NEON lui meme.

voici les tables :
Afficher la suite 

Votre réponse

1 réponse

Messages postés
25592
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
311
0
Merci
Bonjour,

A mon avis .... ça vient de cette ligne de code
var cat = new Option(cats[i], i);

Regarde donc la documentation :
https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement/Option
Le second paramètre correspond à la VALUE de ton option... hors toi tu y mets la valeur de i


NB: en passant...à l'avenir... il serait bien que pour ton code sql également (le dump de ta bdd) tu utilises LES BALISES DE CODE.
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

jordane45
Messages postés
25592
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
311 -
Heu... la même chose apres avoir changé de valeur dans ta liste...
Sinon ça me sert à rien.
msi79
Messages postés
486
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
15 mars 2019
-
Bonjour,
ça doit etre ça je crois .

catAndActs :
index.php?page=STOCK:414 {AMPOULES: Array(3), CLEF USB: Array(2), MARQUEUR: Array(1), VINS: Array(1), VOLAILLE: Array(5), …}
index.php?page=STOCK:423 selCat : AMPOULES
index.php?page=STOCK:426 cats : (3) ["AMPOULE ECONOMIQUE", "NEON", "AMPOULE 250WATT"]
index.php?page=STOCK:430 Ajout option : AMPOULE ECONOMIQUE i = 0
index.php?page=STOCK:430 Ajout option : NEON i = 1
index.php?page=STOCK:430 Ajout option : AMPOULE 250WATT i = 2
index.php?page=STOCK:423 selCat : VINS
index.php?page=STOCK:426 cats : ["Muscador shake"]
index.php?page=STOCK:430 Ajout option : Muscador shake i = 0
index.php?page=STOCK:423 selCat : AMPOULES
index.php?page=STOCK:426 cats : (3) ["AMPOULE ECONOMIQUE", "NEON", "AMPOULE 250WATT"]
index.php?page=STOCK:430 Ajout option : AMPOULE ECONOMIQUE i = 0
index.php?page=STOCK:430 Ajout option : NEON i = 1
index.php?page=STOCK:430 Ajout option : AMPOULE 250WATT i = 2
index.php?page=STOCK:423 selCat : VINS
index.php?page=STOCK:426 cats : ["Muscador shake"]
index.php?page=STOCK:430 Ajout option : Muscador shake i = 0
jordane45
Messages postés
25592
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
311 -
Donc... dans l'exemple que tu nous donnes... tu as
selCat = AMPOULES

Et dans l'array tu as ["AMPOULE ECONOMIQUE", "NEON", "AMPOULE 250WATT"]

Et tu génères les options suivantes :
 Ajout option : AMPOULE ECONOMIQUE i = 0
 Ajout option : NEON i = 1
AMPOULE 250WATT i = 2 

Autrement dit .. tes options ressemblent à :
<option value="0">AMPOULE ECONOMIQUE</option>
<option value="1">NEON</option>
<option value="2">AMPOULE 250WATT</option>

... tu as mis, dans le VALUE de tes options.. la valeur de "i" ...

Mais toi.. ce n'est pas cette valeur que tu dois y mettre.....
quand je clique sur le bouton valider , par exemple pour le produit NEON, c'est plutot 1 qui est envoyé au lieu de NEON . Ce 1 ne correspon ni a l'ID de NEON ni à l'ID de la catégorie


Donc.. soit tu veux retourner lors du submit le "libelle" .... et dans ce cas tu dois modfier ton code par
 var cat = new Option(cats[i], cats[i]);


Soit tu veux retourner l'ID ... et dans ce cas il faut modifier deux choses
le code js :
 var cat = new Option(cats[i][0], cats[i][1]);


et bien entendu.. le contenu de l'array cats fourni par le php
un truc du genre :
 $arrPacks = array();
  if(!empty($resulsMDP)){
    foreach($resulsMDP as $R){
      $arrPacks[$R['design']][] = array($R['id'],$R['produit']);
    }
  }
msi79
Messages postés
486
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
15 mars 2019
-
Bonsoir,
la deuxième liste déroulante affiche maintenant que les ID des produits . mais je veux avoir quelque chose de ce genre:


<option value="10">AMPOULE ECONOMIQUE</option>
<option value="7">NEON</option>
<option value="11">AMPOULE 250WATT</option>


mais ce que j'ai actuellement est

<option value="10">10</option>
<option value="7">7</option>
<option value="11">11</option>


ce qui n'est pas agréable
msi79
Messages postés
486
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
15 mars 2019
-
c'etait plutot
 var cat = new Option(cats[i][1], cats[i][0]);


Merci beaucoup
Commenter la réponse de jordane45