formulaire historique changement d'état

Eléphanteau du PHP | 11 Messages

14 avr. 2013, 23:36

Bonjour,

bon je debute avec le php mais j'avance a grand pas et voici un autre de mes problème:


j'ai réussi a crée un formulaire pour ajouter un enregistrement,suprimer un enregistrement et modifier un enregistrement .

je cherche un moyen de garder un historique d'un de mes champ.
je m'explique :

si j'ai un enregistrement qui a un statut "a commander" et que je le modifier en " reçu " j'aimerais avoir la possibilité de garder une trace du changement d'état .


Vous pensez que c'est réalisable ?


merci

Mammouth du PHP | 504 Messages

15 avr. 2013, 18:53

bonjour,

tu peux rajouter un champ date_Update dans ta base avec définit en timestamp.

lorsque tu valide ta requete de "commander" à "reçu", tu update également ce champ avec comme requete sql NOW(), ainsi ton champ date_Update correspond à la date en au format timestamp de ton changement d'état de commander à reçu.

C'est une possibilité.

Eléphanteau du PHP | 11 Messages

16 avr. 2013, 15:54

ok mais j'avais pensais plutôt faire sa tu en pence quoi :

alors en je crée une table historique dans lequel je stock les changement d'état .

dans la pratique :

1: je crée un table intervention dans lequel je stock des interventions avec comme statut a diagnostiquer.

2: je crée une table historique intervention dans lequel je stock les différent changement d'état ex: diagnostiqué, hs, pièce a commander.

et dans mon formulaire de modification de la table intervention je rajoute une requête qui enregistre en même temp le champ statut et id de l'intervention dans la table historique intervention .

Comme cela je peut a tout moment faire une requête pour récupéré tout les changement d'etat de la table intervention en fonction du numéros id.

' je c'est pas si j'explique bien lol"

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

16 avr. 2013, 16:49

salut,

Pour une trace de chaque étape, il te faut effectivement une table supplémentaire permettant la liaison entre la table de départ.
par exemple
# les clients
CREATE TABLE clients (
  idclient   INT          NOT NULL AUTO_INCREMENT PRIMARY KEY,
  nom        VARCHAR(20)  NOT NULL,
  prenom     VARCHAR(20)  NOT NULL,
  email      VARCHAR(255) NOT NULL,
  motdepasse VARCHAR(128) NOT NULL
)
  ENGINE = innodb;

#table des statut des Interventions
CREATE TABLE statutIntervention (
  idstatut  INT         NOT NULL AUTO_INCREMENT PRIMARY KEY,
  nomstatut VARCHAR(20) NOT NULL
)
  ENGINE = innodb;

# les commadnes des clients
CREATE TABLE interventions (
  idintervention INT          NOT NULL AUTO_INCREMENT PRIMARY KEY,
  idclient   INT          NOT NULL,
  idstatut   INT          NOT NULL, # statut courant
  commentaire text not null
)
  ENGINE = innodb;
# Ajout des FK sur la table commandes

ALTER TABLE interventions ADD CONSTRAINT fk_client FOREIGN KEY (idclient) REFERENCES clients (idclient);
ALTER TABLE interventions ADD CONSTRAINT fk_statut FOREIGN KEY (idstatut) REFERENCES statutIntervention (idstatut);

# la table de suivis des étapes commandes
CREATE TABLE suivisintervention (
  idintervention INT  NOT NULL,
  idstatut   INT  NOT NULL,
  datestatut DATE NOT NULL
)
  ENGINE = innodb;
# Fk de la table suiviscommandes
ALTER TABLE suivisintervention ADD CONSTRAINT fk_intervention FOREIGN KEY (idintervention) REFERENCES interventions (idintervention);
ALTER TABLE suivisintervention ADD CONSTRAINT fk_statut_int FOREIGN KEY (idstatut) REFERENCES statutIntervention (idstatut);
A partir de la, lorsqu'une intervention change de statut (dans le formulaire, la liste déroulante étant faite à partir de la table statutintervention) tu insert, dans la table suivisintervention, une ligne indiquant l'id de l'intervention, l'id du statut et la date du l'instant présent en gros
insert into suivisintervention (idintervention, idstatut, datestatut) values (412,528,now());
et donc un simple select avec une jointure peu te fournir la liste des statuts sur une intervention avec la date
select nomstatut, datestatut from
  suivisintervention
  join statutintervention using(idstatut)
  where idintervention=412;
bien sur le 412 est un exemple :mrgreen:

Je te conseil de regarder (bien en profondeur ;) )un cours sur le modèle entité association de la méthode merise, pour voir comment on modélise une base ça pourra t'aider.

ps : l'explication ça va, mais fait un p'tit effort sur la syntaxe et on te comprendra mieux :mrgreen:

@+
Il en faut peu pour être heureux ......