Function construction comboxbox php

Messages postés
37
Date d'inscription
dimanche 8 août 2010
Dernière intervention
8 octobre 2016
- - Dernière réponse : claude77260
Messages postés
37
Date d'inscription
dimanche 8 août 2010
Dernière intervention
8 octobre 2016
- 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
23628
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2018
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
37
Date d'inscription
dimanche 8 août 2010
Dernière intervention
8 octobre 2016
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
23628
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2018
-
Commenter la réponse de claude77260
Messages postés
37
Date d'inscription
dimanche 8 août 2010
Dernière intervention
8 octobre 2016
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
37
Date d'inscription
dimanche 8 août 2010
Dernière intervention
8 octobre 2016
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

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.