Comment interdire une suppression MYSQL avec un Trigger

par Jean-françois JOLY le mar.29, 2010, dans Developpement Web

Récemment il s’est posé à moi une problématique très spécifique : Interdire une suppression dans une table qui est potentiellement consultable par plusieurs sources différentes. Bien sur ces sources ont toutes le maximum de droits et peuvent donc effectuer des requètes de suppression. Il se trouve que mystérieusement, des enregistrement de la table disparaissent tous les soirs … Il faut donc trouver une solution pour interdire la suppression dans cette table sans changer les droits. La solution la plus logique est d’utiliser un trigger pour interdire la suppression. Bien sur, sous oracle ou sql server, il aurait suffit de faire un simple RAISERROR u peu de cette manière :

1
2
3
4
5
6
CREATE TRIGGER forbidden_delete BEFORE DELETE ON matable   
FOR EACH ROW    
BEGIN     
RAISERROR ('Suppression interdite sur cette table', 16, 1);    
ROLLBACK TRANSACTION;
END;

Seulement voilà, je ne travaille pas sur du oracle ou du sql server, mais sur du mysql et RAISERROR ça n’existe pas (enfin à ma connaissance) sur la version 5.0.84. Du coup il faut trouver une alternative simple. Après moultes recherches, l’alternative existe : Pour faire échouer la requète de suppression, il faut faire planter le trigger. Si le trigger plante, la requète ne s’effectue pas. Qu’à celà ne tienne, voilà un excellent moyen de faire planter un trigger :

1
2
3
4
5
6
7
8
DELIMITER //
DROP TRIGGER IF EXISTS forbidden_delete//    
CREATE TRIGGER forbidden_delete BEFORE DELETE ON matable
FOR EACH ROW
BEGIN
SELECT 'a' INTO @toto;
SELECT 'b','c' INTO @toto;
END;//

A chaque delete sur la table matable, la requète de suppression va lamentablement échouer car le trigger va échouer.
Voilà c’était l’astuce du jour en espérant qu’elle soit utile à quelqu’un ;-) .

2 Commentaires :, , , , , suite...

Une offre d’emploi qui donne envie

par Jean-françois JOLY le fév.19, 2010, dans Developpement Web

Je consultais mes messages non lus sur viadéo, quand je suis tombé sur un message avec une offre d’emploi assez excellente. Bon actuellement je ne suis pas sur Toulon et mon emploi actuel prend une tournure intéressante, ce qui ne me donne pas trop envie de le quitter. mais du coup pour les gens cherchant un emploi l’offre est par ici :

image

http://www.cobalink.com/cobadevcontest/

Bonne chance aux futurs candidats ^^.

Laisser un commentaire :, , , , , suite...

La sélection des enregistrements NULL avec MySQL

par Jean-françois JOLY le fév.16, 2010, dans Developpement Web

Peut être qu’un jour il vous est arrivé d’avoir besoin de faire une sélection dans une table et de sélectionner tous les champs sauf telle ou telle valeur.
Par exemple imaginons que vous ayez une table « Voitures » avec un champs « Couleur » qui par défaut vaut Null (par exemple à un moment T on ne connait pas la couleur). Maintenant vous voulez récuppérer toutes les voitures qui ne sont pas potentiellement vertes.
Le premier réflexe consisterait à écrire le code SQL suivant :

1
2
3
SELECT * 
FROM Voitures 
WHERE Couleur!='Vert';

Malheureusement, avec ce code, vous n’auriez pas les voitures dont la couleur est NULL. C’est plutôt amusant mais si on écrit la requète suivante :

1
SELECT IF(NULL!="bla bla",'Vrai','faux')

Si vous l’exécutez, vous allez trouver … faux !!! Plutot amusant et cause d’erreurs.
Pourquoi est ce que le test donne faux ? Je ne sais pas vraiment, je suppose que c’est du au fait que, tester la condition avec quelque chose qui n’existe pas est impossible, et que donc le résultat ne peut être que « faux ». Il faut donc penser lors de ce genre de test à utiliser IS NULL pour ne pas oublier des enregistrements :

1
2
3
SELECT * 
FROM Voitures 
WHERE Couleur!='Vert' OR Couleur IS NULL;

Et là vous aurez toutes les voitures potentiellement pas vertes.

Laisser un commentaire suite...

Le SDK windows mobile 6.5 est sorti

par Jean-françois JOLY le jan.24, 2010, dans Developpement Web

Juste un petite news pour annoncer la sortie toute fraiche du dernier SDK pour windows mobile. C’est amusant car windows mobile 6.5 est sorti quand même depuis un petit moment déjà mais à ce jour il n’y avait pas encore de SDK dédié.
Quoi de neuf dans cette version ? Ben à première vue pas grand chose comparé au SDK de windows Mobile 6. Les fichiers Samples et autres semblent être les mêmes. Pas de support de visual studio 2010 beta 2. Mais par contre une nouveautés : les widgets.
Pour télécharger le SDK ainsi que les images pour l’émulateurs windows mobile 6.5, voici le lien : http://www.microsoft.com/downloads/details.aspx?FamilyID=c5241738-0fe6-4396-a4e5-5a516deb1bc5&displayLang=en

J’espère avoir l’occassion de tester d’un peu plus prêt ce SDK. Je suis l’heureux propriétaire d’un samsung i900 depuis presque 2 ans et j’ai toujours voulu m’essayer au développement d’application windows mobile. Bien que ne fonctionnant pas sous windows mobile 6.5, j’ai envie de tester un petit peu mes capacités à développer autre chose que du web :-p.

Edit : Le lien vers le SDK n’est plus disponible, quel dommage, il semble que la mise en ligne du SDK était une erreur.

Laisser un commentaire suite...

Fiddler 2 un debugger proxy web très pratique

par Jean-françois JOLY le jan.06, 2010, dans Outils

Aujourd’hui je vais vous parler d’un outil très pratique qui peut vous rendre de grands services si tout comme moi vous êtes développeur web. Vous connaissez surement firebug, cette fabuleuse extension pour développeurs.
Aujourd’hui dans internet explorer avec l’arrivée d’ie8, on peut dire que l’outil de développement intégré est équivalent à firebug. Mais il y a quand même une chose qui manque cruellement pour peu que vous fassiez de l’ajax. En effet il n’y a pas de moniteur réseau intégré et il est impossible de lister tous les appels http sortants de votre application.
C’est là qu’intervient fiddler que vous pouvez trouver à cette adresse : http://www.fiddler2.com/Fiddler2/version.asp
Screen shot de la fenêtre principale de fiddler 2

La fenêtre principale de fiddler 2

Fiddler est tout simplement un proxy web ultra complet, qui intercepte automatiquement tous les appels entrants/sortant de internet explorer (ou autre). A noter qu’il y a une extension firefox intégrée dans la dernière version.
Cet outil permet entre autre de récuppérer les GET et POST, de voir les status de tous les éléments d’une page afin de détecter facilement les 404, 200, 301 etc …
Personnellement je l’utilise assez basiquement afin de debugger facilement du javascript, mais il permet aussi des fois de s’apercevoir de choses amusantes … Pour l’anecdote, il se trouve que sur l’application sur laquelle je travaille, il avait été décidé de mettre un appel javascript pour poster un formulaire sur un lien : <a href= »monlien » onclick= »functionjavascript »>bla bla</a>. Il se trouve que le formulaire ne faisait rien d’autre que rediriger vers le lien en question mais en postant au passage quelques infos. le lien href était correct et servait à google pour le référencement. Le développeur me précédant n’avait pas mis de return false; après son appel javascript. Et bien figurez vous que fiddler m’a permis de trouver d’ou venait un problème qui ne se posait qu’avec internet explorer : Quand l’utilisateur cliquait, le formulaire était posté et on quittait la page. Sauf que voilà … le href n’était pas annulé pour autant … Il se trouve que firefox annulait l’appel alors qu’internet explorer éxécutait l’appel jusqu’au bout. Dans mon cas, celà provoquait un double enregistrement. J’ai pu repérer ce problème seulement en observant la liste des appels récuppérée par fiddler en voyant 2 urls identiques en status 200. Sur cette simple constatation j’ai pu éviter que l’utilisateur ne charge deux fois la page à chaque click sans le savoir et éviter au serveur de la calculer doublement pour rien. Merci fiddler.

Laisser un commentaire :, , , , , suite...

IIS 7, MySQL et problèmes de connexion

par Jean-françois JOLY le jan.01, 2010, dans Developpement Web

Si tout comme moi, vous décidez d’installer php 5.3 sur un serveur IIS 7 sur windows 7 afin de tester un petit peu en local, vous risquez de vous trouvez confronter a quelques petits problèmes de configuration. Aujourd’hui je vais vous faire part d’un petit soucis très bête que j’ai rencontré au cours de mon installation …

Petit résumé de l’histoire :
J’avais quelques sites sur un serveur LAMP et un beau jour j’ai décidé de changer car j’avais très envie de m’essayer a developper en autre chose que du php.
Etant l’heureux propriétaire d’une licence windows 2003 Server standard édition. J’ai donc migré et installé php 5.3 et mysql 5.1 dernier cru afin de conserver mes sites. Tout marche nickel chrome.
Bien sur je ne compte pas abandonner le php au profit d’un autre langage, mais plutôt essayer ‘élargir mes horizons. A cette fin je décide d’installer mon attirail du développeur sur mon PC pour faire du développement en local. Afin de bien coller à ma nouvelle problématique je vire apache et j’installe php 5.3 pour IIS. Problème : je suis sous windows 7 et c’est donc IIS 7 qui est installé sur mon pc. Autre problème : je récupère mes sites, mes dbs mysql, tout est configuré comme sur mon serveur win 2003. Et là c’est le drame : erreur de connexion à la db. Bien sur pour couronner le tout, j’ai une alternance d’erreurs : erreur interne du serveur et le simplem message du trigger quand la connexion à la base échoue …

Après moulte recherche, je pensais que ça pouvait être du à la version 32bits de php alors que je suis en windows 7 64bits, j’ai pensé à un problème de configuration dans php.ini, a un problème de réglage de droit dans le pool d’application, a un complot cosmique dans le but de me rendre fou …

La solution était bien plus simple que ça … Il se trouve que le bon vieux fichier d’hosts de windows 7 (system32/drivers/etc/hosts) a une ligne commentée : 127.0.0.1 localhost
Et moi bien sur, dans mes fichiers include php, pour mes chaines de connexion mysql, j’utilisais localhost comme host … Forcément ça ne risquait pas de marcher.

Laisser un commentaire :, , , , suite...

Wordpress la découverte

par Jean-françois JOLY le jan.01, 2010, dans Developpement Web

Bonjour toust le monde, pour ceux qui se serait perdu ou qui tomberait par hasard sur ce blog, sachez qu’il est en construction et que ce triste article n’est pas le reflet du futru contenu que j’espère axé très technique. Bien sur ça ne m’empèchera pas de faire quelques petits écarts en parlant d’autres choses que du développement, car les développeurs aussi ont une vie :-p

Je vous souhaite une bonne année 2010 et j’espère pourvoir utiliser mon magnifique blog rapidemment.

Laisser un commentaire : suite...

A la recherche de quelque chose ?

Utiliser ce champs pour faire votre recherche :

Vous n'avez pas trouvé votre bonheur ? N'hésitez pas à contacter l'auteur de ce blog ou alors laissez un commentaire sur un post !

Les liens !

Quelques liens intéressants...

Les archives

Tout, classé par ordre chronologique ...