12/09/2013, 15:52
Bonjour,
alors tout d'abord merci pour vos réponses:
CrazyCat:
Désolé, mais comme je te l'ai dis je suis un débutant en tcl et j'essaie de faire du mieux que je peux :/...
Sinon tu me demande:
cela ne change pas mon problème : la base de donnée se met bien à jour mais mon problème c'est l'annonce qui se fait autant de fois qu'on envoie l'information sur le canal $infochan. Moi je souhaiterai qu'il n’annonce qu'une seule fois lors de la mise à jour ensuite il ne doit plus annoncer.
mcdeffice:
Le code est magnifique comme cela, mais, comme je l'explique plus haut, si 10 utilisateurs ou robots mettent la même info en même temps, alors il y a 10 annonces identiques sur le canal $echochan, ce qui me fais me dire que je mets à jour à chaque fois la base de donnée aussi...
En gros voici le code comme je l'imagine (je mets les commentaires):
Voila je ne sais pas si je pense bien mais en tout cas la base de donnée se rempli bien, mais l'annonce sur $echochan ne s’arrête pas à une seule annonce si plusieurs envoie la même information. Donc comment je peux faire pour que la mise à jour de la base de donnée et l’annonce ne se fait qu'une seule fois pour la même information ?
A bientôt Nos...
alors tout d'abord merci pour vos réponses:
CrazyCat:
Citation :OMG, quelle horreur.
Désolé, mais comme je te l'ai dis je suis un débutant en tcl et j'essaie de faire du mieux que je peux :/...
Sinon tu me demande:
Citation :Pourquoi pas plutôt [llength $sql]?
cela ne change pas mon problème : la base de donnée se met bien à jour mais mon problème c'est l'annonce qui se fait autant de fois qu'on envoie l'information sur le canal $infochan. Moi je souhaiterai qu'il n’annonce qu'une seule fois lors de la mise à jour ensuite il ne doit plus annoncer.
mcdeffice:
Le code est magnifique comme cela, mais, comme je l'explique plus haut, si 10 utilisateurs ou robots mettent la même info en même temps, alors il y a 10 annonces identiques sur le canal $echochan, ce qui me fais me dire que je mets à jour à chaque fois la base de donnée aussi...
En gros voici le code comme je l'imagine (je mets les commentaires):
Code :
proc addinfo { nick uhost handle chan text } {
global infochan echochan
package require mysqltcl
# Creation d'un socket MySQL.
set mysql(HANDLE) [mysqlconnect -host $::mysql(HOSTNAME) -user $::mysql(USERNAME) -password $::mysql(PASSWORD) -port $::mysql(PORT) -db $::mysql(DB)];
# Verification du salon (si ce n'est pas le bon salon on passe à autre chose).
# Verification que 'name', 'age', et 'an' soit present dans 'text' sinon on passe à autre chose.
if {$chan != $infochan && [llength $text] != 3} { return }
set args [split $text " "]
set name [lindex $args 0];
set age [lindex $args 1];
set an [lindex $args 2];
# Prise des données depuis la base.
set SQL_SEL [mysqlsel $mysql(HANDLE) "SELECT `age`, `an` FROM dbase WHERE `name` = '$name'" -flatlist];
# Verification que SQL_SEL retourne une valeur pour 'age' et 'an'
if { [llength $SQL_SEL] == 2 } {
# Si SQL_SEL retourne une valeur pour 'age' et 'an', on ne continue pas on arrete là et on ferme le socket MySQL.
mysqlclose $mysql(HANDLE);
return 0;
}
# Sinon mise à jour de la base de donnée.
mysqlexec $mysql(HANDLE) "UPDATE releases SET `age` = '$age', `an` = '$an' WHERE `name` = '$name'";
# # Annonce sur les salons contenu dans la liste 'echochan'
foreach { chan } [split $echochan " "] {
putquick "PRIVMSG $chan :\[\!iNFO\]\:: $name \:: \[$age\] \[$an\] \[By $nick\] \[1s\]";
}
}
# Fermeture du socket MySQL.
mysqlclose $mysql(HANDLE);
}
Voila je ne sais pas si je pense bien mais en tout cas la base de donnée se rempli bien, mais l'annonce sur $echochan ne s’arrête pas à une seule annonce si plusieurs envoie la même information. Donc comment je peux faire pour que la mise à jour de la base de donnée et l’annonce ne se fait qu'une seule fois pour la même information ?
A bientôt Nos...