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

PHP & Base de données Discussion :

Insertion qui échoue avec valeur nulle [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2009
    Messages : 30
    Par défaut Insertion qui échoue avec valeur nulle
    Bonjour,

    Je fais un projet PHP-MYSQL dans lequel je récupère des variables provenant d'une liste déroulante. Si l'utilisateur n'effectue aucun choix, la valeur retournée est -1, dans les autres cas elles dépend du choix sélectionné (1,2,3,...).
    Mon problème se situe seulement si la valeur est -1 (donc si l'utilisateur ne choisit rien). En effet, au moment d'insérer le résulat dans ma base de données, je teste avant l'insertion si la valeur de la variable est égal à -1, si c'est le cas je la remplace par la valeur null afin d'éviter d'insérer une valeur négative dans une Foreign Key...
    Voici un extrait du code...
    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
     
    // initialisation des dicos non modifiés avant insertion dans la base de données
    if ($idDicoAncCat == '-1') {$idDicoAncCat = null;}
    if ($idDicoDesign == '-1') {$idDicoDesign = null;}
     
      $conn = db_connect();
     
    // Insertion dans table Objets
    	$query = "insert into Objets values
                ('','".$idDicoDesign."','".$idDicoAncCat."','".$AncNoInv."')";
     
    	$result = $conn->query($query);
     
    	if (!$result) {
    		return false;    // et c'est ici que je sors à chaque fois .....
    	}
     
    	$idObjets = $conn->insert_id;
    J'ai remarqué qu'en remplacant '".$idDicoAncCat."' par null ($idDicoDesign est quant à lui égal à 1 ou 2 bref différent de -1), comme ceci ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	$query = "insert into Objets values
                ('','".$idDicoDesign."',null,'".$AncNoInv."')";
    Cela fonctionne sans problème, ma requête est inséré.... bizarre bizarre ..quelqu'un à une idée ?
    Note: Ma table Objets est bien configuré pour permettre des valeurs null pour les 2 attributs suivants $idDicoDesign, $idDicoAncCat.
    Merci bcp pour votre aide, car je sèche un peu sur cette histoire

  2. #2
    jnore
    Invité(e)
    Par défaut
    Bonjour,

    Il faut que tu écrives:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ($idDicoDesign == '-1') {$idDicoDesign = "null";}
    C'est nécessaire la variable a besoin d'être une chaine de caractère.
    Fais un pour comprendre.

  3. #3
    Membre émérite Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Par défaut
    NULL n'est pas une valeur, mais un marqueur qui représente justement l'absence de valeur.
    Pas d'apostrophes/guillemets autour d'un entier ou du marqueur NULL.

    Au lieu d'écrire :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = "insert into Objets values
                ('','".$idDicoDesign."','".$idDicoAncCat."','".$AncNoInv."')";
    Essayez
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = "insert into Objets values
                ('',".$idDicoDesign.",".$idDicoAncCat.",'".$AncNoInv."')";

  4. #4
    jnore
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query ="insert into Objets values
                ('','".$idDicoDesign."','".$idDicoAncCat."','".$AncNoInv."')";
    Effectivement, je n'ai pas fais attention à leur présence, il faudra malgré tout qu'il mette les quotes lorsque sa variable ne sera pas égale à null, afin de ne pas générer d'erreur lors de l'insertion d'une chaine de caractère.

    Il faudra le prendre en compte lors du test de la valeur de la variable.
    Dernière modification par jnore ; 01/09/2009 à 07h42.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2009
    Messages : 30
    Par défaut
    Merci bcp pour vos feedbacks .... je vais essayer cela ce soir et vous tiens au courant !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2009
    Messages : 30
    Par défaut
    Ca fonctionne à merveille !
    jnore et Oishiiii un grand merci pour ces précieux conseils !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/10/2011, 11h14
  2. Calcul de stock avec valeure null
    Par nideux dans le forum Access
    Réponses: 3
    Dernier message: 02/12/2005, 11h10
  3. locate avec valeurs nulles
    Par lol_adele dans le forum Bases de données
    Réponses: 13
    Dernier message: 17/10/2005, 13h31
  4. [JDBC] retour de requete sql avec valeur NULL
    Par maxxou dans le forum JDBC
    Réponses: 3
    Dernier message: 13/09/2004, 14h40
  5. Pb requete avec valeurs nulles
    Par James85 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/04/2004, 10h20

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