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

Messages postés
486
Date d'inscription
lundi 24 août 2009
Dernière intervention
15 mars 2019
- - Dernière réponse : msi79
Messages postés
486
Date d'inscription
lundi 24 août 2009
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
25029
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mars 2019
364
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
25029
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mars 2019
364 -
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
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
25029
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mars 2019
364 -
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
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
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.