Je ne comprends pas quelle partie de ton ancien code tu essaies de reviser la.
Concernant le type de colonne (COLUMN_TYPE) on l'a déjà recupéré et mis dans l'index 'type' du tableau.
Je ne comprends pas quelle partie de ton ancien code tu essaies de reviser la.
Concernant le type de colonne (COLUMN_TYPE) on l'a déjà recupéré et mis dans l'index 'type' du tableau.
Je comprends bien que je ne me fais pas comprendre.
Mais c'est je pense du à ma partielle incompréhension du code.
En se basant sur le code que tu m'as donné ci dessus pour faire afficher les commentaire SQL en TD Title des titres de colonnes, je souhaiterais maintenant pour finaliser juste savoir comment refaire sortir les données en questions pour chaque fiche...
Comment afficher le contenu de mes champs en utilisant ce code ?
Que je puisse comme avant avoir le contenu des enum, le contenu des variables par défaut, etc...
![]()
ahhh j'ai compris :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 $result = mysql_query("SELECT COLUMN_NAME, COLUMN_TYPE, DATA_TYPE, COLUMN_COMMENT, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table'"); while ($row = mysql_fetch_array($result)) { $col = $row['COLUMN_NAME']; $tblInfoColum[$col]['comment'] = $row['COLUMN_COMMENT']; $tblInfoColum[$col]['default'] = $row['COLUMN_DEFAULT']; $tblInfoColum[$col]['type'] = $row['DATA_TYPE'] if ($row['DATA_TYPE'] == 'enum') { $enum = substr($row['COLUMN_TYPE'], 6 , -2); $enum = str_getcsv($enum, ',', "'"); $tblInfoColum[$col]['enum'] = $enum; }
Evidemment on ne répète pas chaque 'select', on fait une boucle (je ne met pas de fonction pour ne pas surcharger l'explication) :
Par contre avec tes textarea je ne vois pas bien ce que tu veux faire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 $tblColonnes = array('Dispo' , 'Type' , 'Etat', 'Ref'); foreach ($tblColonnes as $colonne) { if (!isset($tblInfoColum[$colonne])) { exit('Colonne ' . $colonne . ' non définie'); } elseif ($tblInfoColum[$colonne]['type'] == 'enum') { echo '<select name="' . $colonne . '" />'; foreach ($tblInfoColum[$colonne]['enum'] as $value) { $value = htmlspecialchars($value); echo '<option value="' . $value . '">' . $value . '</option>'; } echo '</select>'; } }
Oula, tout change...
Autant je comprenais à 60% le code précédent, autant la, je ne dépasse pas les 15%.
En fait, j'ai mis cela pour pouvoir obtenir les variables des champs remplis.
Voici le formulaire tel qu'il est aujourd'hui :
Les bénévoles référencent un à un les lot en doublons, et cela se rajoute dans la base SQL à chaque insertion.
Sur le code actuel, cela me sort à présent 4 enum sans rien dedans :
![]()
Tu pourrais me donner l'export de ta table ?
Ca serait plus facile.
-=> Export SQL
![]()
J'avais un peu raté mon découpage, ce qui provoquait un apostrophe baladeur mais sinon ça marche :
Par contre tu fais un abus d'enum.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 $connexion = mysql_connect("localhost", "root", ""); $result = mysql_query("SELECT COLUMN_NAME, COLUMN_TYPE, DATA_TYPE, COLUMN_COMMENT, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'destock'"); while ($row = mysql_fetch_array($result)) { $col = $row['COLUMN_NAME']; $tblInfoColum[$col]['comment'] = $row['COLUMN_COMMENT']; $tblInfoColum[$col]['default'] = $row['COLUMN_DEFAULT']; $tblInfoColum[$col]['type'] = $row['DATA_TYPE']; if ($row['DATA_TYPE'] == 'enum') { $enum = substr($row['COLUMN_TYPE'], 5 , -1); $enum = str_getcsv($enum, ',', "'"); $tblInfoColum[$col]['enum'] = $enum; } } $tblColonnes = array('Dispo' , 'Type' , 'Etat', 'Ref', 'Date', 'Donateur', 'Commentaire', 'Collection', 'Acqui', 'Valorisation'); foreach ($tblColonnes as $colonne) { if (!isset($tblInfoColum[$colonne])) { exit('Colonne ' . $colonne . ' non définie'); } elseif ($tblInfoColum[$colonne]['type'] == 'enum') { echo '<select name="' . $colonne . '" />'; foreach ($tblInfoColum[$colonne]['enum'] as $value) { $value = htmlspecialchars($value); echo '<option value="' . $value . '">' . $value . '</option>'; } echo '</select>'; } elseif ($tblInfoColum[$colonne]['type'] == 'text') { echo '<textarea name="' . $colonne . '" />?</textarea>'; } }
Tu qui as en tête une maintenance facile de ton appli, ce n'est pas ce qu'il te faut.
Quand tu as des choix fixes, par exemple Homme/Femme, tu peux utiliser un Enum.
Quand tu as des catégories, que tu vas donc sûrement faire évoluer il vaut mieux rester sur un modèle relationnel :
Tu crées une table "type" avec 2 colonnes :
type_id - type_nom
1 - Jeu
2 - Application
3 - Documentation
...
Et dans ta table "destock" tu mets l'id du type et non plus son nom entier.
Pour rassembler les deux tables quand tu veux lire toutes les infos, une jointure
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT * FROM destock JOIN type ON destock.type_id = type.type_id
Pour faire ta transition vers cette solution, une fois que tu as créé ta table type, tu ajoutes une colonne "type_id" de type entier dans ta table destock et tu executes :
Ta colonne type_id va recuperer tous les bons id (a condition que les noms soient bien identiques dans les deux tables) et tu peux supprimer ta colonne "type" dans destock.
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 UPDATE destock JOIN type ON destock.type = type.type_nom SET destock.type_id = type.type_id
L'avantage immédiat c'est que pour lister les choix de "type" possibles, il suffit de lire la table "type".
Merci de ton explication, néanmoins, cela semble un peu dépasser mes compétences. J'ai essayé, mais je pense qu'il faut me cantonner à un pb à la fois.
Humm, la fonction ne semble pas reconnue par mon éditeur HTML et le test me donne :
Fatal error: Call to undefined function str_getcsv() in /Destock/saisie.php on line 20![]()
En effet, elle n'est pas présente dans package PHP. Quand tu n'est pas sure faire un simple phpinfo() ou vérifie ta conf.
Pour bypasser ce problème, il ne te reste plus qu'à soit mettre à jour le serveur (si tu peux) autrement il va falloir que tu parse toi même.Fatal error: Call to undefined function str_getcsv() in /Destock/saisie.php on line 20
Tu peux parser avec explode()
Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $contenu_a_parse = "piece1;;piece2;;piece3;;piece4;;piece5;;piece6"; $array= explode(';;', $contenu_a_parse); echo $pieces[0]; // piece1 echo $pieces[1]; // piece2
Merci de votre aide, mais encore une fois, je ne sais pas quoi "parser" ...
Partager