Difference between revisions of "MySQLTcl"

From Base de connaissances eggdrops & TCL
Jump to: navigation, search
 
Line 200: Line 200:
  
 
bind msg - auth msg:auth
 
bind msg - auth msg:auth
proc msg:auth {nick host hand arg}{
+
proc msg:auth {nick host hand arg} {
 
set mot1 [lindex $arg 0]
 
set mot1 [lindex $arg 0]
 
set mot2 [lindex $arg 1]
 
set mot2 [lindex $arg 1]
if { $mot1 == "" ||$mot2 == "" } { puthelp "NOTICE $nick :Commande auth : /msg $::botnick auth <pseudo> <pass>"; return 0 }
+
if { $mot1 == "" || $mot2 == "" } { puthelp "NOTICE $nick :Commande auth : /msg $::botnick auth <pseudo> <pass>"; return 0 }
 
if { ![isvaliduser $mot1] } { puthelp "NOTICE $nick :$mot1 user inconnue !"; return 0 }
 
if { ![isvaliduser $mot1] } { puthelp "NOTICE $nick :$mot1 user inconnue !"; return 0 }
 
if { [isvalidpassword $mot1 $mot2] } {
 
if { [isvalidpassword $mot1 $mot2] } {

Revision as of 22:57, 25 November 2007

Dans ce tutoriel vous allez apprendre a utiliser le paquage mySQLTCL.

Près requis :

Pourquoi utilisé les bases de données sql ?

Ont pourraient bien évidement ce poser la question de pourquoi utilisé les bases de donnée sql alors qu'on a beaucoup de fonction a notre disposition sur notre eggdrop, aussi, ont peut utiliser les fichiers et donc ont ce complique beaucoup moins la vie.

La réponse est simple. Personnelement, j'utilise les bases de données mySQL car je trouve le systeme 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 utilisez les bases de données sql ?

Maintenant que vous avez une première aproche de l'utilité de l'utilisation de ces bases, nous allons voir comment les utilisez.
Je vais donc m'appuyer sur l'exemple ci-dessous pour tout vous expliquez.

##############
# 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 [mysqlconnect -host $::sql(host) -user $::sql(login) -password $::sql(pass) -sock $::sql(sock)]
	mysqluse $::mysqlink $::sql(db)
}

###########
# DECONNECT #
###########

proc service:deconnect {} {
	mysqlclose $::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.
[code]catch {package require mysqltcl}[/code]A noter que "catch" permet de parrer 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, ont 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 :

Voila un code qui vous permet d'utiliser la commande /auth sur votre eggdrop.


Ce tutoriel s'arrête la pour l'instant, je pense que je le completerai par la suite.
Le systeme d'auth est loin d'être finie, je vous laisse le soin de crée des conditions, crée une commande pour ajouter un access ...

Si vous connaissez le language sql et que vous avez a peut prêt le code et les quelques explications, il ne devrait pas y avoir de probleme.


Quelques indications :
return [mysqlsel $::mysqlink "select pseudo, pass from access where pseudo = '$mot1' and pass = '$mot2'"]</source> J'ai utiliser la commande return car ce qui est entre crochet vous renvoie 1 si la condition est valide et 0 si elle est pas valide.
En tcl, plustot que de faire :

if { [machin] == 1 } { ... }

ou

if { [machin] == 0 } { ... }

ont fait :

if { [machin] } { ... } # Pour [machin] == 1
# et 
if { ![machin] } { ... } # Pour [machin] == 0



Voici un code qui vous permettra d'afficher l'ensemble de vos access :

#########
# SQLTEST #
#########

# Il vous faudra taper .afficher en dcc chat pour que cette commande fonctionne
bind dcc - afficher dcc:afficher
proc dcc:afficher {hand idx arg} {
	service:connect
	mysqlsel $::mysqlink "SELECT * FROM `access` ORDER BY id"
	if {[mysqlresult $::mysqlink rows] ne 0} {
		while {[set row [mysqlnext $::mysqlink]] != ""} {
                  putlog "id : [lindex $row 0]"
                  putlog "pseudo : [lindex $row 1]"
                  putlog "pass : [lindex $row 2]"
                  putlog "grade : [lindex $row 3]"
                  putlog "suspend : [lindex $row 4]"
                  putlog "statut : [lindex $row 5]"
	        }
        }
    service:deconnect
}





Je reste entierement a votre disposition sur le forum pour toute demande d'aide. Si une sujet n'est pas traité, n'hésitez pas.