Suru_Verbal
Messages postés10Date d'inscriptionlundi 4 juillet 2005StatutMembreDernière intervention22 juillet 2005
-
19 juil. 2005 à 16:06
Suru_Verbal
Messages postés10Date d'inscriptionlundi 4 juillet 2005StatutMembreDernière intervention22 juillet 2005
-
20 juil. 2005 à 16:40
Bonjour à tous !
Je réalise un petit projet en PHP avec une Base de Données MySQL.
J'utilise des formulaires et je voudrais savoir s'il est possible de récupérer les valeurs possibles d'un champ de type SET ou ENUM de la BD, afin de faire un menu déroulant proposant les diverses valeurs possibles.
Par exemple, j'ai une table dont voici le script SQL :
CREATE TABLE ma_table (
id int AUTO_INCREMENT NOT NULL,
ma_liste ENUM('choix1','choix2','choix3'),
PRIMARY KEY ( id ),
);
</TD>
</TD></TR></TBODY></TABLE>
et je voudrais alimenter une liste déroulante dans une page HTML sans avoir, au préalable, besoin de connaître le nombre de valeurs possibles de l'attribut "ma_liste" ni les valeurs possibles.
Dans ce cas, je n'ai mis que trois valeurs à "ma_liste" mais cela devient tout de suite plus gênant lorsqu'il y en a une bonne trentaine, ou lorsque l'on veut rajouter des valeurs possibles à "ma_liste", car dans ce cas il faudrait non seulement modifier la BD mais aussi le code source de la page HTML.
Je pense qu'il existe une manière de gérer cela dynamiquement...
Si quelqu'un la connaît, ce serait vraiment sympa de partager ses connaissances, car malgré mes recherches je n'ai pas encore trouvé !
davwart
Messages postés855Date d'inscriptionmardi 19 novembre 2002StatutMembreDernière intervention28 juillet 20091 19 juil. 2005 à 16:45
ben oui.. tu fais show columns ou "desc" sur ta table..et tu vas chercher la bonne colone ds le resultat...
puis tu parses la description
-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
Suru_Verbal
Messages postés10Date d'inscriptionlundi 4 juillet 2005StatutMembreDernière intervention22 juillet 2005 20 juil. 2005 à 16:40
Voici le code (qui marche) résolvant mon problème initial grâce aux pistes que vous m'avez fournies. Cependant, j'ai deux petits soucis que j'ai réussi à éviter en bricolant (j'attends d'ailleurs de votre part toute suggestion plus propre) :
//Pour obtenir les valeurs possibles d'un champ de type ENUM ou SET
// $multiple sert à savoir si on permete les sélections multiples (1) ou non (0)
function liste_dynamique($table,$champ,$multiple){
$sql = "SHOW COLUMNS FROM $table LIKE '$champ'";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
$data = mysql_fetch_assoc($req);
//traitement de la chaine
$tab = explode(",",$data['Type']);
//chaine pour l'affichage de la liste
if ($multiple == 1){
$liste = '<select name="'.$champ.'" size="4" multiple>';
}
else{
$liste = '<select name="'.$champ.'" size="1">';
}
$i=0;
while(!empty($tab[$i])){
//on elève les simple quote
//position de la première quote
$pos_deb = strpos($tab[$i],"'");
//position de la dernière quote
$pos_fin = strrpos($tab[$i],"'");
$valeur = substr($tab[$i],$pos_deb+1,$pos_fin-1);
/*
1er bricolage ("coup de cutter") : on enlève les simples quote accolés '' (dans le cas où l'on aavait rentré dans la BDD un mot avec un apostrophe, ex : 's\'exercer' --> l'antislash s'est "transformé" en une simple quote , je l'enlève donc avec cette condition (si vous voyez pourquoi, n'hésitez pas à me le dire...)
*/
$valeur = str_replace("''","'",$valeur);
/*
2ème bricolage ("coup de marteau") : pour la 1ère valeur possible du SET ou de l'ENUM, je n'arrive pas à enlever le quote final de la chaine, donc je le fais "manuellement
*/
if ($i == 0){
$valeur = substr($valeur,0,strlen($valeur)-1);
}
$liste .= '<option value="'.$valeur.'">'.$valeur.'</option>';
$i++;
}
$liste .= "</select>";
echo $liste;
}
Je pense qu'il pourrait être utile de rajouter des paramètres pour la liste déroulant notamment...
Je verrais cela plus tard...et j'attends vos suggestions !