Php mySQL, comment modifier et recuperer le champs ENUM

Eléphanteau du PHP | 23 Messages

19 nov. 2005, 02:20

bonjour,

je cherche à réaliser une base de donnée constitué principalement de champs ENUM
grace à phpMyAdmin je peus creer sa structure et entrer les valeurs possible pour les champs ENUM:
'a','b','c'

1)
maintenant j'aimerai recupérer ces champs et les formater avec php pour afficher un menu deroulant dans une page web...les entité du menu déroulant etant : a, b et c...

2)
ensuite j'aimerai avoir la possibilité d'ajouter la valeur 'c' aux valeur possible pour mon champs ENUM.
existe t il pour cela une fonction mySQL ou suis-je obligé de recupérer les champs, et de modifier la structure de mon champs ENUM avec un alter ???
le but est de faire ca en php bien sur

quelqu'un pourrait-il me donner des pistes pour mes deux problèmes merci beaucoup

ViPHP
ViPHP | 649 Messages

19 nov. 2005, 04:15

PhpMyAdmin, c'est un logiciel qui fait des requête sql que nous lui demandons de faire. Il les fait à partir de php, à partir des informations qu'on lui donne via des formulaires. Donc, tout ce qu'on peut faire avec phpmyadmin, on peut le faire nous même en php.

Tu veux récupérer les champs? rien de plus simple, tu fais un SELECT *, ensuite, tu fais une boucle avec while et la fonction mysql_fetch_array() pour mettre de l'ordre dans tout ça:
<?
//Connexion et tout le tralala
mysql_connect("localhost", "root", "");
mysql_select_db("database");

$retour = mysql_query("SELECT * FROM table");//On exécute la requête sql et on récupère le résultat dans $retour

         while ($donnees = mysql_fetch_array($retour))
         {
         //Tes données sont utilisables ici sous cette forme : $donnees['champ']
         }

mysql_close();
?>

Pour ton deuxième problème, je comprends pas vraiment où tu veux en venir. Mais, si tu veux ajouter une entrée, c'est un INSERT INTO, si tu veux modifier une entrée, un UPDATE, si tu veux en supprimer une, un DELETE *. Tu dis que tu veux ajouter c au valeur possible du enum. Donc, si je comprends bien (ce dont je ne suis pas sur :P ), tu veux ajouter c à la valeur existante. Donc, la valeur a deviendrait ac.

Si c'est cela, tu dois utiliser un UPDATE et updater la valeur précédente que tu auras récupérer avec un SELECT * pour anciennevaleur + c

Par exemple, tu veux updater les a pour ac:
<?
//Connexion et tout le tralala
mysql_connect("localhost", "root", "");
mysql_select_db("database");

$retour = mysql_query("SELECT * FROM table WHERE enum='a'");//On exécute la requête sql et on récupère le résultat dans $retour

         while ($donnees = mysql_fetch_array($retour))
         {
         $ancien_enum = $donnees['enum'];
         $nouvel_enum = $ancien_enum . 'c';
         mysql_query("UPDATE table SET enum='nouvel_enum' WHERE enum='$ancienenum'");
         }

mysql_close();
?>

Si j'ai bien pigé, ça devrait convenir... y'a seulement que ma concaténation dont je suis pas sur, je vais vérifier, je corrige si je me suis trompé :wink:
Image

Mammouth du PHP | 1885 Messages

19 nov. 2005, 04:21

Bonjour,

Voici un extrait de phpMyAdmin:
<?php
$type = "ENUM('He''lo','Bonjour')";

if (preg_match('@^(set|enum)\((.+)\)$@i', $type, $tmp)) {
        $tmp[2]       = substr(preg_replace('@([^,])\'\'@', '\\1\\\'', ',' . $tmp[2]), 1);
        $type         = $tmp[1] . '(' . str_replace(',', ', ', $tmp[2]) . ')';
}
echo $type;
?>
Tu peux essayer de travailler avec ça :)
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

ViPHP
ViPHP | 649 Messages

19 nov. 2005, 04:25

oups! j'avais pas compris la question.. je vais supprimer mon ancien post pour pas mêler personne
Image

Eléphanteau du PHP | 23 Messages

19 nov. 2005, 12:24

Merci pour la piste :)

Voici au final le script que j'ai développé et qui fonctionne :ordi: :
<?php
mysql_connect ('localhost', 'root', '');
mysql_select_db ('test');

$query = 'DESCRIBE `te`';
$retour = mysql_query ($query);
while ($donnees=mysql_fetch_array ($retour)) {
  // On test ici le type de champs pour savoir si c'est un enum. Si on connaît les types de chaque champs, on peut également tester les nom des champs s'appelant 'Field' dans le retour de la requête (accessible ici par $donnees['Field'])
  if (preg_match('!enum(.+)!', $donnees['Type'])) {
    $enum = preg_replace ('!^enum\((.+)\)$!', '$1', $donnees['Type']);
	$enum = str_replace ("'", "", $enum);
    $enum = explode (',', $enum);
	//print_r ($enum);
	echo '<select name="select">';
	foreach ($enum as $valeur) {
	  echo '  <option value="' . $valeur . '">' . $valeur . '</option>';
	}
	echo '</select>';
  }
}
mysql_close();

?>
Et si je veux rajouter une valeur d'énumération, je dois passer par une requête SQL avec un ALTER du style :

Code : Tout sélectionner

ALTER TABLE `te` CHANGE `bidule` `bidule` ENUM( 'chose', 'truc', 'ouais', 'caca', 'prout' ) DEFAULT 'chose' NOT NULL
oups! j'avais pas compris la question.. je vais supprimer mon ancien post pour pas mêler personne
Pas bien grave, merci quand même :lol:

Petit nouveau ! | 5 Messages

06 févr. 2006, 20:29

j'ai tester le code que vous avez fait je l'ai adapté au mien et tout fonctionne
mais e voudrais afficher un seul champs
car la cela affiche tout les champs
comment faire svp
je pense que c'est dans le describe que cela s'affiche mais je n'en suis pa sur