IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

INSERT suite à un import CSV [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2019
    Messages : 31
    Points : 21
    Points
    21
    Par défaut INSERT suite à un import CSV
    Bonjour,

    Je suis confronté au problème suivant :

    Dans le code ci-dessous, j'importe un fichier csv dans une table mysql.

    Pas de souci à l'affichage du résultat dans le HTML, pas de souci pour l'insert des lignes, SAUF le champ décimal défini à 10,2 dans lequel je n'enregistre rien (valeur reste égale à 0,00).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    			switch($_POST['remise']){
    				case 'Importer toutes les remises' :
    					if (isset($_FILES["selectedFileRemise"]["type"]) != "application/vnd.ms-excel") {
    						die("Ce n'est pas un fichier de type .csv");
    					} elseif (is_uploaded_file($_FILES['selectedFileRemise']['tmp_name'])) {
    						$db = Database::connect();
    						try{
    							$toutsupprimer= $db->prepare("DELETE FROM remise_distributeur WHERE code != 0");
    							$toutsupprimer->execute();
    							$statementPrix = $db->prepare("INSERT INTO remise_distributeur (code, nom, remise) values(?,?,?)");
    						}
    						catch(Exception $e)
    						{
    							echo "Une erreur est survenue dans la connexion (table tmp_import_remise). Message d'erreur : ".$e->getMessage();
    						}
    						$file = new SplFileObject($_FILES['selectedFileRemise']['tmp_name']);
    						$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY | SplFileObject::READ_AHEAD);
    						$file->setCsvControl(';') ;
    						echo (<<<eof
    							<div class='container'>
    								<H1> Remises ajoutées </H1>
    							</div>
    							<div class='container'>
    								<table class='table table-striped' >
    									<thead>
    										<tr>
    											<th scope = 'col'>Code</th>
    											<th scope = 'col'>Nom</th>
    											<th scope = 'col'>Remise</th>
    										</tr>
    									</thead>
    									<tbody>
    eof
    				);
    						foreach ($file as $row) {
    							$statementPrix->execute([$row[0], $row[1], $row[2]]);
    							echo (<<<etf
    									<tr>
    										<td>$row[0]</td>
    										<td>$row[1]</td>
    										<td>$row[2]</td>
    									</tr>
    etf
    				);
    						}
    						Database::disconnect();
    					} 
    					break;
    A noter que cela fonctionne parfaitement dans une table identique pour les 'articles'. Le CSV n'est pas le même évidement, l'origine du problème ?

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Vous notez 10,2 (virgule) hors en DB c'est 10.2 (point), avez vous tester de ce côté là ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2019
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Merci pour votre réponse.

    J'ai bien un type decimal(10,2). Ce qui est correct, je pense... J'ai toutefois testé avec 10.2, mais cela ne change rien puisque PHPMySQL retranscrit en 10,2 ...qui est le bon paramètre.

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    un exemple de quelques lignes de votre csv peut-être ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2019
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Voici :
    Nom : 2019-04-24_15h39_08.png
Affichages : 107
Taille : 9,7 Ko

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    L'attribut 'remise' dans votre table est bien de type float (decimal ou double) ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2019
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Oui, il s'agit d'un type decimal...

  8. #8
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Bon je sais , j'insiste.
    Mais vous pouvez essayer ceci pour voir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
     
    foreach ($file as $row) {
    $row[2] = str_replace(',','.',$row[2]);
    $statementPrix->execute([$row[0], $row[1], $row[2]]);

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2019
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Mais je vous remercie d'insister ! Hélas, cela ne fonctionne pas mieux. Je venais d'ailleurs de faire la même chose directement dans le fichier csv...

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2019
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Votre proposition m'a donné une idée : j'ai directement écrit ceci : $row[2] = 0.25;
    Cela ne fonctionne pas mieux, donc, le CSV n'est pas en cause !

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2019
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Bon, quand les résultats défient la logique, on finit par tester les choses les plus incohérentes !

    J'ai donc fait ceci :

    - J'ai supprimé les décimales dans le champ (decimal(10) : résultat "1" dans toutes les colonnes;
    - J'ai remis decimal(10,3) : parfait, mais avec une décimale inutile;
    - J'ai remis decimal(10,2), comme au départ et cela fonctionne !!!

    J'en ai mal à la tête !

    Merci en tout cas pour votre aide...

  12. #12
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Ha oui, mais decimal(10) reviens à un int en fait, vous ne dite pas combien de décimal vous voulez, c'est pour ça que decimal(10,2) fonctionne.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2019
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Bien sûr. C'est pourquoi j'avais bien mis decimal(10,2) avant de poser mon problème sur le forum... Je le jure , revoyez mon premier post...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL-Server] Insertion suite à split sur un csv
    Par arthuro45 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 25/03/2010, 21h04
  2. Import csv via bulk insert
    Par DanaX dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 15/11/2008, 19h03
  3. import csv décimale
    Par gIch dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 13/12/2005, 12h46
  4. Importation CSV vers base de données
    Par Brice Yao dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/06/2005, 13h42
  5. Obtenir le No d'enregistrement àprès insertion ...suite
    Par Didier100 dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/07/2004, 19h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo