Shellnode
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment :
Display Star Wars Unlimited Ombres de la Galaxie : ...
Voir le deal

Le paquage mySQLTCL Voici un tutoriel sur l'utilisation du paquage mySQLTCL.

Shellnode :: Guides :: TCL

Aller en bas

Le paquage mySQLTCL
Voici un tutoriel sur l'utilisation du paquage mySQLTCL. Empty Le paquage mySQLTCL Voici un tutoriel sur l'utilisation du paquage mySQLTCL.

Message  Romeo Ven 8 Aoû - 18:32

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

Près requis :

* La présence de la librairie mySQLTCL sur votre machine (si elle n'est pas installer, aller sur : http://projet.exolia.net/index.php/2007/02/09/22-installation-mysqltcl)
* Connaissance du language SQL

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.

catch {package require mysqltcl}

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 :


##############
# 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
}

########
# ISAUTH #
########

proc isauth {arg} {
service:connect

return [mysqlsel $::mysqlink "select statut from access where pseudo = '$arg' and statut = 'On'"]

service:deconnect
}

##########
# ISSUSPEND #
##########

proc issuspend {arg} {
service:connect

return [mysqlsel $::mysqlink "select statut from access where pseudo = '$arg' and suspend = 'On'"]

service:deconnect
}

############
# ISVALIDUSER #
############

proc isvaliduser {arg} {
service:connect

return [mysqlsel $::mysqlink "select pseudo from access where pseudo = '$arg'"]

service:deconnect
}

################
# ISVALIDPASSWORD #
################

proc isvalidpassword {mot1 mot2} {
service:connect

return [mysqlsel $::mysqlink "select pseudo, pass from access where pseudo = '$mot1' and pass = '$mot2'"]

service:deconnect
}

########
# AUTH #
########

proc auth {arg} {
service:connect

mysqlsel $::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 mot1 [lindex $arg 0]
set mot2 [lindex $arg 1]
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 { [isvalidpassword $mot1 $mot2] } {
if { [issuspend $mot1] } { puthelp "NOTICE $nick :Accés suspendu"; return 0 }
if { [isauth $mot1] } { puthelp "NOTICE $nick :Vous êtes déjà identifier !"; return 0 }
puthelp "NOTICE $nick :Félicitation, vous êtes identifier"
auth $mot1
} else {
puthelp "NOTICE $nick :Erreur, mot de passe incorrect."; return 0
}
}


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'"]

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.

Romeo
Admin

Messages : 82
Date d'inscription : 28/07/2008
Age : 52
Localisation : Quebec

https://shellnode.forumactif.org

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

Shellnode :: Guides :: TCL

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser