Partage
  • Partager sur Facebook
  • Partager sur Twitter

Champ NULL qui s'incrémente après insert via formu

Sujet résolu
    3 avril 2024 à 18:19:39

    Bonjour,

    Ma base contient un champ "heure", de type time avec valeur NULL

    Si j'insère un enregistrement via phpMyAdmin sans remplir ce champ "heure", le champ après enregistrement est bien NULL

    Par contre si je passe par un formulaire php le champ contient alors 00:00:00

    Or j'aimerais qu'il reste à NULL, cela est-il possible ?

    -
    Edité par Delher 3 avril 2024 à 18:25:43

    • Partager sur Facebook
    • Partager sur Twitter
      3 avril 2024 à 23:38:42

      Code ?

      Parce que tu dois tenter d'insérer la chaîne vide ('') au lieu d'un "vrai" NULL (rappelons notamment, en PHP, que la cast de NULL en string donne la chaîne vide) que MySQL recaste ensuite en TIME '00:00:00' (et encore, si ça passe, c'est probablement parce que le sql_mode n'est pas strict). Problème qui ne se présenterait pas avec une requête correctement préparée en principe.

      -
      Edité par julp 4 avril 2024 à 17:14:16

      • Partager sur Facebook
      • Partager sur Twitter
        4 avril 2024 à 11:38:20

        Peut-être quelque chose comme ça :

        if (isset($_GET('heure')){
            if ($_GET('heure') == '00:00:00'){
                $_GET('heure') = NULL;
            }
        }



        -
        Edité par touvenant 4 avril 2024 à 11:42:09

        • Partager sur Facebook
        • Partager sur Twitter
          4 avril 2024 à 17:38:32

          Bonjour,

          Merci à vous deux d'avoir pris le temps de me répondre.

          Voici les codes

          <label for="heure_fin">Heure de fin de l'évènement :</label> <br />
          <input type="text" name="heure_fin" id="heure_fin" placeholder="saisir au format hh:mm" <? if (isset ($_POST['heure_fin'])) echo " value=\"$_POST[heure_fin]\""; ?>  />
          
          $insert= $bdd->prepare('INSERT INTO evenements (heure_fin)
                      VALUES
                      (:heure_fin)') ;
                                  
                      $insert->execute(array(
                      'heure_fin' => $_POST['heure_fin'],
                      ));



          Je pense effectivement que c'est mysql qui recaste en 00:00:00

          Si je teste $_POST['heure_fin'] ce n'est pas égal à 00:00:00 mais c'est vide

          En m'inspirant de la suggestion j'ai fait ça

          if(empty($_POST['heure_fin']))
                  $heure_fin2 = NULL;
                  else
                  $heure_fin2 = $_POST['heure_fin'];
          
          'heure_fin' => $heure_fin2,
          et ça fonctionne, est-ce la bonne solution ?
          • Partager sur Facebook
          • Partager sur Twitter
            4 avril 2024 à 18:00:50

            Effectivement, si la valeur provient d'un input laissé vide par l'utilisateur, la variable $_POST correspondante ne vaudra pas NULL mais la chaîne vide (que MySQL caste en 00:00:00).

            Par conséquent, il faut procéder comme tu l'as fait (voir if ('' === $_POST['heure_fin'])) pour "rectifier" cette chaîne vide en NULL comme désiré.

            Tu peux même éventuellement le faire directement lors du bind par une ternaire : 'heure_fin' => '' === $_POST['heure_fin'] ? NULL : $_POST['heure_fin'],

            -
            Edité par julp 4 avril 2024 à 18:02:38

            • Partager sur Facebook
            • Partager sur Twitter

            Champ NULL qui s'incrémente après insert via formu

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            • Editeur
            • Markdown