1366 Incorrect integer value: 'null' for column

Résolu

Bonjour lorsque je veux faire un INSERT dans ma BDD via un formulaire j'ai cette erreur,

Erreur ! SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'null' for column 'idaut' at row 1

Malheureusement je ne peux pas faire mon INSERT en mettant une valeur à vide. J'ai essayé de mettre mon champs à NULL et une valeur par défaut à 0 dans phpMyAdmin mais en vain.

J'ai fait également cette condition mais toujours pas le résultat attendu.

$idaut = isset($_POST['idaut']) ? $_POST['idaut'] : 0;

if (empty($idaut)) {
REQUETE INSERT
}

Je vous remercie pour votre aide.

6 réponses

  1. Modérateur

    A quoi sert ton

    if (empty($idaut))

    Je pense que tu veux plutôt faire

    if ($idaut==0)

    Ensuite, il faut voir comment tu fais ta requête SQL.

    Peut être as-tu fais une faute de frappe sur le nom de la variable au moment de la mettre dans la requête.


    0
    1. en fait ma condition c'était si $idaut est vide alors on INSERT voici la requète,

      				if (empty($idaut)) {
      				$sql = "INSERT INTO cdc_oeuvres (oeuvre, idaut, idorch, conduct) VALUES (:oeuvre, :idaut, :idorch, :conduct)";
      				$datas = array('oeuvre' => $oeuvre, 'idaut' => $idaut, 'idorch' => $idorch, 'conduct' => $conduct);
      				$result = executeQuery($sql,$datas);
      				$typenr = "enregistré";
      				$reqaj = $sql;  
      				$success = "<span class='success'>La nouvelle oeuvre - ".trim(stripslashes("$oeuvre"))." - a été $typenr.</span>";
      				}

      J'ai essayé aussi

      if ($idaut==0)

      mais toujours impossible de faire un INSERT si je laisse une valeur vide. Par contre si j'envoie tous les champs avec une valeur l'INSERT se fait correctement.

      0
      1. Contributeur

        bonjour,

        Finalement, tu montres ta requête INSERT.

        Reste à nous montrer la structure de ta table.

        0
    2. DROP TABLE IF EXISTS `cdc_oeuvres`;
      CREATE TABLE IF NOT EXISTS `cdc_oeuvres` (
        `idoeu` int NOT NULL AUTO_INCREMENT COMMENT 'ID de l''oeuvre musicale',
        `oeuvre` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'Nom de l''oeuvre musicale',
        `idaut` int DEFAULT '0' COMMENT 'ID de l''auteur de l''oeuvre musicale',
        `idorch` int NOT NULL COMMENT 'ID de l''orchestration',
        `conduct` tinyint(1) NOT NULL COMMENT 'A 1 si Conducteur',
        PRIMARY KEY (`idoeu`),
        KEY `idaut` (`idaut`),
        KEY `idorch` (`idorch`)
      ) ENGINE=MyISAM AUTO_INCREMENT=807 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Table de relation : oeuvres - auteurs - orchestrations';

      c'est donc bien la valeur idaut que je souhaite laisser vide.

      0
      1. Contributeur

        Pour laisser une valeur "vide", il ne faut pas la mettre dans l'INSERT.

        0
    3. Bonjour Excuse moi je me suis mal expliquée. Par contre cette valeur peut rester vide et également être sélectionnée (non vide) cela dépends. Je vous remercie.

      0
      1. Contributeur

        Il faut donc prévoir deux INSERT, un avec et un sans ce champ.  Et exécuter le bon.

        INSERT INTO cdc_oeuvres (oeuvre, idorch, conduct) VALUES (:oeuvre, :idorch, :conduct)
        0
    4. Bonjour alors d'après ce que tu me dit il faut mettre une condition sur chaque INSERT? .je ne comprends pas trop en fait.

      0
      1. Bonjour,

        Si $idaut est facultatif et avec une valeur par défaut, as tu vraiment besoin de vérifier si la variable est vide avec empty ?

        $idaut = isset($_POST['idaut']) ? intval($_POST['idaut']) : 0;
        
        $sql = "INSERT INTO cdc_oeuvres (oeuvre, idaut, idorch, conduct) VALUES (:oeuvre, :idaut, :idorch, :conduct)";
        $datas = ['oeuvre' => $oeuvre, 'idaut' => $idaut, 'idorch' => $idorch, 'conduct' => $conduct];
        $result = executeQuery($sql,$datas);
        

        Si $_POST['idaut'] n'est pas défini, l'œuvre sera insérée avec un champ idaut égal à 0.

        1
    5. Bonjour un grand merci cela est bien comme je le souhaitais.

      Je vous remercie.

      0