8791 sujets

Développement web côté serveur, CMS

Bonsoir,

Je reviens une nouvelle fois vers vous - c'est rare - pour un problème de PHP que j'ai du mal à expliquer. Je vais donc essayer de faire clair.

Je suis tombé sur un ancien topic (résolu) de ce forum :
http://forum.alsacreations.com/topic-20-41337-1-Comment-ne-pas-faire-afficher-les-champs-vides-dune-table--RESOLU.html

Le sujet était donc de réussir à ne pas afficher un champ de valeur "NULL" par défaut en provenance d'une table dans une BDD. Or en posant ce problème, il est insinué - mais sans l'énoncer clairement - le problème qui m'occupe aujourd'hui :

J'ai moi aussi une table comprenant plusieurs champs formatés en valeur "NULL" par défaut. Ceci parce que, en fonction de chaque ID inséré, les enregistrements n'auront pas tous les mêmes champs remplis ni donc les mêmes champs "null". Certains enregistrements auront tous leurs champs remplis mais d'autres n'en auront seulement que la moitié. Il y en a même qui n'en auront qu'1 ou 2 à peine... Néanmoins, ils doivent faire partie de la même table, car elle est destinée à être affichée dans une seule et même page, au même emplacement, avec ses multiples données appelées individuellement via un menu interactif dans cette même page, qui fera le tri de ses infos à afficher via une variable url. (Voilà pourquoi je cherchais aussi à savoir comment ne pas afficher des champs "null" par défaut).
Aussi maintenant, ai-je besoin de savoir, en toutes certitudes, ce qui suit :

=> Est-ce-que le simple fait de remplir un champ de valeur "NULL" PAR DÉFAUT, par exemple via un formulaire d'update et/ou d'insert into d'un Back Office, le change du coup en valeur "NOT NULL" puisque dans le nouvel id créé, ou dans l'actualisation d'un existant, on s'est mis à le remplir de nouvelles données ? Bref, est-ce-que le fait que le champ soit en valeur "NULL" par défaut l'empêche ou non de recevoir et d'assimiler ensuite des nouvelles infos?

=> Si cette idée est saugrenue voire stupide, faut-il alors à la place additionner une condition php, ou une fonction (etc) au code standard du formulaire du BackOffice pour y parvenir ? Dans la requête par exemple ? Ou ailleurs ?
J'espère que j'ai été clair et que l'on pourra m'aider. Car je l'avoue, après tout un weekend de recherches, je n'ai pas grand choses en terme d'éléments de solutions pérennes et "propres". Merci de m'avoir lu et de bien vouloir me répondre.
Cordialement,
Neum
Modifié par Neum (17 Oct 2011 - 11:36)
Salut,

Je n'ai pas compris compris quel est ton problème. Tu as une valeur NULL par défaut dans une table MySQL. Et ensuite ? Tu veux que le champ reste NULL après une insertion/update ? Mais tu lui passais la valeur NULL ? On peut voir ta requête ?
Bonjour Aylus,

et merci de t'intéresser à ce topic. cela étant, non, tu n'as pas compris. Je vais essayer d'être plus clair encore :

mes champs sont effectivement en "NULL" par défaut. Parce qu'il y aura des enregistrements avec des champs "vierges" (c'est à dire sans aucune donnée, et non pas avec des données égales à 0) ; ils auront donc besoin d'être autorisés à n'avoir strictement aucune donnée à afficher, sans que ça ne déclenche une erreur sql. OK jusque là ?

Maintenant, il y aura aussi des enregistrements dans la table qui auront plus de champs à remplir que d'autres. Donc il auront besoin d'entrer des données dans ces champs formatés pourtant au départ en "NULL" par défaut et qui dans les autres enregistrements ont donc été laissés vierges de toutes infos. OK ?

Donc, ces champs en "NULL" par défaut, sont appelés à être laissés tel quels dans certains enregistrements, ET à être remplis dans d'autres, et ce, en fonction des différents besoin en données de chaque ID de la table. OK ? => Ma question est donc simple : est-ce-possible?

=> Peut-on remplir de données des champs formatés au départ en "NULL"? Est-ce-que le simple fait de les remplir via des formulaires d'insert into et aussi d'update depuis un BackOffice de site php, suffit à leur faire annuler leur nature "NULL" et à donc leur faire accepter et assimiler les nouvelles données qu'on y a entré ?

J'insiste, qui plus est, sur le fait que tout se passera depuis les formulaires d'un backOff. Impossible donc de décocher les cases à cocher "NULL" des champs, comme dans PhpMyAdmin avant de les remplir : on les remplira directement et basiquement depuis les seuls formulaires du BackOff. D'où donc ma question de faisabilité ici.

Est-ce-que c'est plus clair comme ça ? J'espère. Merci encore et au plaisir de te relire.
Cordialement,
Neum
Modifié par Neum (17 Oct 2011 - 10:04)
PHPMyAdmin n'est qu'une interface - parmi tant d'autres - pour gérer ta base de données. Ce n'est pas à PHPMyAdmin qu'il incombe de bloquer ou non l'insertion de données dans un champ (par le "cochage" ou non d'une checkbox).

NULL n'est qu'une valeur par défaut, donc si dans tes requêtes d'insertion tu mets une valeur à un champ NULL, elle va forcément écraser la valeur NULL.
J'insiste sur le fait que PHPMyAdmin ne transmet que l'affichage de ta configuration, le fait d'avoir une checkbox cochée montre juste que c'est une valeur par défaut, c'est tout.
Rebonjour Agylus,

et décidément, je reçois toutes les confirmations de mon hypothèse en même temps...

Donc oui, en effet, je viens d'apprendre que l'insertion d'une donnée dans un champ "null" prévaut sur sa nature par défaut, comme si, en quelque sorte, elle "l'écrasait".

Maintenant, c'est comme tout : oui ça paraît tellement évident maintenant, que la question paraît désespérément imbécile. Mais tout est si facile quand... on sait. Maintenant je sais. Or, et ce sera peut-être difficile à croire, je n'en suis pas à mon premier bal php, mais je ne m'étais jamais retrouvé devant ce cas de figure, rechignant toujours à l'emploi de cette "valeur" "NULL" dans mes tables. Et puis, j'ai déjà vu des tests fonctionnant en local, bugguer une fois en ligne. J'ai donc préféré une bonne, ferme et officielle confirmation. Bref : apprendre. On apprend à tout âge, c'est cela qui est formidable.

Bref, MERCI Agylus, vraiment : grâce à toi, je me coucherais ce soir moins sot que je ne me suis levé ce matin.
A une prochaine fois et bien cordialement,
Neum