Tables SQL supplémentaires

Gestion de données SQL avec TableDATA

MàJ v0.4 - Trier - Voir table SPIP

Plugin pour gérer les données de vos tables SQL supplémentaires : voir, lister, ajouter, modifier.....

Tout d’abord, le but n’est pas de réécrire PhpMyAdmin en Spip, il y a d’ailleurs une Contrib pour lancer ce script à partir de SPIP. L’objet est de pouvoir facilement visualiser et éditer les tables complémentaires d’un site en production. Surtout si l’administrateur final du site n’est pas « très informaticien »

L’avantage de ce développement est :
-  tout d’abord d’être sous forme de plugin.
-  que l’on ne visualise pas les tables de SPIP. Cela pour éviter les erreurs de manipulation d’un administrateur non averti.
-  être intégré à l’interface d’administration du site SPIP
-  avoir une interface beaucoup plus simple qu’un PhpMyAdmin, toujours pour limiter les erreurs et éviter de casser le site.

En fait, une contrib « La gestion de tables SQL supplémentaires » m’a beaucoup plu tout en me laissant sur ma faim, on ne pouvait qu’ajouter. Alors je me suis lancé dans un module pour faire plus, puis dans la version plugin !

Présentation

Dans SPIP, on peut ajouter une table ("matable" par ex.) et utiliser des boucles pour la parcourir : {BOUCLE_a(matable)} et extraire ses champs avec des balises {#CHAMP1}, {#CHAMP2}, etc.

L’objet de cette contrib est de visualiser, ajouter et modifier le contenu de ces tables.

-  Nom  : TableDATA
-  Version : 0.40
-  Auteur : Christophe Boutin
-  Licence : GPL
-  Compatibilite SPIP : testé sur SPIP 1.9.1 & 1.9.2PR2
-  Site(s) exemple : www.studiofoveau.com , mais dans la partie privée :-)

(Existe un portage en version SPIP 2.0 également)

-  Testé sur ces navigateurs [1]

TestéPlateformeNavigateurVersion
oui windows Internet explorer 6.0
oui windows Firefox 2.0.0.1

Petit rappel sur SPIP

À partir de la version 1.9, on trouve une fonction très intéressante : Un extrait de la page des nouveautés de SPIP 1.9

Detection automatique de tables SQL et de jointures

Dans un squelette comportant BOUCLE_a(xxx), la table xxx peut être n’importe quelle table SQL connue du serveur SQL. SPIP demandera alors au serveur SQL de décrire cette table, ce qui lui permettra de compiler le squelette en interprétant toute balise #NOM comme un accès au champ xxx.nom s’il existe. Ces champs sont également repérés dans les critères des boucles.

Dans un squelette comportant BOUCLE_a(table table1 ... tablen), les tables supplémentaires seront vues comme des candidates à une jointure, à travers les champs homonymes. Des exemples plus concrets seront donnés dans la documentation.

C’est très simple à mettre en oeuvre et très pratique. Par exemple, j’utilise cela pour modifier facilement un tarif d’une galerie de vente. Cela peut également permettre de faire, en douceur, la bascule entre vos anciens scripts (back office) et une refonte du site (front office) avec SPIP.

À lire également : implémenter une nouvelle boucle (déplacé depuis dans NouvelleBoucle).

Installation

Installer le fichier joint, après l’avoir dézippé, comme tous les autres plugins, cf. http://www.spip.net/fr_article3396.html

Utilisation

Lancement du script :

Pointez l’icône « configuration » puis cliquez sur l’icone « gestion table SQL ».

Une liste des tables supplémentaires (n’ayant pas le préfixe des tables spip) est affichée, choisissez la table sur laquelle vous souhaitez travailler.

Lister les tables

L’administrateur dispose d’un bouton permettant d’afficher également les tables internes de SPIP.

Le script retourne une nouvelle page avec :
-  la liste des enregistrements (par groupe s’ils sont nombreux)
-  avec au dessous un formulaire d’ajout. (reprise de celui de Déesse A.)

Voir le contenu de la table

En cliquant dans le titre du champ, il est possible de trier par ordre croissant ou décroissant sur ces valeurs.

Modification des valeurs des champs

Pour modifier les valeurs d’un enregistrement, double-cliquez dessus, alors un formulaire d’édition s’affiche avec les valeurs actuelles. Pour que cette fonction soit active une clé primaire doit être définie. Elle peut être dans le format « numérique » ou « texte ». Dans la version actuelle, cette clé primaire doit être sur un champ unique.

Au retour, un message d’information affiche les conclusions de la commande. (Ok ou erreur).
Il est affiché tout en haut de la page.

On peut également le lancer en ligne de commande :
Pour gérer le contenu d’une table « magasin », il suffit de taper l’url suivante :

url = .../spip/ecrire/?exec=tabledata&table=magasin

Verrou de protection

Ce plugin est dynamique, il s’adapte à la structure de la table que vous avez créée.

La clé primaire de la table est utilisée pour pointer l’enregistrement à modifier. Le plugin ne permet pas de modifier sa valeur. (Modifier cette valeur pourrait être dangereux pour l’intégrité des données de votre application. Imaginez si cette valeur est déjà utilisée pour faire une jointure sur un autre élément de la base.)

En fonction de la clé primaire choisie, le script détermine les limitations nécessaires pour éviter les fausses manipulations. L’utilisateur en est informé.

Dernières mises à jour :

NOUVEAU : À partir de la version 2.0.5 pour SPIP 2.0, une nouvelle fonction apparaît : il est possible d’effacer un enregistrement.

-  Le 15 avril 2009 (v2.00) :

  • Portage sous SPIP 2.0
  • Correctif pour l’affichage des caractères accentués.
  • Voir l’article spécifique dédié à la version pour SPIP2. (TableData pour Spip 2)

-  Le 19 février 2007 (v0.40) :

  • Voir ou masquer les tables de spip pour les administrateurs.
  • Correctif liée à l’ajout du tri sur champ.

-  Le 18 février 2007 (v0.33) :

  • Ajout du tri sur chaque champ.
  • Correctif sur l’ajout pour reprendre les valeurs par défaut.

-  Le 16 février 2007 (v0.32) :

  • Ajout d’un ascenceur sur la liste des enregistrements dans le cas d’un nombre important de champs dans la table.
  • Correction d’affichage si la table est vide.

-  Le 12 février 2007 (v0.3) :

  • Les fonctions sont activées suivant le paramétrage de la clé primaire et information de l’utilisateur.
  • La modification des enregistrements ayant une clé primaire au format texte est prise en compte.

-  Le 7 février 2007 (v0.22) : Correction des url des icones.

-  Le 6 février 2007 :

  • Packagé en Plugin,
  • Ajout d’un bouton dans config,
  • Affichage de la liste des tables pour le choix initial

-  Le 21 octobre 2007 :

  • Mise en ligne d’un correctif de Marc VALLETEAU de MOULLIAC (merci de son retour)

La suite

Je me demande par exemple si :
-  j’ajoute la possibilité d’effacer un enregistrement ?
-  ou j’ajoute la recherche automatique d’un champ spécifique, genre « effacer » ENUM oui/non pour masquer les enregistrements devenus inutiles dans l’appli (effacer réellement s’est toujours délicat dans une base...)

Pour les experts, ou les curieux

Quelques commentaires faisant référence aux bases de données :

Nota : Que cela ne fasse pas peur aux débutants, il n’est pas nécessaire de tout comprendre pour que ça fonctionne

Ce plugin s’adapte à la structure de la table. Les fonctions sont activées suivant le choix de la clé primaire.
-  S’il n’y a pas de clé primaire : La modification n’est pas autorisée.

  • Il n’est pas sûr que l’on pointe de façon unique un enregistrement. Plusieurs enregistrements pourraient être touchés par la modification.

-  S’il y a plus d’un champ dans la clé primaire : La modification et l’ajout ne sont pas autorisées

  • Simplement parce que le code n’est pas encore adapté à ce cas. Alors pour éviter un bug ..

-  S’il y a une clé primaire sans auto-incrément : La modification est autorisée mais pas l’ajout

  • La clé permettra de pointer de façon unique l’enregistrement à modifier.
  • Mais lors de l’ajout, si l’on n’est pas vigilant, il pourrait y avoir une erreur de duplication de clé.

-  S’il y a une clé primaire avec auto-incrément : La modification et l’ajout sont autorisées

  • C’est le cas idéal. RAS

Comment distinguer les tables ?

Il faut faire un test du nom de la table. Elle ne doit pas débuter par le préfixe utilisé par SPIP. ( voir la variable $table_prefix description, par défaut « spip_ »).

Voir aussi
La Contrib PhpMyAdmin-PhpInfo

Notes

[1Navigateurs : J’attends votre retour d’expérience pour compléter le tableau avec les autres navigateurs, merci d’avance

Faites moi part de vos remarques, afin que je puisse améliorer TableDATA en fonction de vos besoins avérés...

Discussion

26 discussions

  • 2

    Bravo pour cette contrib, qui m’est très utile.

    Une suggestion, à moins que ça soit facile à faire par ailleurs, pouvoir exporter le contenu de la table en format CSV par exemple.

    • Regarde ci-dessus le lien vers la contrib phpmyadlin. La sauvegarde CSV est intégrée à ce programme.

      @+ Christophe

    • Bravo pour l’effort donné pour ce plug-in !

      J’ai remarqué quelques erreurs à l’affichage de champs dans les tables de spip

      Certains champs ne s’affichent pas tous.

      Pour l’export, Christophe, si tu prévois de l’incorporer, il serait aussi excellent de pouvoir

      Importer les données dans les tables.

      Merci encore pour le plug-in !

    Répondre à ce message

  • 1
    Chili Palmer

    Si j’ai bien compris, ce plug-in permet l’ajout de champs autre que les traditionnels sous-titre, surtitre... !!!
    Mais est t’il compatible avec spip 1.9.2 ?

    • Bonsoir, Ce n’est pas tout à fait cela.

      Vocation première : gérer les tables que l’on a ajoutées à SPIP. (pour lister un catalogue de CD, un tarif par exemple, ...)

      Eventuellement, on peut également voir et modifier le contenu des tables de SPIP, mais attention aux fausses manip. Dans ce cas, vous pourrez accéder également à vos nouveaux champs.

      Je l’ai fait tourné sous la version 1.9.2 PR 2 [8749] sans problème (un aléa avec les caractères accentués, très prochainement corrigé)

      @+ Christophe

    Répondre à ce message

  • 6

    Super ce plugin !
    Bravo et surtout un grand merci !
    Personnellement, un petit plus qui serait super :
    pouvoir trier les affichages en cliquant sur le libellé d’une colonne.
    En tout cas, ce plugin m’est très utile !

    • Merci. Et pour votre idée, le tri, c’est pourtant une évidence ! Je vais donc l’ajouter rapidement.

      Je le demande toujours à mes collègues développeurs et là c’est moi qui ne le met pas. Je vais remédier à cela et dès que c’est fait, je mets en ligne la version.

      @+ Christophe

    • Mais que demande le peuple ? :-)
      Bon code !

    • Bonjour Eric,

      Ca y est, tu peux essayer la version 0.33 pour voir le tri sur les champs...

      @+ Christophe

    • Salut Christophe.
      Merci, je viens d’essayer et j’ai une petite erreur :

      Warning : Missing argument 5 for requete_tabledata() in /mnt/135/free.fr/f/c/4montagnes/plugins/tabledata/exec/tabledata.php on line 219

      Tant que j’y suis, je te fais part de petites observations ?

      -  y aurait-il moyen de pouvoir élargir la visualisation de la table (quand beaucoup de champs et larges, l’affichage fait rikiki, même en interface élargie)
      -  pouvoir utiliser des mots-clés : je pense que je vais devoir passer par le plugin mot-clés partout ?

      Merci encore.

    • rapidement,

      j’ai vu l’erreur, c’est corrigé, je mets en ligne ce soir.

      @+ chb

    • Suite aux demandes faites sur le forum, vous trouverez de nouvelles fonctions :

      -  Trier les champs à l’affichage

      -  Voir les tables SPIP (Pour les administrateurs uniquement)

      @+ Christophe

    Répondre à ce message

  • 1
    Madrilene

    Bonjour
    tout d’abord merci et bravo pour ce plug-in !

    Imaginons qu’on soit dans le cas idéal avec clé primaire auto-incrémentée, est ce qu’il serait possible, dans le cas de saisies répétitives (donc avec des valeurs de champs listables), d’envisager un systeme ergonomique et un peu automatisé ?

    Avoir une interface où on aurait au préalable

    identifié en liste les valeurs d’un champs précis.

    on isole une ligne référence
    qui porte la clé primaire et tous les champs de la table dont celui qui a des options avec mettons une valeur par défaut)

    là si on veut rentrer toutes les valeurs de la liste :
    * on a qu’a coché un bouton « tout » et automatiquement sont générés les x lignes qui prennent en compte toutes les valeurs d’options listées du dit champ en gardant les autres colonnes de la table avec les même valeurs que la ligne référence

    * ou on fait une liste des valeurs d’options qui nous interessent, et ne sont générés que les y lignes correspondant a ces valeurs ?

    Deuxieme étape (enfin bon là je reve un peu les yeux ouverts)
    la possibilité de générer automatiquement tous les crosiement possibles entre les différentes valeurs d’options de PLUSIEURS champs d’une même table et apres de générer automatiquement les lignes.

    Je suis vraiment novice en sql et structure des bases de donnée, donc si il y a une contravention technique (probleme d’incrémentation ou autre) à ma demande, faut m’excuser.

    Merci

    • Je n’ai pas bien compris quel est votre objectif.

      Peut-être que l’utilisation de champs de type ENUM (liste de valeurs possibles) et de déclaration de valeurs par défaut puisse être une piste de solution (à voir).

      « la possibilité de générer automatiquement tous les crosiement possibles entre les différentes valeurs d’options »

      Une requête sans jointure sur 2 tables permet de croiser (mélanger) tous les champs
      select table1.texte1, table2.texte2 from table1, table2;
      ou une astuce :
      select a.champ1, b.champ2 from table as a, table as b;
      permet de croiser les valeurs.

      @+ Christophe

    Répondre à ce message

  • 1

    Très bonne initiative et bravo à l’auteur du greffon !

    Serait-il possible de faire apparaître les tables de spip malgré tout ? Cela me serait très utile ;-)

    • Merci,

      Concernant votre besoin, il me semble risqué de modifier le contenu des tables de SPIP. Mais pourquoi pas, si on le fait en connaissance de cause.

      Une proposition :
      -  Affichage par défaut, limité comme actuellement
      -  Et ajouter des boutons si l’utilisateur est administrateur pour :

      • autoriser l’affichage des tables de spip,
      • autoriser la modification des tables de spip
      • (l’ajout est-il nécessaire dans ces tables ?)

      J’attends d’autres avis avant de faire des modifications.

      Attention actuellement, le plugin n’est pas prévu (côté mise en forme) pour afficher des tables avec de nombreux champs... Il faudra attendre les évolutions...
      Il est surtout destiné à mettre facilement à jour des tables légères comme des tarifs par exemple, mais ne bridons pas votre imagination...

      Avez-vous regardé la Contrib PhpMyAdmin-PhpInfo ?

      @+ Christophe

    Répondre à ce message

  • 1

    Bonjour,

    Je viens de tester ce plugin. Voici un retour d’un utilisateur « lamda ».

    Il serait judicieux de placer un lien vers un article décrivant la création des tables. J’ai au moins appris ça mais ce fut laborieux.

    Petit bug (je crois) : lorsque la table est vide, on a droit à un joli message d’erreur. Le formulaire d’ajout étant présent et fonctionnel, le remède est aisé mais ce serait mieux s’il n’apparaissait pas !

    • Pour le petit bug : j’ai ajouté un test pour corriger le pb, Cf version 0.31.

      « création des tables » Ce matin j’ai proposé la rédaction d’un tel article. Vous me confortez donc dans mon idée. Je m’y mets de ce pas.

      Quel outil avez vous utilisé ? PhpMyAdmin ?

      @+ Christophe

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom