Insertion float mysql m'affiche que le premier chiffre

Fermé
nemeum Messages postés 27 Date d'inscription dimanche 9 mars 2014 Statut Membre Dernière intervention 23 août 2023 - Modifié le 8 mars 2022 à 12:58
mamiemando Messages postés 33357 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 novembre 2024 - 9 mars 2022 à 15:09
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 ??
A voir également:

4 réponses

jordane45 Messages postés 38286 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 14 novembre 2024 4 698
8 mars 2022 à 13:13
Bonjour
Comment as-tu paramétrer ce champ dans ta base de données ?
0
nemeum Messages postés 27 Date d'inscription dimanche 9 mars 2014 Statut Membre Dernière intervention 23 août 2023
8 mars 2022 à 15:09
dans la base il est déclaré double
0
jordane45 Messages postés 38286 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 14 novembre 2024 4 698
Modifié le 8 mars 2022 à 17:11
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
mamiemando Messages postés 33357 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 novembre 2024 7 799
Modifié le 8 mars 2022 à 15:50
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
nemeum Messages postés 27 Date d'inscription dimanche 9 mars 2014 Statut Membre Dernière intervention 23 août 2023
Modifié le 9 mars 2022 à 15:03
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
jordane45 Messages postés 38286 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 14 novembre 2024 4 698
Modifié le 9 mars 2022 à 15:03
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
nemeum Messages postés 27 Date d'inscription dimanche 9 mars 2014 Statut Membre Dernière intervention 23 août 2023 > jordane45 Messages postés 38286 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 14 novembre 2024
Modifié le 9 mars 2022 à 15:05
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
jordane45 Messages postés 38286 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 14 novembre 2024 4 698 > nemeum Messages postés 27 Date d'inscription dimanche 9 mars 2014 Statut Membre Dernière intervention 23 août 2023
9 mars 2022 à 10:05
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
mamiemando Messages postés 33357 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 novembre 2024 7 799 > jordane45 Messages postés 38286 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 14 novembre 2024
Modifié le 9 mars 2022 à 15:11
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