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

Langage PHP Discussion :

verification de données et recuperer les resultat du test et afficher


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut verification de données et recuperer les resultat du test et afficher
    bonjour,
    mon but c'est de tester les données d'un fichier csv, que j'arrive a lire en php en utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while ($ligne = fgets($fp,4096)) 
    { 
     
    // on crée un tableau des élements séparés par des points virgule 
    $liste = explode(";",$ligne); 
    .
    .
    .
    le fichier contient 33 colonnnes et bcp de lignes

    jai utilisé les expression régulière pour verifier la validité de chaque champs selon la forme souhaité voila un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $liste[0] = ( isset($liste[0]) ) ? $liste[0] : Null;
     if (isset($liste[0]))
    {
        $liste[0] = htmlspecialchars($liste[0]); // On rend inoffensives les balises HTML que le visiteur a pu entrer
     
    if(!is_int($liste[0])//je test si c'est un entier
      $a0[i]=true;
       else
        $a0[i]=false;
    if(!$liste[0]){$aa0[]=true;}
    j'ai penser à creer un tableaux pour chaque colonnes pour récuperer les information par exemple.

    mais cela ne marche pas je ne sais comment procèder, quelqu'un pourrais avoir une idée meilleure? svp proposez moi des idées parceque je galère avec ce probleme depuis un bon temps
    merci pour vos reponses ou passages

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Bonsoir,

    1- utilise fgetscsv ou SplFileObject::fgetcsv plutôt que fgets. Ils sont fait pour traiter les fichiers csv directement (chaque ligne sera transformé en array).

    2- Je ne comprends pas ce que tu veux faire, peux-tu en dire plus? Veux-tu, une fois tes vérifications terminées, just récupérer les valeurs (valides) de chaque colonne dans un tableau?

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    je veux que l'utilisateur qui charge le fichier csv pour fin d'actualiser une base de données soit averti des erreurs existentes dans le fichier charger et lui de demander de corriger les erreurs avant de recharger le fichier .
    lorsque tous les champs sont valides et dans le format accépté le fichier pourra donc etre chargé dans la base de données

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    Si le user utilise un logiciel pour faire le fichier csv, je ne vois pas trop comment tu pourra faire pour lui indiquer visuellement dans le logiciel les champs qui ont des erreurs, idem si c'est un fichier text.

    Alors pour être sur je ferais une page en html / php, qui génère le tableau html des données du fichier csv, et ferait travailler le user sur cette page;

    et si tu veux traiter l’intégralité du tableau ou une portion ( par exemple ligne 1 à 200 ), je ferais ça en ajax avec jquery par exemple


    Mais comme je ne connais pas trop ton niveau, je ne sais pas vraiment quelle meilleures solution te conseiller

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Citation Envoyé par html.php Voir le message
    je veux que l'utilisateur qui charge le fichier csv pour fin d'actualiser une base de données soit averti des erreurs existentes dans le fichier charger et lui de demander de corriger les erreurs avant de recharger le fichier .
    lorsque tous les champs sont valides et dans le format accépté le fichier pourra donc etre chargé dans la base de données
    Ça risque d'être une galère pour ton utilisateur si tes indications ne sont pas assez claires pour lui. Est-ce que tu comptes lui donner toutes les coordonnées (ligne et colonne) des champs invalides ? Si c'est un long CSV, ça sera compliqué pour lui !

    De ton côté, si tu y tiens vraiment, il faut stocker dans un tableau les cordonnées de chaque champ à problème. SplFileObject te permettra de le faire plus facilement (code non testé):
    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
    <?php
     
    $csv_file = new \SplFileObject("fichier.csv");
    $csv_file->setFlags(SplFileObject::READ_CSV);
    $csv_file->setCsvControl(";");
     
    $array_error = array();
     
    //parcours de toutes les lignes
    foreach($csv_file as $line)
    {
      //analyse de chaque colonne dans la ligne. Supposons que la 1ere colonne doit être un entier
      if(!is_int($line[0]))
      {
        $array_error[] = array($csv_line->key(), 0); //on insère un tableau contenant les coordonnées du champ invalide
      }
     
      // et ainsi de suite pour chaque colonne. Tu peux aussi utiliser foreach ou une boucle for ici...
     
    }
     
     
    //à la fin, tu te retrouves avec un tableau contenant les coordonnées de tous les champs invalides
    var_dump($array_error);

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    merci beaucoup pour vos réponses
    oui vous avez raison cela pourrais etre une tache difficile pr l'utilisateur , mais il n'ya pas une maniere de le faire parceke les donnees doivent etre valides avant d'etre chargés.

    merci bcp pour le code je ne comprend pas ce ke fais cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      $array_error[] = array($csv_line->key(), 0); //on insère un tableau contenant les coordonnées du champ invalide
    merciii

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    merci beaucoup pour vos réponses
    oui vous avez raison cela pourrais etre une tache difficile pr l'utilisateur , mais il n'ya pas une maniere de le faire parceke les donnees doivent etre valides avant d'etre chargés.

    merci bcp pour le code je ne comprend pas l'expression ($csv_line->key() dans cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      $array_error[] = array($csv_line->key(), 0); //on insère un tableau contenant les coordonnées du champ invalide
    merciii

  8. #8
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par ascito Voir le message
    et si tu veux traiter l’intégralité du tableau ou une portion ( par exemple ligne 1 à 200 ), je ferais ça en ajax avec jquery par exemple


    Mais comme je ne connais pas trop ton niveau, je ne sais pas vraiment quelle meilleures solution te conseiller
    je suis debutante et je ne connais pas ajax ou jquery

    est ce que ça pourra résoudre mon problème j'aimerai bien afficher les données erronées pour l'utilisateur et lui permettre de les corriger

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Citation Envoyé par html.php Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      $array_error[] = array($csv_line->key(), 0);
    key() récupère le numéro de ligne en cours.
    En fait, on crée ici un tableau contenant deux coordonnées: le numéro de ligne (donné par $csv_line->key()) et le numéro de colonne (dans cet exemple, c'est 0 car la colonne testée est 0). Ce tableau est ensuite inséré dans le tableau $array_error.

    La solution pour faciliter la tâche de l'utilisateur serait effectivement en cas d'erreur de transformer le csv en tableau, puis à l'aide des coordonnées données par $array_error de surligner les "cases" invalides et lui demander de les corriger.

    Une fois que l'ensemble des données est valide, il faut ensuite que tu enregistre le fichier csv toi-même.

    Ajax/jQuery ne sont pas obligatoires, mais faciliteront l'utilisation de la page.

    Est-ce que tu as une idée du nombre d'enregistrement des fichiers csv ?

  10. #10
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Tsilefy Voir le message
    La solution pour faciliter la tâche de l'utilisateur serait effectivement en cas d'erreur de transformer le csv en tableau, puis à l'aide des coordonnées données par $array_error de surligner les "cases" invalides et lui demander de les corriger.
    est ce que il existe une manière pour donner la main a l'utilisateur pour qu'il puisse corriger sur la page ?
    Est-ce que tu as une idée du nombre d'enregistrement des fichiers csv ?
    oui le fichier contient 2 feuilles (je compte traiter chaque feuille separement) et le nombre de colonne est 33 pour la premiere et 35 pour l'autre le nombre de lignes depasse 200

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    en testant le code de Tsilefy je reçois ce message d'erreur
    Undefined variable: csv_line
    et aussi
    Fatal error: Call to a member function key() on a non-object
    avez vous une idée svp

  12. #12
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Oui.
    Ce n'est pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array($csv_line->key(), 0)
    , c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array($csv_file->key(), 0)

  13. #13
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Citation Envoyé par html.php Voir le message
    est ce que il existe une manière pour donner la main a l'utilisateur pour qu'il puisse corriger sur la page ?

    oui le fichier contient 2 feuilles (je compte traiter chaque feuille separement) et le nombre de colonne est 33 pour la premiere et 35 pour l'autre le nombre de lignes depasse 200
    Pour donner la main à l'utilisateur, le meilleur choix comme indiqué est d'afficher le csv sous forme de formulaire contenant un tableau dans lequel les champs invalides seraient éditables (sous forme d'input text) et un bouton "Envoyer" en bas. L'utilisateur corrige ensuite les champs et soumets le formulaire.

    Une fois que tous les champs sont valides, tu enregistres ensuite le fichier CSV.

    Par contre, est-ce que tu sais comment traiter un fichier csv multifeuilles (qui n'est pas une fonctionnalité native de csv et donc pas prise en charge d'origine par PHP). Il faut donc que tu utilises une librairie du genre PHPExcel pour ça.

  14. #14
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    j'ai eu recours au csv parceque je n'ai pas trouvé une maniere pour traiter un fichier excel. je n'ai pas beaucoupde connaissance mais mon idée et de créer une base de données pour chaque feuille et traiter chaque feuille de la meme manière .

    quand j'ai modifier dans le code je reçois des erreur comme
    Notice: Undefined offset: 1
    Undefined offset: 2
    .... etc

  15. #15
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    le souci pour moi c'est récuperer ces champs qui contiennent une erreur sous forme d'un tableaux editable, j'ai déja etablie les condition de validité pour les 33 champs avec les regex mais comment faire maintenant pour realiser cette tache

  16. #16
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Oui, mais PHP en natif (c'est-à-dire sans librairies supplémentaires) ne pourra pas traiter un CSV multi-feuilles (d'ailleurs, si tu enregistres un fichier Excel au format CSV, Excel t'informera qu'il ne peut enregistrer que la feuille active.

    Donc, désolé, mais si tu veux vraiment traiter des fichiers avec plusieurs feuilles, CSV n'est pas une solution appropriée.

    Une possible solution serait d'utiliser PHPExcel, discussions ici pour travailler directement avec un fichier Excel. Bien évidemment, cela complique la tâche, mais je ne pense pas que tu aies le choix si tu veux du multifeuille.

    Donc:
    1- l'utilisateur uploade le fichier excel
    2- tu parcours les 2 feuilles du fichier excel à la recherche de données invalides
    3- tu affiches les erreurs dans un tableau
    4- l'utilisateur corrige les erreurs et re-soumets
    5- si les données sont valides, tu enregistre les données (dans un fichier ou dans une base de données?).

    Si tu veux t'engager dans cette voix, je pourrais te donner un coup de main, mais il faut vérifier si tu as les extensions requises par PHPExcel: php_zip (facultatif, pour travailler avec les fichiers Xslx) et php_xml, et que tu as PHP 5.2 au moins.

  17. #17
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Tsilefy Voir le message
    1- l'utilisateur uploade le fichier excel
    2- tu parcours les 2 feuilles du fichier excel à la recherche de données invalides
    3- tu affiches les erreurs dans un tableau
    4- l'utilisateur corrige les erreurs et re-soumets
    5- si les données sont valides, tu enregistre les données (dans un fichier ou dans une base de données?).
    ce que vous avez cité c'est parfait et c'est normalement ce que je dois faire. et au debut j'ai essayé de traiter les fichiers excel mais j'ai pas réussie et avec csv ça a marché.
    je préfére excel à csv si cela va marcher.

    je travaille avec WampServer version 2.1 et utilise php 5.3.5



    mercii bcp pr votre aide

  18. #18
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    je n'ai encore pas arrivé à résoudre mon problème, c'est dans le cadre d'un stage et je dois rendre le travail après une semaine aidez moi svp

  19. #19
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Ok, on va y aller progressivement.

    Je suppose que tu sais comment traiter de l'upload du fichier, donc j'ai sauté cette étape.

    Dans le zip joint, tu as l'ensemble de PHPExcel, plus un fichier index.php à la racine du dossier Excel, qui fait les choses suivantes (pour l'instant):
    - il récupère un fichier excel nommé test.xls (un fichier au hasard que j'ai pris sur le net).
    - il vérifie la validité des cellules (je ne fais qu'un test pour voir si les cellules contiennent des nombres ou pas. A toi de remplacer ça par tes expressions régulières ensuite).
    - il récupère les coordonnées des cellules invalides dans un array
    - et enfin, il affiche les lignes invalides dans un tableau, qui pour l'instant n'est pas éditable.

    Regarde-le, dis-moi si tu arrives à bien suivre et à l'adapter à tes propres fichiers excel. Ensuite, on passera au tableau éditable et à l'enregistrement des données proprement dite (au fait, les données seront-elles stockées dans des fichiers ou dans une base de données ?)
    Fichiers attachés Fichiers attachés

  20. #20
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Tsilefy Voir le message
    (au fait, les données seront-elles stockées dans des fichiers ou dans une base de données ?)
    le fichier devra etre stocké dans une base de données
    je vais regardé le code et essayé de l'adapter et vous dire si ça marche.
    merci ennormement pour votre aide merci bcp ça fais vraiment plaisir

Discussions similaires

  1. Recuperer les resultats d'une source de données
    Par xoorus dans le forum WinDev
    Réponses: 7
    Dernier message: 18/01/2012, 11h38
  2. DataSet , Recuperer les resultats d'une requete
    Par siro1 dans le forum Windows
    Réponses: 10
    Dernier message: 01/10/2009, 17h39
  3. Recuperer les resultats d'une recherche (urllib/urllib2)
    Par Mysti¢ dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 27/03/2008, 04h29
  4. [DOM] recuperer les resultat d'une requete
    Par naouah dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/07/2007, 17h13
  5. recuperer les resultats
    Par PAYASS59 dans le forum Langage
    Réponses: 9
    Dernier message: 17/02/2006, 09h06

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