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 :

lecture d'un fichier csv pour mise en bdd


Sujet :

Langage PHP

  1. #61
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    OK pour le nommage. J'avais pas vu qu'avec le nom pleinement qualifié de l'objet, on avait l'info...OK aussi pour faire plusieurs contrôleurs, plutôt qu'une classe unique avec plusieurs méthodes.
    Je ne pourrai m'en occuper qu'en fin d'après-midi, et du renommage, il vaut mieux le faire d'une traite, sinon, on oublie des trucs et on passe un temps fou à trouver. Quand ça sera fait, je reviendrai.

  2. #62
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Je reviens !! Oui, le renommage est fait (depuis 2 jours). Comme je l'ai dit dans une autre discussion, j'avais un souci de découpage en plusieurs classes. Avant d'aller plus loin, je souhaite valider ce point-là.

    Donc voici le code de mon contrôleur :

    Code php : 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
    <?php
    declare(strict_types=1);
    namespace controller;
    use vendor\PhpEcho\PhpEcho;
    use controller\dispCSVUpload;
    use controller\manageFile;
     
     
     
    class controller
    {
        public function controller()
        {
            $ret=false;
            $_SESSION="";
     
            $disp_form_upload = new dispCSVUpload(); //class in controller
            $disp_form_upload->dispFormUpload();
     
            $filepath = $_SESSION['filepath'] ?? NULL;
            $manage_file = new manageFile();    //class in controller
            $ret=$manage_file->manageFile($filepath);
     
            if (!$ret)
            {
                $body = new PhpEcho();
                $body->setCode('<p>This file is not a .csv file</p>');
                echo new PhpEcho([DIR_ROOT, 'view Layout.php'], ['body' => $body]);
            }
            else
            {
                echo new PhpEcho([DIR_ROOT, 'view linkAnalyze.php']);
            }
        }
    }
    L'idée est qu'il appelle 2 contrôleurs (upload puis vérification de l'extension du fichier) et si tout va bien, on a le lien html pour lancer l'analyse. (l'affichage de ce lien se fait via PhpEcho). Je ne donne volontairement aucun code supplémentaire car je voudrais déjà valider ce principe. Que pensez-vous de ça ?

  3. #63
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut Laurent,

    je n'arrive pas à comprendre pourquoi tu n'arrives pas à diviser ton projet en blocs simples, vraiment je ne vois pas de raison.
    Voici comment ton projet devrait s'articuler :
    www
     |--controller
     |      |--Home
     |      |--FormUpload
     |      |--FormUploadSubmit
     |      |--Analyze
     |--model
     |    |--CSVParser
     |    |--CSVAnalyze
     |--view
     |   |--Home
     |   |--FormUpload
     |   |--AnalyzeResult
     |--index.php
    Et si tu décides que dès qu'un fichier valide téléversé est envoyé à l'analyseur tu peux même raccourcir un peu ce schéma en :
    www
     |--controller
     |      |--Home
     |      |--FormUpload
     |      |--FormUploadSubmitAndAnalyze
     |--model
     |    |--CSVParser
     |    |--CSVAnalyze
     |--view
     |   |--Home
     |   |--FormUpload
     |   |--AnalyzeResult
     |--index.php
    Et par pitié arrête ton nommage foireux : namesapce controller; class controller; function controller() ce qui donne : \controller\controller->controller(). Heureusement que tu dis avoir repris le nommage, heureusement !!!

    Voici un prototype de nommage adapté à ta manière de coder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php declare(strict_types=1);
     
    namespace controller;
     
    class FormUpload
    {
        public function invoke()
        {
            // ...
        }
    }
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php declare(strict_types=1);
     
    namespace controller;
     
    class FormUploadSubmitAndAnalyze
    {
        public function invoke()
        {
            // ...
        }
    }

  4. #64
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Bonsoir,
    En fait, je crois que je n’étais pas loin de ton approche. J’ai renommé les classes et méthodes et légèrement modifié mon code pour être le proche possible de ton approche.
    Du coup, voici mon contrôleur (home.php) :
    Code php : 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
     <?php
    declare(strict_types=1);
    namespace controller;
    use vendor\PhpEcho\PhpEcho;
    use controller\FormUpload;
    use controller\FormUploadSubmit;
    use controller\Analyze;
     
    class home
    {
        public function invoke()
        {
            $form_upload = new FormUpload(); //class in controller
            $filepath=$form_upload->dispFormUpload();  // $filepath is the complete path of the file
     
            $manage_file = new FormUploadSubmit();    //class in controller
            $ret=$manage_file->invoke($filepath);     // check if extension's file is csv
     
            $analyze=new Analyze();
            $analyze->invoke($ret); // analyze only if $ret is true
        }
    }
    Validons déjà cela avant de détailler les classes.

  5. #65
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    je ne comprends toujours pas ce que tu fais.
    Relis-toi : un contrôleur en charge de gérer le traitement de la page d'accueil qui appelle et exécute tous les contrôleurs de ton application. Non mais, WTF ???
    Pourtant, c'est pas faute d'avoir déjà abordé plusieurs fois avec toi les points relatifs au découpage de ton code en blocs simples.

    C'est la dernière fois, après je lâche l'affaire, tu te débrouilleras sans moi.
    Je pars sur ce découpage :
    www
     |--controller
     |      |--Home
     |      |--FormUpload
     |      |--FormUploadSubmit
     |--model
     |    |--CSVParser
     |    |--CSVAnalyze
     |--view
     |   |--Layout
     |   |--Home
     |   |--FormUpload
     |--index.php
    Tu décides de rediriger absolument toutes les url vers ton script index.php (soit en dur soit en utilisant le mécanisme de redirection de ton serveur web). Donc toutes les url vont pointer vers index.php et tu décides que chaque URL devra avoir un paramètre action pour être compatible avec ton système de routage : donc toutes les url devront être de la forme https://www.tonsite.com/index.php?action=XXXX et si l'action ne correspond à rien dans ton application, tu renvoies sur la page d’accueil.

    1. tu codes le layout général de ta page : View\Layout,
    2. tu codes le bloc vue Accueil (variable 'body' dans le layout) : View\Home,
    3. tu codes le bloc vue Envoi de fichier (variable 'body' dans le layout) : View\FormUpload,

    4. le routage : tu décides les actions pour lesquelles il existe un traitement spécifique :
    • action=form => affichage du formulaire d'upload (contrôleur controller\FormUpload)
    • action=formsubmit => soumission et traitement de l'upload (contrôleur controller\FormUploadSubmit)
    • pour toutes les autres actions, tu renvoies la page d'accueil

    5. tu codes le contrôleur controller\Home qui ne fait qu'afficher la page d'accueil :
    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
    <?php declare(strict_types=1);
     
    namespace controller;
     
    use vendor\PhpEcho\PhpEcho;
     
    class Home
    {
        public function invoke()
        {
            $page = new PhpEcho([DIR_ROOT, 'view Layout.php']);
            $page->addChild('body', [DIR_ROOT, 'view Home.php']);
            echo $page;
        }
    }
    6. tu codes le contrôleur controller\FormUpload qui ne fait qu'afficher le formulaire d'upload :
    Attention : l'url de soumission du fichier dans le code de la vue doit être https://www.tonsite.com/index.php?action=formsubmit, elle doit absolument correspondre à ce qui a été décidé au niveau du routage.
    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
    <?php declare(strict_types=1);
     
    namespace controller;
     
    use vendor\PhpEcho\PhpEcho;
     
    class FormUpload
    {
        public function invoke()
        {
            $page = new PhpEcho([DIR_ROOT, 'view Layout.php']);
            $page->addChild('body', [DIR_ROOT, 'view FormUpload.php']);
            echo $page;
        }
    }
    7. tu codes le contrôleur controller\FormUploadSubmit qui se charge de la soumission et du traitement du fichier uploadé
    J'ai fait au plus simple, si tout se déroule sans accroc, je renvoie la page du formulaire d'upload avec juste un message 'Fichier importé avec succès'
    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
    <?php declare(strict_types=1);
     
    namespace controller;
     
    use vendor\PhpEcho\PhpEcho;
    use model\CSVParser;
    use model\CSVAnalyze;
     
    class FormUploadSubmit
    {
        public function invoke()
        {
            // ici tu gères le fichier uploadé avec $_FILES
            // ....
     
            $page = function(string $msg): PhpEcho {
                // on renvoie le formulaire d'upload en indiquant un message
                $page = new PhpEcho([DIR_ROOT, 'view Layout.php']);
                $page->addChild('body', [DIR_ROOT, 'view FormUpload.php'], ['msg' => $msg]);
                return $page;
            };
     
            // tu vérifies la validité, tu retires l'éventuel BOM
            $parser = new CSVParser();
            if ($parser->checkFile('path/to/the/uploaded/file') === false) {
                echo $page('Fichier non conforme');
                exit;
            }
     
            // fichier conforme et sans BOM : on lance l'analyse
            $analyzer = new CSVAnalyze;
            if ($analyzer->parse('path/to/the/uploaded/file') === false) {
                echo $page('Contenu du fichier non conforme');
                exit;
            }
     
            // fichier conforme, contenu conforme, on sauvegarde en base de données
            // je le ferais directement avec l'analyseur
            if ($analyzer->saveToDb()) {
                echo $page('Fichier importé avec succès');
            } else {
                echo $page('Importation impossible');
            }
        }
    }
    Je pense que tu peux regrouper avantageusement tous les traitements au sein d'un seul fichier modèle CSVImport.php

    Si avec ça, tu n'arrives toujours pas à comprendre, c'est que, soit je suis vraiment une brêle dans ma manière d'expliquer, soit c'est toi.

  6. #66
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Pour PhpEcho, prends la dernière version sur mon dépôt Github : version 2.3.2
    ainsi cette syntaxe te sera disponible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $page->addChild('body', [DIR_ROOT, 'view FormUpload.php']);

  7. #67
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut

  8. #68
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    J'ai des difficultés à utiliser la nouvelle version de PhpEcho. Pourrais-tu STP répondre au commentaire que j'ai fait dans ton blog ? https://www.developpez.net/forums/bl.../#comment13876

  9. #69
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut Laurent

    tu as bien pris les deux fichiers : PhpEcho.php et stdHelpers.php ?
    L'un ne va pas sans l'autre.

    Pour le blog, je ne reçois aucune notification quand un commentaire est posté. J'ai essayé plein de trucs, mais rien à faire ça ne veut pas. Donc il est préférable de laisser tomber les commentaires dans le blog au profit du forum.

  10. #70
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    OK pour privilégier le forum.

    Oui, j'ai bien pris les 2 fichiers. Voici ce que j'ai écrit en fin de matinée :
    Bonjour,
    je tente d'utiliser cette nouvelle version. Tu m'as dit qu'il y a une nouvelle syntaxe (avec addChild). J'ai essayé d'adapter l'exemple d'utilisation de la version 1 avec cette syntaxe, mais c'est pas bon. De plus, dans ton billet, cette syntaxe n'est pas évoquée. Et mon essai n'est pas bon. Pourrais-tu le corriger ? (et compléter ton billet) :

    login.php :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $page = new PhpEcho([DIR_ROOT, 'view Layout.php']);
    $page->addChild('body', [DIR_ROOT, 'view LoginForm.php'], [
        'url_submit' => '/index.php?page=loginsubmit',
        'login'      => 'rawsrc'
    ]);
    echo $page;

    j'ai aussi modifié loginform.php :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <p>Veuillez vous identifier</p>
    <form method=post action="<?= URL_HOME.$this['url_submit'] ?>">
        <label>Identifiant</label>
        <input type="text" name="login" value="<?= $this['login'] ?>"><br>
        <label>Mot de passe</label>
        <input type="password" name="pwd" value=""><br>
        <input type="submit" name="submit" value="SE CONNECTER">
    </form>
    <br>
    <p style="display:<?= $this['show_error'] ?? 'none' ?>"><strong><?= $this['err_msg'] ?></strong></p>
    plus de notation appel de fonction.
    Visiblement, le tableau passé ligne 3 et 4 de login.php n'est pas attendu. Comment faire ? (J'ai bien pris la version sur GitHub)

  11. #71
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ok essaie avec comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $page->addChild('body', 'LoginForm.php', [
        'url_submit' => '/index.php?page=loginsubmit',
        'login'      => 'rawsrc'
    ]);
    addChild() utilise comme point de départ, le répertoire courant, c'est pour cette raison que la notation tableau n'est plus permise. C'est une injection relative.

    J'ai bien mis à jour la doc sur Github mais je devrais refaire une grosse mise à jour sur DVP pour coller aux nouveautés de la version 2.3.2
    Apres dans PhpStorm, tu n'as qu'à faire CTRL+q pour avoir accès au PHPDoc de la fonction

  12. #72
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    C'est magique, ça marche

    En fait, je n'ai pas regardé la doc dans GitHub ; je me suis contenté d'y télécharger les 2 fichiers.

    Je vais passer à ton post d'hier...

    CTRL+q sur le nom du fichier ; effectivement, y a bien une doc qui s'affiche, mais c'est très limité (nom du fichier, sa taille, son type, date de dernière modif et date de création)

  13. #73
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Salut,
    je m'y suis mis hier soir, et j'avais du mal à démarrer à tel point que j'avais commencé à écrire un post et il ne restait plus qu'à cliquer sur le bouton "envoyer" quand la lumière est venue !
    Néanmoins, ce matin, nouvelle difficulté. La page d'accueil est très simple pour le moment ; elle n'affiche que this is the homepage. Par contre, mon idée est de factoriser l'affichage du menu sur chaque page et là, ça se complique. J'ai fait plusieurs essais infructueux.

    1. mettre le menu dans layout.php.
    2. appeler une méthode dans chaque page
      en mettant ces 3 lignes en début de chaque page :
      Code php : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      use view\DispMenu;
       
      $menu=new DispMenu();
      $menu->dispMenu();

      DispMenu.php :
      Code php : 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
      <?php
      namespace view;
      use vendor\PhpEcho\PhpEcho;
      class DispMenu
      {
      public function dispMenu()
      {
          $page = new PhpEcho([DIR_ROOT, 'view Layout.php']);
       
          $page->addChild('body', 'Menu.php', [
              'view' => 'View',
              'controller' => 'Controller',
              'select' => 'Select',
              'array' => 'Array'
          ]);
       
          // on renvoie au navigateur la page assemblée
          echo $page;
      }
      }  // end of class  DispMenu
      ?>
      et Menu.php (pas à jour) :
      Code php : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      <ul>
           <li><a href="#"><?= $this['view'] ?></a>
           <ul>
               <li><a href="?action=<?= $this['view'] ?>" target="_blank"><?= $this['select'] ?></a></li>
               <li><a href="?action=<?= $this['array'] ?>" target="_blank"><?= $this['array'] ?></a></li>
       
           </ul>
           </li>
           <li><a href="?action=<?= $this['controller'] ?>" target="_blank"><?= $this['controller'] ?></a></li>
      </ul>


    Mais au lieu d'afficher le menu, ça affiche
    Fatal error: Cannot declare class rawsrc\PhpEcho\PhpEcho, because the name is already in use in C:\xampp\htdocs\www\ticket3\vendor\PhpEcho\PhpEcho.php on line 58
    Comment je peux faire ?

  14. #74
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    J'ai mis de côté le souci du menu et suis passé à la vue pour afficher le formulaire d'upload. Et nouvelle difficulté :

    view/formupload.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <!-- form to upload a csv file from the hard disk -->
    <form action="<?php echo URL_LOCALHOST. DIRECTORY_SEPARATOR .'www'. DIRECTORY_SEPARATOR .'PROJECT_NAME'. DIRECTORY_SEPARATOR . 'index
    .php?action=formsubmit';
    ?>" method="post" enctype="multipart/form-data">
        <label for="file2"><b>File CSV</b></label>
        <input type="file" name="file2" id="file2"><br/>
        <input type="submit" name="submitfile2" value="CSV file download"><br/>
    </form>
    comme l'application restera en local, je peux mettre l'action comme ça.

    Dans le routeur, j'ai : 'formsubmit'=>'view/home.php' (pour l'instant, le traitement du fichier n'est pas codé). Par contre, quand je clique sur le bouton de submit :
    Accès interdit!

    Vous n'avez pas le droit d'accéder à l'objet demandé. Soit celui-ci est protégé, soit il ne peut être lu par le serveur.

    Si vous pensez qu'il s'agit d'une erreur du serveur, veuillez contacter le webmestre.
    et dans la barre d'adresse, il y a http://localhost/www/ticket3/view/%3Cbr%20/%3E%3Cb%3EWarning%3C/b%3E:%20%20Use%20of%20undefined%20constant%20URL_LOCALHOST%20-%20assumed%20'URL_LOCALHOST'%20(this%20will%20throw%20an%20Error%20in%20a%20future%20version%20of%20PHP)%20in%20%3Cb%3EC:/xampp/htdocs/www/ticket3/view/formUpload.php%3C/b%3E%20on%20line%20%3Cb%3E5%3C/b%3E%3Cbr%20/%3EURL_LOCALHOST/www/PROJECT_NAME/index.php?action=formsubmit et le code source de la page qui affiche le formulaire :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <!-- form to upload a csv file from the hard disk -->
    <form action="<br />
    <b>Warning</b>:  Use of undefined constant URL_LOCALHOST - assumed 'URL_LOCALHOST' (this will throw an Error in a future version of PHP) in <b>C:\xampp\htdocs\www\ticket3\view\formUpload.php</b> on line <b>5</b><br />
    URL_LOCALHOST\www\PROJECT_NAME\index
    .php?action=formsubmit" method="post" enctype="multipart/form-data">
        <label for="file2"><b>File CSV</b></label>
        <input type="file" name="file2" id="file2"><br/>
        <input type="submit" name="submitfile2" value="CSV file download"><br/>
    </form>
    Donc il ne comprend pas la constante définie dans Config.php...

  15. #75
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut Laurent,

    on va reprendre le découpage des vues.
    Tu dois raisonner en blocs vue, pages et layout et surtout penser simple.

    l'arborescence des dossiers :
    www
     |--view
          |--Block
          |    |--Nav.php
          |    |--FormUpload.php
          |--Home.php
          |--Layout.php
    Le bloc Nav.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <nav>
        <ul>
            <li><a href="<?= $this['view'] ?>"></a>
                <ul>
                    <li><a href="?action=<?= $this['view'] ?>" target="_blank"><?= $this['select'] ?></a></li>
                    <li><a href="?action=<?= $this['array'] ?>" target="_blank"><?= $this['array'] ?></a></li>
                </ul>
            </li>
            <li><a href="?action=<?= $this['controller'] ?>" target="_blank"><?= $this['controller'] ?></a></li>
        </ul>
    </nav>
    Le bloc FormUpload.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form action="?action=formsubmit" method="post" enctype="multipart/form-data">
        <label for="file2"><b>File CSV</b></label>
        <input type="file" name="file2" id="file2"><br/>
        <input type="submit" name="submitfile2" value="CSV file upload"><br/>
    </form>
    Le Layout.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <!DOCTYPE html>
    <html>
    <head>
    <base href="<?= $this->raw('base_href') ?>">
    </head>
    <body>
    <?= $this['nav'] ?>
    <?= $this['body'] ?>
    </body>
    </html>
    Et la page Home.php
    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
    <?php 
     
    use vendor\PhpEcho\PhpEcho;
     
    $layout = new PhpEcho([DIR_ROOT, 'view Layout.php'], ['base_href' => URL_LOCALHOST]);
     
    $layout->addChild('nav', 'Block Nav.php', [
        'view' => 'View',
        'controller' => 'Controller',
        'select' => 'Select',
        'array' => 'Array'
    ]);
     
    $layout->addChild('body', 'Block FormUpload.php');
     
    return $layout;
    Reste simple dans le déroulé de la logique.
    Le but de PhpEcho c'est de te permettre de découper toutes tes vues en blocs simples (autonomes) que tu peux agencer ensuite selon tes besoins.

  16. #76
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Penser simple qu'il a dit le monsieur...D'ailleurs, ce mot revient 3 fois dans ton dernier post. Cela dit, ton code ne l'est pas assez pour moi. Alors, je me suis dit : on va le mettre dans PhpStorm et il sera plus facile de l'étudier. Je l'ai fait, puis ai exécuté le code pour voir et...
    Fatal error: Cannot declare class rawsrc\PhpEcho\PhpEcho, because the name is already in use in C:\xampp\htdocs\www\ticket3\vendor\PhpEcho\PhpEcho.php on line 58
    Ce que j'ai le plus de mal à comprendre :
    • l'appel de la méthode raw ligne 4 de layout.php
    • le 2e argument passé à PhpEcho ligne 5 de Home.php


    Mon prochain objectif : avoir un truc à montrer jeudi après-midi, avec au moins la lecture des CSV et l'idéal, leur mise en BDD.

  17. #77
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut,

    comme je ne sais pas ce que t'utilises dans ton environnement, tu ne dois pas redéclarer deux fois la classe PhpEcho. En gros, tu ne dois faire qu'une seule et unique fois dans index.php include 'vendor/PhpEcho/PhpEcho'; et ensuite partout où t'as besoin de PhpEcho, juste faire use PhpEcho;.
    Bref tu dois adapter mon code à ton environnement.

    Dans Layout.php, tu as <base href="<?= $this->raw('base_href') ?>">, si tu regardes le fichier des helpers stdHelpers.php, tu verras la définition de $raw = function()... qui ne fait que retourner la valeur sans l'échapper. Comme tout est échappé par défaut dans PhpEcho, il faut utiliser cet helper pour dire au moteur que ce n'est pas la peine de l'échapper.
    Si tu regarde le layout, il attend 3 paramètres pour fonctionner : 'base_href', 'nav' et 'body'. Donc quand on instancie le layout, on lui passe la valeur du premier paramètre, ensuite $layout->addChild('nav', ...) s'occupe de fournir un bloc PhpEcho en guise de valeur au paramètre 'nav' et $layout->addChild('body', ...) fait de même pour 'body'. C'est totalement modulaire.

  18. #78
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Merci pour ta réponse.
    Inspection faite, j'ai un seul include de PhpEcho. J'ai mis à la place include_once mais l'erreur reste. Je reprendrai la question demain matin...

  19. #79
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Hello,
    essayant de voir d'où vient ce message d'erreur, j'ai simplifié à outrance view/home.php echo "this is the homepage<br/>"; et l'erreur s'en va, mais si je rajoute une ligne :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
    use vendor\PhpEcho\PhpEcho;
    echo "this is the homepage<br/>";
     
    //$layout = new PhpEcho([DIR_ROOT, 'view Layout.php'], ['base_href' => URL_LOCALHOST]);
    $layout = new PhpEcho([DIR_ROOT, 'view Layout.php']);
    et ai aussi simplifié Layout.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <!DOCTYPE html>
    <html>
    <head>
      <!--  <base href="<?= //$this->raw('base_href') ?>">-->
    </head>
    <body>
    <!--<?= //$this['nav'] ?>-->
    <?= $this['body'] ?>
    </body>
    </html>
    l'erreur revient. Pourquoi ?

  20. #80
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    t'as essayé avec juste use PhpEcho; ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/01/2008, 13h48
  2. Réponses: 3
    Dernier message: 03/01/2008, 12h14
  3. pb de lecture dans un fichier CSV
    Par MayOL69bg dans le forum C#
    Réponses: 3
    Dernier message: 23/05/2007, 14h21
  4. Réponses: 3
    Dernier message: 19/05/2007, 17h19
  5. Linges sautées dans "lecture" d'un fichier .csv
    Par Mymi dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/08/2006, 20h02

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