Kamelot Blog

Aller au contenu | Aller au menu | Aller à la recherche

jeudi 31 décembre 2009

jeu
31
dec '09

Saviez vous qu'il y a un 0 janvier

0 janvier

Alleï. Bonne année !!

Non non je ne vais pas m'en arrêter à ca.

Voici d'autres petites astuces ou choses à savoir...

1 jour = 24 heures x 60 minutes x 60 secondes ...soit 86400 secondes..

toujours ?

non : occasionnellement en juin et/ou en décembre on ajoute une seconde additionnelle et on a 86401 secondes donc l'heure 23:59:60 existe ces 2 jours là. C'est comme pour le 29 février tous les 4 ans. C'est pour corriger un décalage.

A propos de ces 29 Février. C'est vraiment tous les 4 ans ? enfin presque

Il n'y a pas de 29 février les années divisible par 100 qui ne sont pas divisible par 400.

Notez que ce n'est pas encore parfait car cela engendre encore une erreur de 3 jours tous les 10 000 ans.

Nos amis Suédois et russes ont même eut des 30 Février. Mais ca n'a pas eu beaucoup de succès (et en plus ce n'était pas en même temps).

Ce post m'a été inspiré par l'article : Unix Epoch and PHP's calendar system de Derick et du livre sur les Dates dans PHP (par Derick Rethans) que j'ai gagné au phpBelgium Meeting de Gent.

En php on utilise ISO 8601, toujours intéressant à lire.

On y trouve un entre autre un lien vers l'explication des numérotation de semaines qui est à l'origine de problèmes encontrés avec php ou mysql

vendredi 25 décembre 2009

ven
25
dec '09

Zend_Form

Starter kit pour Zend_Form

Lire la suite...

samedi 19 décembre 2009

sam
19
dec '09

Zend_tool : erreur Cannot redeclare class Zend_OpenId_Provider

Note préliminaire : si vous n'avez pas ce problème passez votre chemin. Ce post est un memento pas un tuto.

N'en veuillez pas à Zend_OpenId_Provider, il n'y est pour rien.

C'est un problème quand plusieurs zend_framework entrent en conflit dans votre include_path.

De tous les post voici celui qui me semble plus parlant : http://www.mail-archive.com/fw-general@lists.zend.com/msg21202.html

Et qui se résume par

Dès qu'il y a la racine d'un projet utilisant zf 1.7.x dans l'include_path, ca foire. Il suffit de le retirer.

vendredi 18 décembre 2009

ven
18
dec '09

MySQL :: Le type ENUM liste les valeurs qu'on accepte ? -> faux !!

J'ai eu la maladresse de croire que Le type ENUM de Mysql pouvait servir de garde fou.

En effet

[SQL]
create table `test_enum`( 
`id` int UNSIGNED NOT NULL AUTO_INCREMENT , 
`monEnum` enum('a','brol','7') , 
`monAutreEnum` enum('a','brol','7') NOT NULL , 
PRIMARY KEY (`id`)
)  ;

Je ne veux que 'a','brol' ou '7', éventuellement NULL dans monEnum

insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,'a','a');
# (1 row(s) affected)


insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,NULL,'a');
# (1 row(s) affected)


insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,'a',NULL);
# Error Code : 1048
# Column 'monAutreEnum' cannot be null


insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,NULL,NULL);
# Error Code : 1048
# Column 'monAutreEnum' cannot be null
    id  monEnum  monAutreEnum
------  -------  ------------
     1  a        a           
     2  a        a           
     3  (NULL)   a

Là ca allait.

Mais maintenant

[SQL]
insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,'','a');
# (1 row(s) affected, 1 warning(s))


insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,'a','');
# (1 row(s) affected, 1 warning(s))


insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,'','');
# (1 row(s) affected, 2 warning(s))


insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,'Z','a');
# (1 row(s) affected, 1 warning(s))


insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,'a','Z');
# (1 row(s) affected, 1 warning(s))


insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,'Z','Z');
# (1 row(s) affected, 2 warning(s))

On voit que les "vides" et les "Z" ne bloquent pas l'ajout de l'enregistrement. et sont remplacés par "vide" alors que ce n'est pas une valeur acceptée.

En effet le manuel dit ceci.

Si vous insérez une valeur illégale dans une énumération ENUM (c'est à dire, une chaîne qui n'est pas dans la liste de valeurs autorisées), la chaîne vide est insérée pour représenter une erreur. Cette chaîne peut être distinguée d'une chaîne vide 'normale' par le fait que cette chaîne à la valeur numérique 0. Nous reviendrons sur ce point plus tard.

Par exemple, une colonne créée comme ENUM("un", "deux", "trois") peut prendre n'importe quelle valeur ci-dessous. L'index de chaque valeur est aussi présenté :

 Valeur     Index
--------- --------
 NULL 	   NULL
 ""         0
 "un"       1
 "deux"     2
 "trois"    3
[Resultat]
    id  monEnum  monAutreEnum
------  -------  ------------
     1  a        a           
     2  a        a           
     3  (NULL)   a           
     4           a           
     5  a                    
     6                       
     7           a           
     8  a                    
     9                       

Notez que si j'ajoute une valeur par défaut, ca n'y change rien

[SQL]
alter table `test_enum` 
change `monEnum` `monEnum` enum('a','brol','7') character set latin1 collate latin1_swedish_ci default 'a' NULL , 
change `monAutreEnum` `monAutreEnum` enum('a','brol','7') character set latin1 collate latin1_swedish_ci default 'a' NOT NULL;


///[SQL]
insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,'','a');
# (1 row(s) affected, 1 warning(s))


insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,'a','');
# (1 row(s) affected, 1 warning(s))


insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,'','');
# (1 row(s) affected, 2 warning(s))


insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,'Z','a');
# (1 row(s) affected, 1 warning(s))


insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,'a','Z');
# (1 row(s) affected, 1 warning(s))


insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,'Z','Z');
# (1 row(s) affected, 2 warning(s))
    id  monEnum  monAutreEnum
------  -------  ------------
     1  a        a           
     2  a        a           
     3  (NULL)   a           
     4           a           
     5  a                    
     6                       
     7           a           
     8  a                    
     9                       
    10           a           
    11  a                    
    12                       
    13           a           
    14  a                    
    15                       

En fait tout dépends du mode sql en cours

[SQL]
select @@SQL_MODE;
SET SESSION sql_mode='STRICT_ALL_TABLES';
select @@SQL_MODE;
#@@SQL_MODE       
#-----------------
#STRICT_ALL_TABLES

insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,'brol','z');
#Error Code : 1265
#Data truncated for column 'monAutreEnum' at row 1
insert into `test_enum`(`id`,`monEnum`,`monAutreEnum`) values ( NULL,'z','brol');
#Error Code : 1265
#Data truncated for column 'monEnum' at row 1

SET SESSION sql_mode='';
select @@SQL_MODE;

Là mes 2 inserts sont bloqués avec le message

		

dimanche 6 décembre 2009

dim
06
dec '09

Le consortium Claroline engage un développeur ! (Louvain-La-Neuve/Belgique)

Dans le cadre d’un contrat à durée indéterminée et en vue de participer au développement dans l’environnement PHP/MySQL d’une plate-forme Open Source de eLearning et de eWorking, le Consortium Claroline AISBL engage : un (h/f) développeur PHP Orienté Objet

Lire la suite...

dim
06
dec '09

Pour la reconduction du contrat de Florence hainaut sur PURE FM

Pétition : Pour la reconduction du contrat de Florence hainaut sur PURE FM
Pour la reconduction du contrat de Florence hainaut sur PURE FM
Aussi sur facebook

NB : la direction de Pure (aka Rudy Léonet) soutient Florence, la décision vient de la direction de la RTBF...
edit : Les auditeurs de Pure FM se mobilisent sur Facebook pour la journaliste de Snooze Florence Hainaut

Tags