MySQLTcl
Dans ce tutoriel vous allez apprendre a utiliser le paquage mySQLTCL.
Contents
Pré-requis
- La présence de la librairie MysqlTcl sur votre machine (si elle n'est pas installée, allez sur http://www.xdobry.de/mysqltcl/)
- Connaissance du language SQL
Pourquoi utiliser les bases de données sql ?
On pourrait bien évidement se poser la question de pourquoi utiliser les bases de données sql alors qu'on a beaucoup de fonction à notre disposition sur notre eggdrop. On peut par exemple utiliser les fichiers et donc se compliquer beaucoup moins la vie.
La réponse est simple. Personnelement, j'utilise les bases de données mySQL car je trouve le système facile, une fois qu'on a compris, l'utilisation reste hyper simple.
Après, vous avez la possibilité en utilisant des bases de données sql de pouvoir générer des statistiques plus facilement depuis votre site internet (je sais bien qu'il existe plusieurs façon pour générer des statistiques de ce genre, mais je pense que l'utilisation des bases de donnée sql est la meilleure solution), aussi, vous pouvez vous en servir pour faire un panel réservé aux personnes ayant accé a votre robot.
Bref, je ne sais encore quel délire vous pourrez réalisé avec l'utilisation de ces bases.
Comment utiliser les bases de données sql ?
Liste des fonctions MySQL
Le Package:MySQLTcl permet d'effectuer la plupart des opérations courante sur MySQL.

Voici la liste des commandes disponibles:
- mysqlconnect crée une connexion à une base de données MySQL
- mysqluse associe une connexion à une base de données
- mysqlsel effectue une requête select
- mysqlfetch retourne l'enregistrement suivant
- mysqlexec exécute une requête SQL (sauf select)
- mysqlquery exécute une requête SQL
- mysqlendquery libère le mémoire après une requête
- mysqlmap associe les résultats d'une requête à des variables
- mysqlreceive associe les résultats d'une requête à des variables sans utiliser mysqlsel
- mysqlseek avance vers un enregistrement
- mysqlcol renvoie des informations sur une colonne
- mysqlinfo renvoie des informations sur une base
- mysqlbaseinfo renvoie des informations sur une base
- mysqlping vérifie que la connexion est établie
- mysqlchangeuser change l'utilisateur de la base
- mysqlresult renvoie des informations sur le résultat requête en cours
- mysqlstate renvoie l'état d'une connexion
- mysqlclose ferme une connexion
- mysqlinsertid renvoie la dernière valeur d'un auto-incrément
- mysqlescape échappe les caractères spéciaux pour une requête
- mysqlautocommit change le mode de mysqlcommit
- mysqlcommit réalise les changements de la transaction
- mysqlrollback annule les changements de la transaction
- mysqlnextresult retourne l'enregistrement suivant
- mysqlmoreresult indique si d'autres enregistrements existent
- mysqlwarningcount renvoie le nombre de warnings
- mysqlisnull précise si une variable est null ou vide
- mysqlnewnull crée un objet null
- mysqlsetserveroption modifie des options serveur
- mysqlshutdown arrête la base de données
- mysqlencoding modifie l'encodage de la transaction
Code exemple
##############
# CONFIGURATION #
##############
# -> Login
set sql(login) "root"
# -> Mot de passe
set sql(pass) "pass"
# -> Nom de la base de donnée
set sql(db) "root"
# -> L'host a l'aquelle ce connecté
set sql(host) "localhost"
# -> Localisation de fichier mysql.sock
set sql(sock) "/tmp/mysql.sock"
###########
# PAQUETAGE #
###########
catch {package require mysqltcl}
#######
# CODE #
#######
#########
# CONNECT #
#########
proc service:connect {} {
set ::mysqlink [::mysql::connect -host $::sql(host) -user $::sql(login) -password $::sql(pass) -sock $::sql(sock)]
::mysql::use $::mysqlink $::sql(db)
}
###########
# DECONNECT #
###########
proc service:deconnect {} {
::mysql::close $::mysqlink;
unset -nocomplain ::mysqlink
}
Bon ben dans un premier temps, ont définit la configuration du script, soit les informations qui vont nous permettres de ce connecté a la base.
Ensuite, la ligne ci dessous "dit a l'interpreteur que l'on veut utilité le paquage mysqltcl", c'est a dire pouvoir utilisé les commandes utilisables par ce paquage.
catch {package require mysqltcl}
A noter que "catch" permet de parer les éventuelles érreur, soi de ne pas faire planter votre eggdrop au cas ou la librairie ne soit pas installer cher votre hébergeur.
Pour finir, on a les fonctions "connect" et "deconnect". Je ne voie pas ce que je peut expliquer, les commandes sont simple, cela fonctionne comme je l'ai mit dans la source, donc a vous de faire un effort de comprehension (en gros, je vais pas m'amuser a expliquer les deux lignes importante, car les mots-clefs veulent tout dire).
Jusqu'a présent, c'est bien, ont a la possibilité de ce connecté a une base de donnée. Nous allons voir maintenant comment vérifier des conditions, et ma fois s'amuser, car c'est un jeux d'enfant.
Copier dans un premier temps ce code par le biais de phpmyadmin :
--
-- Structure de la table `access`
--
CREATE TABLE `access` (
`id` int(4) NOT NULL auto_increment,
`pseudo` text NOT NULL,
`pass` text NOT NULL,
`grade` text NOT NULL,
`suspend` text NOT NULL,
`statut` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
--
-- Contenu de la table `access`
--
INSERT INTO `access` (`id`, `pseudo`, `pass`, `grade`, `suspend`, `statut`) VALUES
(1, 'DaV34', 'machin', '4', 'Off', 'On');
Bien, en gros, la, ont crée une table avec 6 colones qui sont les suivantes : id pseudo pass grade suspend statut.
Ici, je reprend un systeme d'authentification.
Il faut savoir que la colone grade sera un chiffre (afin de faciliter la gestion, en effet, ont peut imaginer que les helpeurs auront un access 1, les géo un access niveau 2 ...) et les commandes suspend et statut pourront contenir ou "On" ou Off" (en effet, pour savoir si quelqu'un est auth, si son access est suspendue ...
Treve d'explication, voila maintenant un code qui vous explique comment proceder pour votre systeme d'authentification :
##############
# CONFIGURATION #
##############
# -> Login
set sql(login) "root"
# -> Mot de passe
set sql(pass) "pass"
# -> Nom de la base de donnée
set sql(db) "root"
# -> L'host a l'aquelle ce connecté
set sql(host) "localhost"
# -> Localisation de fichier mysql.sock
set sql(sock) "/tmp/mysql.sock"
###########
# PAQUETAGE #
###########
catch {package require mysqltcl}
#######
# CODE #
#######
#########
# CONNECT #
#########
proc service:connect {} {
set ::mysqlink [::mysql::connect -host $::sql(host) -user $::sql(login) -password $::sql(pass) -sock $::sql(sock)]
::mysql::use $::mysqlink $::sql(db)
}
###########
# DECONNECT #
###########
proc service:deconnect {} {
::mysql::close $::mysqlink; unset -nocomplain ::mysqlink
}
########
# ISAUTH #
########
proc isauth {arg} {
service:connect
set res [::mysql::sel $::mysqlink "select statut from access where pseudo = '$arg' and statut = 'On'"]
service:deconnect
return $res
}
##########
# ISSUSPEND #
##########
proc issuspend {arg} {
service:connect
set res [::mysql::sel $::mysqlink "select statut from access where pseudo = '$arg' and suspend = 'On'"]
service:deconnect
return $res
}
############
# ISVALIDUSER #
############
proc isvaliduser {arg} {
service:connect
set res [::mysql::sel $::mysqlink "select pseudo from access where pseudo = '$arg'"]
service:deconnect
return $res
}
################
# ISVALIDPASSWORD #
################
proc isvalidpassword {pseudo pass} {
service:connect
set res [::mysql::sel $::mysqlink "select pseudo, pass from access where pseudo = '$pseudo' and pass = '$pass'"]
service:deconnect
return $res
}
########
# AUTH #
########
proc auth {arg} {
service:connect
::mysql::exec $::mysqlink "UPDATE `access` SET `statut` = 'On' WHERE pseudo = '$arg'"
service:deconnect
}
#######
# AUTH #
#######
bind msg - auth msg:auth
proc msg:auth {nick host hand arg} {
set pseudo [lindex $arg 0]
set pass [lindex $arg 1]
if { $pseudo == "" || $pass == "" } { puthelp "NOTICE $nick :Commande auth : /msg $::botnick auth <pseudo> <pass>"; return 0 }
if { ![isvaliduser $pseudo] } { puthelp "NOTICE $nick :$pseudo user inconnue !"; return 0 }
if { [isvalidpassword $pseudo $pass] } {
if { [issuspend $pseudo] } { puthelp "NOTICE $nick :Accés suspendu"; return 0 }
if { [isauth $pseudo] } { puthelp "NOTICE $nick :Vous êtes déjà identifié !"; return 0 }
puthelp "NOTICE $nick :Félicitation, vous êtes identifié"
auth $pseudo
} else {
puthelp "NOTICE $nick :Erreur, mot de passe incorrect."; return 0
}
}
