IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] Insérer des NULL dans une table


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 56
    Points
    56
    Par défaut [Tableaux] Insérer des NULL dans une table
    Bonjour,

    Je n'arrive pas à insérer des valeurs NULL dans une table de ma base de données (les champs sont bien Nullable).

    En fait, à la validation du formulaire, avant de faire l'insert je controle le contenu des champs, et s'ils ne contiennent rien, alors je veux insérer NULL dans le champ de la table.
    Mais ça ne m'insère jamais null, mais un blanc ("").

    Voila ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    if ( ($_limite_a !="") and ($_limite_m !="") and ($_limite_j !="") )
    {		
    	$date_limite = date("$_limite_a-$_limite_m-$_limite_j") ;  	
    }
    else
    {
    	$date_limite = null ;
    }
     
    // [...]
     
     
    $requete1 = "INSERT INTO sorties (
    		ID_M,
    		TYPE,
    		DATE_LIMITE_INS,
    		DATE_CREA)
    	    VALUES (		
    	    	'$id_m', 
    		'$_type', 
    		'$date_limite',
    		now()
    	    ) ";

    Mais qd il n'y a rien de saisi dans le formulaire, il ne m'insère jamais NULL, mais qqc du genre 00.00.00.

    Que me conseillez vous de faire pour bien insérer NULL dans ma table ?

    J'ai d'ailleurs le même pb avec des champs de d'autres types (INTEGER) ... il me met 0 au lieu de NULL.

    Je précise que mes champs sont bien NULLABLE.


    Merci pour votre aide,

    Jérém

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par jerem_orga
    Je précise que mes champs sont bien NULLABLE.
    Pas de valeur par défaut définie ?
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 56
    Points
    56
    Par défaut
    bien j'ai mis NULL par défaut.

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Peut-être sans les quotes sur '$date_limite' ... ?

    Le mieux est de tester avec phpMyAdmin pour être sûr d'avoir la bonne syntaxe avant de résoudre le problème au niveau php.

    Faut-il mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    VALUES (		
    	    	'$id_m', 
    		'$_type', 
    		'NULL',
    		now()
    	    )
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    VALUES (		
    	    	'$id_m', 
    		'$_type', 
    		NULL,
    		now()
    	    )
    Je pencherais pour la deuxième, auquel cas il te faudra deux requêtes différentes pour gérer le cas null.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 56
    Points
    56
    Par défaut
    merci pour vos réponses.

    c'est exactement ça, qd je ne mets pas NULL en "", ça m'enregistre bien NULL dans la table.

    En revanche je me vois mal faire plusieurs requêtes pour gérer ce point là. D'autant plus que je souhaite faire ce test pour plusieurs champs ....

    peut-être en testant cette valeur dans la requête elle même lors de l'insert, avec un CASE.

    je teste ça ce soir ....

  6. #6
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 480
    Points
    3 480
    Par défaut
    Bonjour,

    Le meilleur moyen est de faire une concaténation plutôt qu'une insertion.

    Crée ta requête comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if($champ == "")
       $champ = 'null';
    else
       $champ = "'" . $champ . "'";
     
    $requete = 'INSERT INTO matable ( '
               . ' champs '
               . ' ) VALUES ( '
               . $champs
               . ' ) ';
    Et ça va fonctionner. Attention aux injections SQL, utilise bien les fonctions de ton SGBD pour l'escape des strings. Jète un oeil là dessus pour plus d'informations.

    A+
    K

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. insérer des valeur dans une table via un formulaire
    Par horkets dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 18/07/2008, 20h47
  2. [WD10-WD12] Insérer des colonnes dans une table
    Par Amanck dans le forum WinDev
    Réponses: 6
    Dernier message: 18/07/2008, 10h23
  3. Access: Insérer des données dans une table acces
    Par Malika_AL dans le forum VBA Access
    Réponses: 6
    Dernier message: 27/01/2008, 22h41
  4. [SQL] Insérer des données dans une table
    Par wonga dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 01/08/2007, 12h00
  5. Insérer des lignes dans une table efficacement
    Par newbie82 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/07/2007, 17h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo