Salut

une question de débutant, vous allez rire ou pas

Mon client travaille avec des prestataires de gestion de garages automobiles qui gèrent plusieurs parcs informatiques, bla bla

Mon client a en effet créé sa propre enseigne de vente de véhicules en partenariat avec ces prestataires.

Ils lui ont envoyé un fichier CSV contenant des véhicules et leurs données respectives.
Car c'est eux qui mettent tout à jour !

Bémol, il ont foutu ça dans une archive avec les images des voitures et dans le CSV, les chemins vers les images sont en relatifs.

Est-ce cohérent ?

Vais je devoir à chaque fois convertir le CSV en base mysql , dés qu'il y aura des mises à jour à distance?
Et balancer les images sur le serveur du client ?


Et puis je n'ai jamais manipulé de CSV sauf pour afficher bêtement son contenu.

Et en plus, dans mon cas de figure, la page du site client devra permettre, entre autres, de pouvoir rechercher un véhicule selon différents critères..


Vaut il mieux que je rappelle le prestataire(celui qui fournit à ses client des CSV) ?
Il me semble qu'il y a des fonctions PHP qui traitent directement les fichiers CSV, à vérifier, mais je pense que ça peut être assez utiles dans ton cas.

De plus un fichier CSV n'est qu'un tableau avec un foramt légèrement différent.
salut et bonne bière Smiley cligne

Bon ... un fichier csv en traitement c'est pas bien compliqué...

Si tu sais déjà l'afficher, tu sais le sauvegarder en mysql Smiley cligne c'est les mêmes fonctions sauf qu'au lieu de faire un echo tu fait un insert.

Ensuite il y a le problème de tes images, si c'est du zip php sait le gérer et le décompresser.
Le plus dur étant de mettre le fichier sur le serveur, il faudrait que tu crées une page spécifique avec l'insertion dans des rep précis via des input file du CSV et des IMAGES, pour ensuite traiter l'ensemble...
Ou alors tu fais un ftp spécifique et ils posent les fichiers directement sur le serveur.. enfin bref beaucoup de possibilités...

A voir selon les besoins et les capacités Smiley smile

Mais bon rassures toi il n'y pas de fonction complexe dans tout ça.. juste une question d'organisation
Merci

J'utiliserai
fgetcsv
et tout le tral la la
J'ai constaté, Après avoir importé le CSV sous phpmyadmin, que ce dernier est pas mal bâclé .


La première ligne contient le nom des colonnes(35 en tout) pour une table et les 20 dernières n'ont pas du tout de nom(NULL)

Un petit screen !

http://webmaster-lorraine.com/temp/bd.jpg

Je vais donc devoir me taper la structure à la main en tout les cas, non ? Smiley langue
Modifié par phpCbien (22 May 2012 - 15:57)
Alors...

A toi de faire la table en bdd qui correspond au nom des colonnes...

pour sauter la première ligne, astuce toute simple

placer une variable =0 avant la boucle

dans la boucle avant de faire l'insert tester la valeur de cette variable si > 0 tu fais l'insert

sinon tu passes et tu la place à 1, ainsi la ligne des colonnes ne sera pas insérée.

Ensuite il va falloir bien sur que tu crées toutes les exceptions nécessaires au bon traitement du fichier Smiley cligne bon courage Smiley smile

Une solution "pas propre" est de mettre des valeurs par défauts à tes champs de bdd
et au moment de l'insert mets toutes tes valeurs entre quote, c'est pas terrible mais si la variable est vide ça ne fera pas d'erreur à l'insertion...
Modérateur
Une autre solution est d'arrêter de travailler comme dans les années 90 et de demander au prestataire une solution plus solide que de s'envoyer un fichier zip par email avec les données… que ton client doit ensuite uploader sur le serveur, avec un système de format de données pourri (csv).

Par exemple avec des webservices, soit eux font du push soit toi du pull. En fait à l'heure actuelle faire de l'échange de données à l'aide d'un type qui transporte la disquette…

Bon après ils en auront rien à faire et tu devras quand même te débrouiller avec cette solution moisie et être réduit à faire cela:
a écrit :
Ensuite il va falloir bien sur que tu crées toutes les exceptions nécessaires au bon traitement du fichier cligne bon courage smile


Mais j'aurai poussé mon coup de gueule.
Je suis d'accord avec toi.

J'ai envoyé un courriel au prestataire

Pour leur demander si il existait une autre solution.

Rien que pour la schématique(au moins un YML ou autre quoi)

De plus les path vers leurs images sont en relatif et le CSV est loin d'être propre

Bien sur par respect pour la boite, je vais pas vous le montrer en intégralité, vous auriez peur.

Cela dit en passant, pour reprendre tes propos, pchlj, ça me permets de me familiariser avec les méthodes de fichiers.

La méthode classique serait :


<?php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num champs à la ligne $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}
?>


ou encore pour l'insertion un truc du genre :



$objConnect = mysql_connect("localhost","root","root") or die(mysql_error()); // Conect to MySQL
$objDB = mysql_select_db("mydatabase");

$objCSV = fopen("shotdev/customer.csv", "r");
while (($objArr = fgetcsv($objCSV, 1000, ",")) !== FALSE) {
$strSQL = "INSERT INTO customer ";
$strSQL .="(CustomerID,Name,Email,CountryCode,Budget,Used) ";
$strSQL .="VALUES ";
$strSQL .="('".$objArr[0]."','".$objArr[1]."','".$objArr[2]."' ";
$strSQL .=",'".$objArr[3]."','".$objArr[4]."','".$objArr[5]."') ";
$objQuery = mysql_query($strSQL);
}
fclose($objCSV);


Mais bon c'est bien beau tout ça !

Mais pour récupérer la ligne numéro 1 et la sauter, j'ai fait des tests, c'est pas super évident !

Sauf si quelqu'un a une idée ?

Pis tout ça reste très statique dans la mesure la structure devrait rester statique Smiley biggol