Insertion float mysql m'affiche que le premier chiffre

nemeum Messages postés 32 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour
    Comment as-tu paramétrer ce champ dans ta base de données ?
    0
  2. nemeum Messages postés 32 Statut Membre
     
    dans la base il est déclaré double
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    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
  4. nemeum Messages postés 32 Statut Membre
     
    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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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
      1. nemeum Messages postés 32 Statut Membre > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Bonjour ,

        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
      2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > nemeum Messages postés 32 Statut Membre
         
        C'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
      3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Jordane45 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