Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/01/2011, 21h21   #1
Futur Membre du Club
 
Inscription : juillet 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 81
Points : 17
Points : 17
Par défaut Enregistrement vide: NULL plutôt que 0

Bonjour,

J'ai un petit soucis lors de l'enregistrement de données dans ma base de données MySQL. Lorsque j'enregistre un champs vide, au lieu de trouver NULL je trouve 0. Je pense que celà vient de mon code car si j'insère un nouveau champs depuis l'interface de phpMyAdmin je trouve bien la valeur NULL.

Voilà le bout de code que j'utilise pour l'enregistrement (code recommandé par le CMS Drupal que j'utilise):
Code :
db_query("INSERT INTO {ma table} (vid, nid, un_champs) VALUES (%d, %d, %d)", $node->vid, $node->nid, $node->un_champs);
Merci pour votre aide

--- EDIT ---

Je viens de comprendre quelque chose, comme mon champs est de type entier j'ai mis: %d ce qui est apparemment juste mais si je met:
$node->un_champs = NULL; ça ne passe évidement pas dans %d. Il faudrait que je mette %s à moins qu'il y ai une autre solution?
clement106 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 22h27   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Qu'est ce qui ne te plait pas dans ta solution ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 22h35   #3
Futur Membre du Club
 
Inscription : juillet 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 81
Points : 17
Points : 17
Hé bien vu que je n'aimerais enregistrer que des nombres de type entier, ça me semble un peu bizard d'utiliser %s...mais si il n'y a pas de solution autre que cela, je ferais avec.
clement106 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 07h59   #4
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Salut

Je ne connais pas Drupal, mais si en mettant %s et que la valeur du champ est NULL et qu'au bout la valeur enregistrée est bien NULL, je ne vois où est le problème.

Sinon, reste peut être 2 autres alternatives s'il est possible de rendre cette requête un peu dynamique.

- Si on détecte que la valeur doit être NULL, pourquoi ne pas mettre NULL plutôt que %s ?
Ceci :
Code :
1
2
 
db_query("INSERT INTO {ma table} (vid, nid, un_champs) VALUES (%d, %d, NULL)", $node->vid, $node->nid);
- Idem pour NULL, et bien ça dépend comment c'est défini coté Bdd pour ce champ, mais admettons qu'on accepte une valeur NULL et que sa valeur par défaut est NULL aussi, alors ne pas renseigner le champ (et sa valeur par conséquent) fera qu'une valeur NULL sera enregistrée.
Ceci :
Code :
1
2
 
db_query("INSERT INTO {ma table} (vid, nid) VALUES (%d, %d)", $node->vid, $node->nid);
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 09h00   #5
Futur Membre du Club
 
Inscription : juillet 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 81
Points : 17
Points : 17
Salut,

Merci pour ton aide. J'ai dit une grosse bêtise avec le %s, lors de l'enregistrement je me retrouve quand même avec la valeur 0.

Le problème c'est que se champs pourrait ou non être remplis donc ta deuxième solution ne va pas jouer.

Maintenant ta première solution jouerait mais se qui voudrait dire si j'ai bien compris que je devrais remplacer le NULL par ma variable.
Exemple:
Code :
1
2
$une_valeur = empty($une_valeur) ? "NULL": $une_valeur;
db_query("INSERT INTO {ma table} (vid, nid, un_champs) VALUES (%d, %d, $une_valeur)", $node->vid, $node->nid);
Je n'ai pas testé cette exemple mais je suis presque certain que ça devrait jouer, le seul problème c'est que je ne suis pas trop sur au niveau de la sécurité. Il parait qu'en faisant comme cela on n'aurait un risque d' attaques par injection SQL. Est-ce vrais?
J'ai pu lire cela ici: http://kolossaldrupal.org/docs/ecrire-code-securise
clement106 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 09h28   #6
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
oui écrit comme ça il y a un probleme.
alors que :
Code :
$une_valeur = empty($une_valeur) ? "NULL": fonction_protection($une_valeur);
y'en a plus.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 09h45   #7
Futur Membre du Club
 
Inscription : juillet 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 81
Points : 17
Points : 17
Oui effectivement comme cela ça devrait jouer. Enfin ça ne va pas être très pratique à mettre en place car j'ai quand même 100 champs...j'ai pas encore finit moi.

Dans la function_protection, est-ce qu'il existe un code passe partout qui protégerait de l'injection sql?
clement106 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 09h56   #8
Membre chevronné
 
Inscription : juin 2004
Messages : 747
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2004
Messages : 747
Points : 741
Points : 741
Code :
mysql_real_escape_string($ta_chaîne à protéger)
Là ça joue ! Tu viens de Suisse n'est-ce pas ?
__________________
  • Mon blog PHP : http://blog.alterphp.com
  • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein
pc.bertineau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 10h11   #9
Futur Membre du Club
 
Inscription : juillet 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 81
Points : 17
Points : 17
Super, je vais faire comme ça alors. Merci beaucoup à tous ceux qui m'ont aidés.

Ps: Oui c'est bien ça... ça va aller très vite!!
clement106 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h26.


 
 
 
 
Partenaires

Hébergement Web