De quelle facon insérer une données

Eléphant du PHP | 61 Messages

18 janv. 2007, 19:17

Bonjours à tous !
J'ai besoin de votre aide car je ne sais aps quelle solution est la meilleur:
Voilà ce qu'il se passe: je possede actuellement un espace membre ou celui-ci peut demander de l'aide.
Quand celui-ci demande de l'aide il peut voir le statut "En attente" et si je l'ai aider je modifie ce stautue et le met "Resolu"
Cependant je ne sais pasde quelle manière stocker cette information dans ma table MySQL:
Soit je creer une colonne de type VARCHAR et lorsque il demande de l'aide j'insère "En attente" et lorsque je l'est aider je met dans la colonne "Resolu"
Ou soit je m'aide de php et lorsque c'est en attente j'integre 0 dans une colone SMALLINT et si c'est Résolu j'integre 1 dans la colonne
Pourriez-vous m'indiquer quelle est la meilleur solution et si vous en connaissez d'autre plus simple n'hésiter pas
MErci!

Eléphant du PHP | 61 Messages

19 janv. 2007, 10:55

Personne?
Je résume ma question qui me semble est trop détailler:
Vaut t'il mieux rentrer des donner genre 0 ou 1 dans un e BDD et les traiter en sortie avec php ou bien rentrer des donner comme du texte et les affcher en brut ?

Eléphant du PHP | 445 Messages

19 janv. 2007, 11:00

Rentrer du texte en brut évite d'avoir à faire un traitement préalable des données de la table avant l'affichage.

De plus, ça te permettrait par exemple, si un jour tu as besoin de rajouter un nouveau statut, comme par exemple "En cours de traitement" ou je ne sais quoi, tu n'auras pas à modifier ton fichier d'affichage, juste à rajouter ce champ et en permettre l'update dans la table.
LLDC
Ulti

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

19 janv. 2007, 11:22

Personnellement je te conseil fortement d'opter pour une valeur numérique (un id en fait) plutôt que pour un texte succeptible de changer selon les désidérata d'une maitrise d'ourage zêlée ("Ah non en fait, au lieu de 'résolu' ce serait mieux de mettre 'terminé' ... bon en fait le client préfère 'terminer'" ...).

Cela permet de changer le libellé sans avoir à faire un update de tous les champs (soit via un fichier, mais si effectivement c'est quelque chose qui peut changer fréquemment et que tu ne veux pas t'embêter à modifier tes scripts, tu peux aussi envisager une table contenant id et libellé de ce statut)

D'autant que tu devras très certainement de toute façon utiliser des constantes en php également pour éviter de te retrouver avec des "Résolu", "Resolu", "resolu", etc. Et compliqué d'autant le filtre en sql sur un statut.


Avantage également si tu as besoin de faire du multilingue, c'est plus facile d'aller chercher le libellé associé dans la langue qui va bien à partir d'un id, que devoir gérer la correspondance dans le code, surtout si tu es ammené à changer un libellé en français (pour des raisons fonctionnelles comme celles citées ci-dessus :))

Ce sera plus facile et plus rapide également d'indexer un nombre qu'une chaine, et dans la mesure où tu auras très certainement et régulièrement une condition WHERE sur cette colonne, ça peut être utile également.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 61 Messages

19 janv. 2007, 11:46

Donc avec une donnée numérique pour 0 --> en attente et 1--> aider et je stock 0 et 1 dans un SMALLINT(1) ?
Donc cela fera lorsque le visiteur veut savoir le staut :
si 0 --> j affiche en attente
et si 1 --> aider
Ce qui de demande de se rapeller de ce qu'est 0 et 1...
Comment fait tu pour te rapeller de se que réprésente le 0 et le 1 dans tes script tu créer un ficher memo ^^^ou bien tu commente a chaque fois ?
Car mon site sera assez gros

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

19 janv. 2007, 12:08

Je commente, je commente et je commente ! :)

Bon, plus sérieusement, il y a plusieurs solutions... tu peux soit créer une table comme je le disais plus haut avec id/libellé soit les déclarer dans tes script php.

Personnellement j'opte pour cette deuxième solution et je déclare des constantes :
// constantes des statuts
define('STATUT_ATTENTE', 1);
define('STATUT_RESOLU', 2);
Ce qui permet de ne pas avoir à retenir les valeurs dans le code ;)

Et généralement je complète quand j'en ai besoin par un tableau de libellés :
 // Libellés des statuts
$libStatuts = array ( 
  STATUT_ATTENTE => 'En attente',
  STATUT_RESOLU =>  'Résolu'
);
Ca me permet de générer select, cases à cocher, etc. assez simplement en parcourant juste le tableau :
foreach ($libStatuts as $id => $lib) {
  echo '<option value="'.$id'">'.$lib.'</option>';
}
ou bien d'aller chercher le libellé qui va bien à partir du code récupéré en base:
Statut : <?php echo $libStatuts[$codeEnBase]; ?>
Vala.. c'est peut être pas la meilleure façon de procéder, mais pour l'instant elle me convient bien ;)

Et je commente quand même un maximum pour celui qui lira le code après... surtout que c'est très généralement moi et que je déteste passer des heures à à essayer de comprendre comment j'avais fait à l'époque ! ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...