Type de champs phpMyAdmin

Résolu/Fermé
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 5 mars 2015 à 15:30
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 9 mars 2015 à 11:02
Bonjour,
J'aimerai avoir votre avis concernant le type de champs de PhpMyAdmin.
J'ai des cases à cocher donc j'ai mis comme type INT(1) (0 ou 1).
Par contre lorsque je fait une modification d'un membre et les valeurs des cases à cocher sont à 1 elles passent à 0.
Par contre si je met comme type BIT tous fonctionne bien mais malheureusement je ne peux pas me connecter sur mon site.
Je sais ça doit vous paraitre très bizarre j'espère que vous pourrez comprendre mes explications afin que vous puissiez me donner votre avis.
Je suis chez OVH, si par hasard quelqu'un a le même soucis que moi.
Merci de votre aide.



7 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
5 mars 2015 à 15:48
Bonjour,

En règle général, pour stocker un BOOLEN (true ou false) on va utiliser un champ de type INT ou encore mieux TINYINT.

Sachant que niveau occupation mémoire... TINYINT et BIT prenne la même chose... à savoir : 1 octet
TINYINT [M] [UNSIGNED]
Occupe 1 octet. Ce type peut stocker des nombres entiers de -128 à 127 si il ne porte pas l'attribut UNSIGNED, dans le cas contraire il peut stocker des entiers de 0 à 255.



BIT
Occupe 1 octet. Même chose que CHAR(1)

Attention... Les champs de type BIT ne renvoies par uniquement une valeur de type 1 ou 0 comme tu pourrais le croire .. mais quelque chose du genre : 0x01 ou 0x00 .. le x servant à indiquant que tu retournes de l'hexadécimale....


A la rigueur, je t'invite à lire ceci (et à surtout pas utiliser BIT pour stocker du BOOLEEN):
http://www.olivierdoucet.info/blog/2008/09/18/stocker-un-booleen-dans-mysql/

Après... pourquoi est-ce que ça fonctionne sur tes checkbox... aucune idée... faudrait voir comment tu t'en sers...



0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
5 mars 2015 à 16:11
Bonjour,
Merci pour tes explications, je vais de ce pas jeter un oeil sur ton lien.
Je te donne quand même mon input de type checkbox, tu peux me donner ton avis, cet input se trouve dans la page sur laquelle je fais des modifications éventuelle.
Comme je disais lorsque j'enregistre une modification d'un membre la valeur passe à 0 dans ma BDD par contre dans mon formulaire la coche est bien présente donc ça peut-être encore un soucis de phpMyAdmin ?
Par contre pour l'enregistrement des checkbox cela se fait très bien.
Merci
<input type="checkbox" name="membre" id="modif_membre" class="css-modif_membre" value="true" <?php echo $donnees['membre'] ? " checked":"";?> />
<label for="modif_membre" name="demo_lbl_1" class="css-modif_membre">Membre</label>
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
5 mars 2015 à 16:14
Le code pour ta checkbox est faut...
Tel que tu l'as écrit... il vaut toujours TRUE... et est toujours coché !
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
5 mars 2015 à 16:33
Pourtant lorsque j'ouvre mon formulaire pour ajouter un membre la checkbox n'est pas coché.
et lorsque j'édit un membre la checkbox est coché si je l'ai coché bien sur sinon elle ne l'est pas.
Et lorsque je modifie un membre par exemple son téléphone j'enregistre et hop la case est décochée et dans la BDD elle est à 0.
Moi il m'arrive toujours des trucs bizarre.....
Par contre j'ai essayé d'enlever TRUE à value mais c'est toujours le même résultat.
Merci
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
5 mars 2015 à 16:55
Pardon...Je n'ai rien dit.
Ton code est bon.
<?php echo $donnees['membre'] ? " checked":"";?

Par conre... tu regarde juste si une valeur existe dans $donnees['membre'] ... tu ne regardes pas si elle est à 1 ou à autre chose ( 0x01 par exemple...)
C'est pour ça que ça fonctionne...... mais ce n'est pas bon (tant que le Type de champ dans ta BDD sera BIT).
Il faut que tu oublies ce type de champ rapidement... sinon tu auras des soucis comme hier
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
5 mars 2015 à 17:29
non en fait j'ai enlevé le BIT j'ai mis comme tu me l'as dit INT
je vais regarder tout ça.
Merci je te redis
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
5 mars 2015 à 17:53
En fait je crois avoir trouvé mais dans ma tête c'est pas très logique.
En fait dans le value j'ai remplacé TRUE par 1.
Tu peux me donner une explication s'il te plait, car pour moi c'est la même chose.
Je te remercie
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
5 mars 2015 à 18:13
dans le value j'ai remplacé TRUE par 1

Tu as bien fait.

pour moi c'est la même chose.

Dans l'absolue oui... TRUE vaut 1 et FALSE 0 (c'est du binaire... des 1 ou des 0 )
Par contre (je ne me suis jamais posé la question) pas sûr que tu puisse mettre dans un value "true" ... car à ce momment là... PHP doit le considérer comme une chaine de caractères ...
C'est comme NULL ...
un exemple tout bête...
 $a = "true";
 $b = true;
 Echo " a =$a <br>";
 Echo " b =$b <br>";

0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
9 mars 2015 à 11:02
Bonjour

Excuse moi du retard, merci pour tout.
Bonne continuation
0