Function construction comboxbox php

Messages postés
38
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
13 janvier 2019
- - Dernière réponse : claude77260
Messages postés
38
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
13 janvier 2019
- 8 oct. 2016 à 11:05
Bonjour,
j'avais trouvé sur le site une fonction permettant de construire une combo, malheureusement , elle ne fonctionne pas et je ne vois pas la solution, je récupéré bien les intitulés dans la combo, mais je n'arrive pas à récupérer en retour l'ID correspondant


//--------------------------------------------------------------------
//-----------Elements obligatoire à envoyer à la fonction-------------
//--------------------------------------------------------------------
//genere_select ('nom', 'table', 'val', 'libelle_combo', '', '', '', 'valeur a selectionner', false, '', '');
$name='id_combo'; // nom de la combobox
$table='statuts';
$libelle_combo='libelle_statut';// nom du champ à afficher dans la combo
$id_combo= 'id_statut'; //nom du champ id

//-----------Elements facultatif à envoyer à la fonction--------------
$selected =''; //valeur de l'option sélectionnée
$where =''; // condition optionnelle du select
$style=''; //style html à appliquer à la combo
$class=''; // class CSS à appliquer à la combo

//----------------- appel à la function ------------------------------
function_genere_select( $name,$table,$id_combo,$libelle_combo,$where,$selected,$class,$style);
//Affiche id et libellé retournés

echo $val[$libelle_combo];
echo $val[$id_combo]; //Affiche id et libellé

//------------------- function --------------------------------------
function function_genere_select ($name, $table, $id_combo, $libelle_combo, $where, $origin=array(), $id='', $selected, $multiple=false, $class, $style)
{

if(!isset($name) or !isset($table) or !isset($id_combo) or !isset($libelle_combo))
{
return false;
break;
}
echo '<select ';
if ($multiple == true) {echo ' multiple ';}
if ($class != '') {echo 'class="'.$class.'"';}
if ($style != '') {echo 'style="'.$style.'"';}
echo ' name="'.$name.'" ';
if ($id != '') {echo 'id="'.$id.'"';}
echo '>'."\n\r";

//si on a un tableau d'options préremplis on le génère
foreach ($origin as $k => $v)
{
echo '<option value="'.$v.'"';
if($v == $selected) { echo ' selected="selected" '; }
echo '>';
echo $k;
echo '</option>'."\n\r";
}

//----------- REQUETE on sélectionne les données dans la bdd ---------
$requete = 'select '.$id_combo.', '.$libelle_combo.' from '.$table.' '.$where;
$result = mysql_query($requete);

//Affichage dans la combo

while ($val = mysql_fetch_array($result))
{
echo '<option value="'.$val[$id_combo].'"';
if($val[$id_combo] == $selected)
{
echo ' selected="selected" ';
}
echo '>';
echo $val[$libelle_combo];// affiche les données dans la combo
echo '</option>'."\n\r";
}
echo '</select>';
return $val[$id_combo];
} //fin de la function

//Affiche id et libellé retournés
echo $val[$libelle_combo];
echo $val[$id_combo]; //Affiche id et libellé

?>
Afficher la suite 

Votre réponse

4 réponses

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

pour commencer... tu utilises l'ancienne extension mysql (considérée comme obsolète).
Je t'invite vivement à passer à mysqli ou (je préfère...) à PDO.
http://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top

Ensuite... as tu bien créé la table en BDD correspondant à ce code ?

Puis.. lorsque tu dis ne pas parvenir à récupérer en retour l'ID correspondant.. c'est à dire ??? A quel moment ? Après que l'utilisateur est fais un choix ??
As tu placé ce select dans un FORM ou as tu essayé en Javascript ? (car sans ça... impossible ! )
Commenter la réponse de jordane45
Messages postés
38
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
13 janvier 2019
0
Merci
bonjour Jordane

1-oui je sais, je passerais en php 5.6 procédural après fonctionnement car à 70 ans je ne vais pas me mettre à PDO
2- oui puisque je reçois les intitulés dans ma combo
3- oui après, le choix-c'est ce que je recherche
4-non je n'ai pas de form effectivement, tu le mettrais ou le form ???

à+
jordane45
Messages postés
25618
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 mai 2019
311 -
Commenter la réponse de claude77260
Messages postés
38
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
13 janvier 2019
0
Merci
pour ceux interessés par cette fonction


<?php
/*
description : fonction qui génère une combobox pour un formulaire
La connexion doit être effective à la bdd mysql
seuls les 4 premiers paramètres sont obligatoires ... donc elle peut s'utiliser avec juste 4 param
$name : nom de la combobox
$table : $table de la bdd concernée
$id_combo : colonne de la table contenant l'ID
$libelle_combo : colonne de la table à afficher dans le champ
  • / ?><?phpinclude("connect4.php");//--------------------------------------------------------------------//-----------Elements obligatoire à envoyer à la fonction-------------//-------------------------------------------------------------------- $name='id_combo'; // nom de la combobox $table='statuts'; $id_combo= 'id_statut'; //nom du champ de la table id $libelle_combo='libelle_statut';// nom du champ de la table à afficher dans la combo //-----------Elements facultatif à envoyer à la fonction-------------- $where =''; // condition optionnelle du select $selected =''; //valeur de l'option sélectionnée $class=''; // class CSS à appliquer à la combo $style=''; //style html à appliquer à la combo //--------------------------------------------------------------------//----------- appel à la function dans la partie formulaire ----------//--------------------------------------------------------------------function_genere_select( $name,$table,$id_combo,$libelle_combo,$where,$selected,$class,$style);// retour de la function id_combo$id_combo = $_GET['id_combo'];echo $id_combo; //affiche pour traitement la valeur id_combo choisie dans la combobox//--------------------------------------------------------------------//------------------- function -------------------------------------- //--------------------------------------------------------------------function function_genere_select ($name, $table, $id_combo, $libelle_combo, $where,$selected,$class, $style ) { if(!isset($name) or !isset($table) or !isset($id_combo) or !isset($libelle_combo)) { return false; break; } //----------- REQUETE on sélectionne les données dans la bdd --------- $requete = 'select '.$id_combo.', '.$libelle_combo.' from '.$table.' '.$where; $result = mysql_query($requete); //----------------- Affichage dans la combo --------------------------echo"<center>";echo'<FORM method "GET" NAME="$id_combo" action"">'; echo'<SELECT NAME="id_combo" onchange="form.submit()">'; echo"<option>-- Votre choix ---</option>"; while ($val = mysql_fetch_array($result)) { echo '<option value="'.$val[$id_combo].'"'; if($val[$id_combo] == $selected) { echo ' selected="selected" '; } echo '>'; echo $val[$libelle_combo];// affiche les données dans la combo echo '</option>'."\n\r"; } echo '</select>'; echo"</form>"; echo"</center>"; return $val[$id_combo]; } //fin de la function?>
Commenter la réponse de claude77260
Messages postés
38
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
13 janvier 2019
0
Merci
le précédent post n'est pas passé ?? voici le code en php 6 à 7


<?php
include("_connect7.php");

//--------------------------------------------------------------------
//-----------Elements obligatoire à envoyer à la fonction-------------
//--------------------------------------------------------------------
$name='id_combo'; // nom de la combobox
$table='Votre table';
$id_combo= 'votre ID'; //nom du champ de la table id
$libelle_combo='Votre libelle';// nom du champ de la table à afficher dans la combo

//-----------Elements facultatif à envoyer à la fonction--------------

$where =''; // condition optionnelle du select
$selected =''; //valeur de l'option sélectionnée
$class=''; // class CSS à appliquer à la combo
$style=''; //style html à appliquer à la combo

//--------------------------------------------------------------------
//----------- appel à la function dans la partie formulaire ----------
//--------------------------------------------------------------------

function_genere_select( $name,$table,$id_combo,$libelle_combo,$where,$selected,$class,$style);

// retour de la function id_combo
$id_combo = $_GET['id_combo'];
$SESSION[id_combo] = $_GET['id_combo'];
echo $SESSION[id_combo];

//--------------------------------------------------------------------
//------------------- function --------------------------------------
//--------------------------------------------------------------------

function function_genere_select ($name, $table, $id_combo, $libelle_combo, $where,$selected,$class, $style )
{
if(!isset($name) or !isset($table) or !isset($id_combo) or !isset($libelle_combo))
{
return false;
break;
}

//----------- REQUETE on sélectionne les données dans la bdd ---------

$requete = 'select '.$id_combo.', '.$libelle_combo.' from '.$table.' '.$where;
$result = mysqli_query($SQL,$requete);
echo $requete;echo"<br />";

//----------------- Affichage dans la combo --------------------------

echo"<center>";
echo'<FORM method "GET" NAME="$id_combo" action"">';
echo'<SELECT NAME="id_combo" onchange="form.submit()">';
echo"<option>-- Votre choix ---</option>";
while ($val = mysqli_fetch_array($result))
{
echo '<option value="'.$val[$id_combo].'"';
if($val[$id_combo] == $selected)
{
echo ' selected="selected" ';
}
echo '>';
echo $val[$libelle_combo];// affiche les données dans la combo
echo '</option>'."\n\r";
}

echo '</select>';
echo"</form>";
echo"</center>";

} //fin de la function

?>


Commenter la réponse de claude77260