Insertion float mysql m'affiche que le premier chiffre

Bonjour tout le monde,

J'ai le code suivant :
<?php
include 'koneksi.php';
$fichier = 'helium.txt';

if (file_exists($fichier)) {
    if (filesize($fichier) != 0) {
        $lignes = file($fichier);
        echo '<table>';
        for ($i = count($lignes)-1; $i<count($lignes); $i++) {
            echo '<tr>';
            for ($j = 20; $j < 25; $j++) {
                echo '<td>';
                {
                    $resultat=$lignes[$i][$j];
                }
                echo '</td>';
                $proses = mysqli_query($mysqli, "INSERT INTO heliumzahra (helium) values('$resultat[0]')");
                echo $resultat;
            }
        }
        echo '</tr>';
    }
    echo '</table>';
} 
}
?>


Lorsque je consulte ma base de donnée le champ
helium
m'affiche que
7
, sachant que le nombre dans le fichier texte est
79.3
.

Pourquoi ??

4 réponses

  1. Modérateur
    Bonjour
    Comment as-tu paramétrer ce champ dans ta base de données ?
    0
    1. dans la base il est déclaré double
      0
      1. Modérateur
        Ton $resultat[0] me parait étrange...
        vu que tu remplit ta variable avec cette ligne de code
         $resultat=$lignes[$i][$j];
        

        Je pense donc que tu dois juste utiliser
         $proses = mysqli_query($mysqli, "INSERT INTO heliumzahra (helium) values('$resultat')");
                       
        

        sinon ça ne te retourne que le premier caractère...

        Tu peux aussi faire un var_dump de ta variable pour voir ce qu'elle contient.... ( et nous le montrer si besoin )
        0
    2. Modérateur
      Bonjour,
      • Est-ce normal que tu aies mis des simple quotes autour de
        $resultat[0]
        dans ta requête ? Personnellement, je n'aurais rien mis.
      • Si tu fais un
        echo $resultat[0];
        , as-tu bien un résultat flottant ?
      • Si tu fais un
        echo "INSERT INTO heliumzahra (helium) values('$resultat[0]')";
        , est-ce que la requête est correctement construite ?
      • Si tu lances la requête
        INSERT INTO heliumzahra (helium) values(79.3);
        dans un client SQL, est-ce que ça fait ce qu'il faut ?


      Bonne chance
      0
      1. Ok, j'ai utilisé
        $resultat
        au lieu de
        $resultat[0] 
        et quand j'utilise
        INSERT INTO heliumzahra (helium) values(79.3);
        , il insère bien
        79.3
        dans la base.

        J'ai utilisé
        var_dump
        et le résultat est le suivante :
        string '8' (length=1)
        string '0' (length=1)
        string '.' (length=1)
        string '3' (length=1)
        string ' ' (length=1)
        0
        1. Modérateur
          C'est donc que ta variable
          $resultat
          ne contient pas la valeur que tu espères ...
          Que donnes un
          var_dump
          de la variable
          $lignes
          ?
          Et puis.. que contient ton fichier
          helium.txt
          ?
          Le souci ne semble clairement pas venir de l'insertion en BDD .. mais bien de la façon dont tu essaies de lire le contenu de ce fichier !
          0
        2. @jordane45Bonjour ,

          Premièrement, merci de vos réponses rapides :-)

          var_dump $lignes
          donne :


          Mon fichier texte contient :
          2021-03-07 03:10:17 79.7
          2021-03-08 03:10:15 79.3
          2021-03-08 07:27:07 79.3
          2021-03-08 20:03:25 79.3
          2021-03-09 03:10:18 79.3
          2021-03-09 07:19:41 79.3
          0
        3. Modérateur
          @nemeumC'est donc un fichier CSV (peu importe l'extension.. txt, csv, ou n'importe quoi d'autre..) avec, comme séparateur, des tabulations ?
          Il existe donc une fonction PHP permettant de facilement lire un fichier de ce type...
          https://www.php.net/manual/fr/function.fgetcsv.php
          0
        4. Modérateur
          @jordane45Jordane45 a raison, tu parses mal ton fichier texte.
          $lignes
          est un tableau de chaîne dont chaque chaîne de caractère correspond à une ligne de fichier.

          Comme jordane45 ton fichier est de type
          .csv
          (le délimiteur semble être l'espace). Pour le charger en base deux approches sont possibles :
          • Méthode 1 : comme jordane45 le propose, tu peux utiliser
            fgetcsv
            permet de charger le contenu d'un fichier
            .csv
            en distinguant les colonnes entre elles (voir l'exemple dans ce lien).
          • Méthode 2 : En MySQL, tu peux directement charger un fichier
            .csv
            en base avec
            LOAD DATA INFILE
            .


          Bonne chance
          0