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

msi79 455 Messages postés lundi 24 août 2009Date d'inscription 9 octobre 2018 Dernière intervention - 5 sept. 2018 à 11:27 - Dernière réponse : msi79 455 Messages postés lundi 24 août 2009Date d'inscription 9 octobre 2018 Dernière intervention
- 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

9 réponses

jordane45 23176 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 novembre 2018 Dernière intervention - 5 sept. 2018 à 12:02
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 23176 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 novembre 2018 Dernière intervention - 8 sept. 2018 à 23:21
Heu... la même chose apres avoir changé de valeur dans ta liste...
Sinon ça me sert à rien.
msi79 455 Messages postés lundi 24 août 2009Date d'inscription 9 octobre 2018 Dernière intervention - 9 sept. 2018 à 09:24
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 23176 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 novembre 2018 Dernière intervention - 9 sept. 2018 à 12:43
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 455 Messages postés lundi 24 août 2009Date d'inscription 9 octobre 2018 Dernière intervention - 9 sept. 2018 à 19:52
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 455 Messages postés lundi 24 août 2009Date d'inscription 9 octobre 2018 Dernière intervention - 9 sept. 2018 à 20:31
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.