Suite à piratage, l’article s’est effacé. J’essaie de reconstituer - mais cet article date de 2006 donc il est périmé.
[Journal La Mee Châteaubriant] Base de données MySQL , requêtes SQL, avec SPIP
Attention, ce sont là des découvertes personnelles. Mais il paraît que c’est très dangereux de faire cela, d’après le forum spip. A éviter, donc. On peut trouver en français une documentation sur Mysql
Voici quelques explications
Sauvegarde de la base de données
Avec SPIP, c’est tout simple.
– entrer dans l’espace privé, c’est à dire : http://www.journal-la-mee.fr/ecrire
– cliquer sur l’icône « maintenance du site »
– puis sur sauvegarder/restaurer la base
– puis sur sauvegarde compressée
et ça se fait tout seul !
On a alors le message : "La base a été sauvegardée dans tmp/dump/Accueil..(date)xml.gz (7 467 751 octets). Les fichiers sauvegardés sont :
* spip_articles
* spip_auteurs
* spip_auteurs_articles
* spip_auteurs_messages
* spip_auteurs_rubriques
* spip_breves
* spip_documents
* spip_documents_articles
* spip_documents_breves
* spip_documents_rubriques
* spip_forum
* spip_groupes_mots
* spip_messages
* spip_meta
* spip_mots
* spip_mots_articles
* spip_mots_breves
* spip_mots_documents
* spip_mots_forum
* spip_mots_rubriques
* spip_mots_syndic
* spip_petitions
* spip_rubriques
* spip_signatures
* spip_syndic
* spip_syndic_articles
* spip_types_documents
Base de données
Quand la base est ouverte on voit, à gauche, une colonne étroite.
On y trouve, en haut, l’identifiant (login)
Et juste en dessous : spip-articles
– Cliquer sur spip-articles
– Puis à droite sur « afficher »
– On voit alors apparaître la liste de tous les articles du site.
– On peut donc modifier : le numéro de l’article, la date, la rubrique où il est classé, etc.
– Faire ensuite « exécuter » (bas de page).
On peut, de même, modifier spip-rubriques
Intervenir sur un article précis
Cliquer à gauche sur la table spip_articles
Puis, en haut sur : sélectionner
et, dans le tableau qui se présente, indiquer le numéro de l’article
Ajouter des pages
Sans doute suis-je idiote, mais j’aime avoir des articles dans l’ordre. Mais j’arrive à un blocage. Imaginons que j’aie les pages :
5001
5002
5003
5004
5005
etc
Je voudrais faire une suite à l’article 5001, mais je n’ai pas envie que cette suite se trouve à la page 5006.
Alors je vais créer les pages :
(5001)
50010
50011
50012 etc
Pour faire cela :
1) ouvrir la base de données grâce à son adresse : http://...
2) à gauche on voit une colonne où il y a marqué, en haut, « spip_articles ». Cliquer sur « spip_articles »
puis, à droite, sur l’onglet bleu « insérer »
Il s’ouvre alors un tableau.
Dans la ligne id_article, en dessous de « valeur », mettre le numéro de page qu’on veut. Par exemple 50010
Puis, en bas de page, cliquer sur « exécuter »
et recommencer pour toutes les pages qu’on veut créer.
Mais attention, il paraît que ce genre de manipulation est dangereux ! Et au bout du compte c’est infernal quand on a beaucoup d’articles, il vaut donc mieux relier les pages avec une indication du genre : page suivante
Déplacer une photo
J’ai la photo 2260 qui se trouve dans l’article 5012
et je voudrais mettre cette photo dans l’article 1158
1) ouvrir la base de donné grâce à son adresse : http://...
2)à ? gauche on voit une colonne où il y a marqué, en haut, « spip_documents_articles ». Cliquer sur « spip_documents_articles » (note : cela a pu changer, quelquefois il s’agit de spip_documents_liens, mais c’est la même manipulation)
puis, à droite, sur l’onglet bleu « sélectionner »
3) Dans la fenêtre qui apparaît, compléter, en dessous de « valeur » :
– 2260 pour id_document
– 5012 pour id_article et cliquer sur « exécuter »
4) dans la fenêtre qui s’ouvre on retrouve 2260 et 5012, cliquer sur « modifier »
5) Dans la nouvelle fenêtre, modifier le numéro de l’article (au lieu de 5012, mettre 1158) et cliquer sur « exécuter » et c’est bon ! le document 2260 est passé de l’article 5012 à l’article 1158. On peut faire cela, plus facilement, ans l’espace privé de spip.
Voir ce que cela donne avec la table spip_documents_liens :
table spip_documents
En cliquant ensuite sur le petit crayon, on peut changer le document de place.
Articles lus plus de 1000 fois
Cliquer à gauche sur la table spip_articles
puis, en haut sur : SQL
et, dans le rectangle blanc, écrire la requete SQL suivante :
SELECT* FROM spip_articles
WHERE VISITES>1000
puis cliquer sur exécuter
Voir la liste des documents
Cliquer à gauche sur la table spip_documents
puis, en haut sur : sélectionner
Cliquer alors sur :
– id_document
– fichier
cliquer ensuite sur : exécuter (en bas de page)
On trouve alors la liste des articles (avec leur numéro et, à côté, les documents correspondants.
A propos des visites
On trouve des explications ici http://www.koakidi.com/spip.php?article279
Langage SQL, requêtes, insertion, mise à jour
C’est un peu dur au départ, mais on s’y fait.
Voici quelques requêtes SQL que j’ai glanées :
il faut d’abord
D’ABORD OUVRIR LA BASE DE DONNEES, cliquer par exemple (à gauche) sur spip_articles, puis, en haut sur le bouton SQL. Effacer ce qui y est déjà et y mettre ensuite l’une des requêtes ci-dessous
1.- Première requête :
SELECT id_article , visites
FROM spip_articles
WHERE 1
LIMIT 0, 30
Cela veut dire :
SELECTIONNER les colonnes id_article , visites
A PARTIR DE la table spip_articles
LORSQUE (=Where)il y a au moins un article
en affichant 30 réponses maxi
Attention : c’est marqué spip_articles et pas ’spip_articles’ .
On utilise une quote et pas une apostrophe ! Pour obtenir une quote il faut faire : AltGR+7 (le 7 qui est à la ligne supérieure du clavier, la quote se trouve à côté du è )
2.- Deuxième requête :
SELECT* FROM spip_articles WHERE VISITES>1000 Cela veut dire : SELECTIONNER tous les articles (l’étoile veut dire .... tous) A PARTIR DE la table spip_articles WHERE (LORSQUE) les visites sont supérieures à 1000
Ca donne tout un tableau, pas commode à consulter. On peut donc restreindre les choix. Voir la troisième requête.
3.- Troisième requête :
SELECT id_article, visites FROM spip_articles WHERE VISITES > 3000 LIMIT 0 , 40Cela veut dire : SELECTIONNER les colonnes id_article, visites A PARTIR DE la table spip_articles WHERE (LORSQUE) les visites sont supérieures à 3000, en affichant 40 réponses maxi
4.- Quatrième requête :
SELECT id_article, visites FROM spip_articles WHERE id_RUBRIQUE = 12 LIMIT 0 , 20Cela veut dire : SELECTIONNER les colonnes id_article, visites A PARTIR DE la table spip_articles WHERE (=LORSQUE) le numéro de la rubrique est 12, en affichant 20 réponses maxi
5.- Cinquième requête :
UPDATE spip_articles SET id_rubrique= 2 WHERE ID_ARTICLE IN(14, 27, 149)Cela veut dire : MODIFIER (=UPDATE) la table spip_articles EN METTANT (=SET) la rubrique n° 2 WHERE (LORSQUE) les articles sont dans la liste (14, 27, 149)
Cette requête fait que les articles 14, 27 et 149 sont dans la rubrique 2
6.- Sixième requête, avec le signe % :
UPDATE spip_articles SET id_rubrique= 3 WHERE titre LIKEOGM%Cela veut dire : MODIFIER (=UPDATE) la table spip_articles EN METTANT (=SET) la rubrique n° 3 WHERE (LORSQUE) le titre commence par OGM
Cette requête fait que les articles dont le titre commence par OGM seront dans la rubrique 3
Si on avait écrit : _ WHERE titre LIKE%OGM%_ on aurait mis dans la rubrique 3 les articles dont le titre contient le mot OGM
Si on avait écrit : _ WHERE titre LIKE%OGM_ on aurait mis dans la rubrique 3 les articles dont le titre se termine par le mot OGM .
Bien observer la place du signe %
7. Septième requête : remplacer un mot par un autre Dans les post-scriptum (ps) de mon site, je voulais remplacer ...mee.info... par ...mee.fr/bp J’ai utilisé la requête suivante :
UPDATE spip_articles SET ps= REPLACE (ps, ’mee.info’, ’mee.fr/bp ’) where id_article in(511, 512, 513,514)
Ce qui veut dire : Mettre à jour (update) la table spip_articles en modifiant ps il s’agit de remplacer, dans ps ’mee.info’ par ’mee.fr/bp ’ lorsque (where) les articles sont dans la liste 511, 512, 513,514
8. Huitième requête : Mettre un titre à une photo J’ai utilisé la requête suivante :
UPDATE ma_base.spip_documents SET titre= ’Tornade’ WHERE spip_documents.id_document=105 ;
Ce qui veut dire : Mettre à jour (update) dans ma_base, la table spip_documents et mettre (SET) le titre « Tornade » LORSQUE (where) le document porte le numéro. (bien entendu il faut remplacer ma_base par le nom exact de la base de données !) .... et puis on peut faire cela plus facilement dans l’espace privé de spip.
9. Neuvième requête : rechercher les documents ayant un titre vide J’ai utilisé la requête suivante
SELECT id_document FROM spip_documents WHERE ’titre’ = « »
Ce qui veut dire : Rechercher (SELECT) les documents A PARTIR DE (From) la table jour4hi_journal.spip_documents LORSQUE (where) le titre est vide
10. Dixième requête : changer les dates
- 1) Modifier toutes les dates de publication des articles en une seule opération : UPDATE spip_articles SET date=CURRENT_TIMESTAMP
- 2) Modifier toutes les dates de modification des articles en une seule opération : UPDATE spip_articles SET date_modif=CURRENT_TIMESTAMP
Mettre un titre, suite Le problème : j’avais 1800 documents sans titre, dans la table jour4hi_journal.spip_documents, et je voulais, pour chacun, mettre comme titre le contenu de la colonne ’fichier’. Voici la requête SQL :
UPDATE ’spip_documents’ SET ’titre’=’fichier’ WHERE ’titre’=« »
Ce qui veut dire : Mettre à jour (UPDATE) la table ’spip_documents’ en mettant ’titre’=’fichier’ lorsque le titre est vide.
- Supprimer des caractères Le problème : dans la table spip_documents, dans la colonne titre, j’avais des expressions du genre jpg/ma-photo.jpg et je voulais supprimer jpg/ et supprimer aussi .jpg
pour supprimer jpg/ j’ai écrit la requête suivante :
UPDATE spip_documents SET titre=SUBSTR(titre,5) WHERE titreLIKE ’jpg/%’
Ce qui veut dire : Mettre à jour la table spip_documents en substituant au titre, un titre commençant au 5e caractère lorsque le titre est du genre jpg/%
pour supprimer .jpg j’ai écrit la requête suivante :
UPDATE spip_documents SET titre= SUBSTR(titre, 1, length(titre)-4) WHERE titre LIKE%.jpg
Ce qui veut dire : Mettre à jour la table spip_documents en substituant au titre, un titre de longueur diminuée de 4 lorsque le titre est du genre %.jpg
length(titre) : c’est la longueur du titre le 1 indique la position de départ le 4 indique qu’il y a 4 caractères à supprimer
- 10. Insertions, insertions multiples Dans la colonne id_article, j’ai besoin d’ajouter les valeurs 22, 23 et 24. Voici la commande :
Cela veut dire : _ insérer, dans la table jour4hi_journal.spip_articles, à la colonne id_article les valeurs 22,23,24
Ceci m’a permis de faire des changements très rapides sur une soixantaine d’articles .
Ne pas oublier ...
Dans tous les cas, ne pas oublier de cliquer sur le bouton EXECUTER qui se trouve en dessous de la boite
Ne pas oublier non plus de mettre des quotes et pas des apostrophes
Attention à ne pas oublier le signe =, les parenthèses, etc.
On trouve des explications simples sur les fonctions SELECT, FROM, UPDATE, SET, ici : http://www.zone-webmasters.net/requetes-sql.php
et il y a des choses plus compliquées ici :
http://www.phpcs.com/tutorial.aspx?ID=491
ou celui ci : http://www.phpsecure.info/v2/article/InjSql.php
ou celui-ci en français

