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 :

Quelle conception pour ma classe Ticket ? [POO]


Sujet :

Langage PHP

  1. #21
    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,
    j'ai créé une 3e classe, csvUpload ; une classe, vu que je n'ai pas une architecture MVC et qui y a pas de controller (y a juste un routage basique créé par rawsrc (cf le post #1 de la discussion) ).
    Pour insérer ton code (que tu donnais hier au post #18), j'ai crée une nouvelle classe csvManage qui appelle la classe csvUpload :
    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
     
     
    class csvManage
    {
        private $csv_file_name;
       /* Constructor */
    public function __construct()
    {
     
    }
     
    public function csvManage()
    {
        $csv_upload=new csvUpload();
        $this->csv_file_name=$csv_upload->construct2();
        /*$parser = new csvParser($this->csv_file_name);
        $data = $parser->parse();
        
        $pdo  = new MYPDO();
     
        $writer = new DbWriter($pdo);
        $writer->write($data);*/
    }
     
    } //end class  csvManage
    A noter que j'ai du créer la méthode construct2 car je ne pouvais utiliser la méthode __construct , sinon, on l'appelle 2 fois. La partie en commentaire, c'est car ces classes sont pas encore écrites.

  2. #22
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    La conception ce tiens.
    Par contre ton histoire de construct2 j'ai pas compris. Ton construct est appelé quand tu fais le New c'est tout , il est jamais appelé 2x

  3. #23
    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
    Zut, persuadé d'avoir répondu et je viens de découvrir que non...

    Finalement, tant mieux, car plus en forme que l'autre jour, cette fois, je n'ai plus qu'un seul appel du constructeur :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public function csvManage()
    {
        $this->csv_file_name=new csvUpload();
        //$this->csv_file_name=$csv_upload->construct2();
        /*$parser = new csvParser($this->csv_file_name);
        $data = $parser->parse();
        
        $pdo  = new MYPDO();
     
        $writer = new DbWriter($pdo);
        $writer->write($data);*/
    }

    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
    class csvUpload
    {
       /* Constructor */
    public function __construct()
    {
        $page = new PhpEcho([DIR_ROOT, 'view Layout.php']);
     
        $body = new PhpEcho([DIR_ROOT, 'view formCsvUpload.php'], []);
        $page['body'] = $body;
     
        // on renvoie au navigateur la page assemblée
        echo $page; 
     
         // one checks the extension, and if not csv, one exits
         if (isset($_POST['submitfile1'])) {
            $info =  pathinfo($_FILES['file1']["name"], PATHINFO_EXTENSION);
            if ($info!='csv') {
                $body = new PhpEcho('', ['msg_error' => "this file is not a csv"]);
                $body->setCode('<p>'.nl2br($body('msg_error')).'<br></p>');
                echo new PhpEcho([DIR_ROOT, 'view Layout.php'], ['body' => $body]);
                exit;
            }
            else 
            {
                $body = new PhpEcho('', ['msg_end' => $_FILES['file1']["name"]." is uploaded"]);
                $body->setCode('<p>'.nl2br($body('msg_end')).'<br></p>');
                echo new PhpEcho([DIR_ROOT, 'view Layout.php'], ['body' => $body]);
                return $_FILES['file1']["name"];
            }
        }
    }
     
     
    } //end class csvUpload

  4. #24
    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 une difficulté pour créer les classes csvParser et DbWriter : en effet, j'ai plusieurs types de fichiers csv et selon ce type, on enregistre pas du tout les mêmes données en bdd (les colonnes des csv sont différentes). Donc comment faire ? Est-que dans le constructeur des classes, je passe en argument le type du csv pour savoir derrière quel traitement faire ?

  5. #25
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Parser un CSV avec fgetcsv c'est indépendant des colonnes.
    Là où les colonnes entrent en jeu c'est si tu veux en récupérer que certaines.

    On peut donc imaginer que tu passer à ta classe CSVParser les colonnes que tu souhaites lire dans le CSV. Si le tableau passé est vide c'est qu'on retourne toute les colonnes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $cols = [0,4,5];
    $parser = new CSVParser('fichier.csv');
    $datas = $parser->parse($cols);
    //$datas sera un tableau ne contenant que les colonnes se nommant 0 et 4 et 5 du fichier csv
    Si tes fichiers contiennent une première ligne avec le nom de colonnes tu peux aussi utiliser ce nom de colonne plutôt qu'un indice , ce qui rend le script plus robuste au changement dans le fichier.

    Pour les classes de BDD soit tu fait une méthode par type de données à écrire soit une classe par type de données qui dérive toutes d'une classe mère qui gère les opération commune

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $cols = [0,4,5];
    $parser = new CSVParser('fichier.csv');
    $datasType1 = $parser->parse($cols);
     
    $parser2 = new CSVParser('autrefichier.csv');
    $datasType2 = $parser->parse();
     
    $db = new DbWriter($pdo);
    $db->writeType1($datasType1);
    $db->writeType2($datasType2);

  6. #26
    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
    Ca va être un peu plus compliqué que seulement trier parmi les colonnes, car il faut aussi faire des manipulations pour mettre les données au format SQL...

  7. #27
    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
    La mise en forme des données au format SQL, il est plus logique de la mettre dans la classe DbWriter, non ?

  8. #28
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Oui

  9. #29
    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
    La classe csvUpload s'occupe d'uploader le fichier. Ensuite, elle doit le passer à la classe csvParser.
    Je pensais écrire cela :
    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
     
    class csvUpload
    {
    public function __construct
    {
    ...
    return($_FILES['file1']);
    } // end __construct
    }  // end class csvUpload
     
    class csvManage
    {
    public function csvManage()
    {
        $file=new csvUpload();
     
        $parser = new csvParser($file);
    }   // end method csvManage
    }  // end class csvManage
    mais des var_dump me disent que c'est pas bon (la varaible $file). Faut écrire comment ?

  10. #30
    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 vais donner du code, ce qui, j'espère, aidera à m'aider.

    csvUpload.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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    <?php
    namespace classes;
    use DateTime;
    use vendor\PhpEcho\PhpEcho;
    use vendor\rawsrc\Request;
    use classes\MYPDO;    //to use class MYPDO 
     
    class csvUpload
    {
        private $type_file;
     
       /* Constructor */
    public function __construct()
    {
        $page = new PhpEcho([DIR_ROOT, 'view Layout.php']);
     
        $body = new PhpEcho([DIR_ROOT, 'view formCsvUpload.php'], []);
        $page['body'] = $body;
     
        // on renvoie au navigateur la page assemblée
        echo $page; 
     
         // one checks the extension, and if not csv, one exits
         if (isset($_POST['submitfile1'])) {
            $info =  pathinfo($_FILES['file1']["name"], PATHINFO_EXTENSION);
            if ($info!='csv') {
                $body = new PhpEcho('', ['msg_error' => "this file is not a csv"]);
                $body->setCode('<p>'.nl2br($body('msg_error')).'<br></p>');
                echo new PhpEcho([DIR_ROOT, 'view Layout.php'], ['body' => $body]);
                exit;
            }
            else 
            {
                $body = new PhpEcho('', ['msg_end' => $_FILES['file1']["name"]." is uploaded"]);
                $body->setCode('<p>'.nl2br($body('msg_end')).'<br></p>');
                echo new PhpEcho([DIR_ROOT, 'view Layout.php'], ['body' => $body]);var_dump($_FILES['file1']);
                return($_FILES['file1']);
            }
    }   // end  if (isset($_POST['submitfile1'])) 
     
    }   // end __construct
    } //end class csvUpload
    la var_dump de la ligne 37 donne
    array (size=5)
    'name' => string '20190930_SAM analysis of R&D tickets.csv' (length=40)
    'type' => string 'application/vnd.ms-excel' (length=24)
    'tmp_name' => string 'C:\wamp64\tmp\php918D.tmp' (length=25)
    'error' => int 0
    'size' => int 23845
    csvManage.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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <?php
    namespace classes;
    use DateTime;
    use vendor\PhpEcho\PhpEcho;
    use vendor\rawsrc\Request;
    use classes\MYPDO;    //to use class MYPDO 
    use classes\csvUpload;
    use classes\csvParser;
    use classes\DbWriter;
     
     
    class csvManage
    {
       // private $csv_file_name;
       /* Constructor */
    public function __construct()
    {
     
    }
     
    public function csvManage()
    {
        $ret=new csvUpload();
        var_dump($ret);
     
     
        //$parser = new csvParser($ret);
        /*$data = $parser->parse();
        var_dump($data);
        
        $pdo  = new MYPDO();
    
        $writer = new DbWriter($pdo);
        $writer->write($data);*/
    }
     
    } //end class  csvManage
    le var_dump de la ligne 25 donne
    object(classes\csvUpload)[4]
    private 'type_file' => null
    donc rien à voir avec le premier. Comment transmettre le fichier de la classe csvUpload à la classe csvManage ?

  11. #31
    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 laurentSc,

    je vois que tu t'accroches avec la POO ! Qu'un seul mot :

    Il faut reprendre un peu ton code parce que tu vas au devant de gros soucis si tu continues sur ta lancée.

    Le nommage au sein de ton code doit suivre des règles :
    - les noms des classes doivent toujours commencer par une majuscule : class csvUploadclass CsvUpload ou mieux danq ce cas : class CSVUpload,
    - les espaces de nom contribuant au nom pleinement qualifié d'une classe, ils doivent commencer aussi par une majuscule : namespace classes;namespace Classes;
    Note que généralement on démarre en minuscule le nom des répertoires servant à l'organisation du code sans qu'ils interfèrent dans les noms pleinement qualifiés.
    Concrètement cela veut dire que si par exemple tu as un dossier src sous www, src ne sert à rien d'autre qu'à ranger des fichiers mais aucun de ces fichiers n'est sur l'espace de nom namespace src;. Pour que cela fonctionne, il faut que dans ton autoloader, tu indiques juste que le chemin du fichier à charger est dans $path = DIR_ROOT.'src'.DIRECTORY_SEPARATOR.'Espace_de_nom_1'.DIRECTORY_SEPARATOR.'Espace_de_nom_2'.DIRECTORY_SEPARATOR.'Classe.php';
    Ensuite à la lecture de ton code pour la classe CSVUpload, elle ne fait que du rendu. Pourquoi ne pas l'avoir séparée du reste dans un espace de nom distinct du style View ?
    Et enfin, tu devrais séparer le traitement du fichier reçu du rendu et du parsage.

    Tu sépares le traitement en actions :
    - action 1 (route : queryaction=csvform) : affichage du formulaire d'upload de csv
    - action 2 (route : queryaction=csvupload) : soumission et vérification du formulaire d'upload

    Une fois ton URL analysée (découpée en morceaux ; Request), tu effectues le routage vers le fichier approprié.

    Ton action 1 pointe vers un fichier de traitement (ce que l'on appelle communément un contrôleur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
    use vendor\PhpEcho\PhpEcho;
    use Classes\CSVParser;
     
    // renvoi du formulaire d'upload de fichier
    echo new PhpEcho([DIR_ROOT, 'view Layout.php'], [
        'body' => new PhpEcho([DIR_ROOT, 'view formCsvUpload.php']);
    ]);
    Ton action 2 pointe vers un fichier de traitement (ce que l'on appelle communément un contrôleur) :
    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
    <?php
     
    use vendor\PhpEcho\PhpEcho;
    use Classes\CSVParser;
     
    // contrôle du fichier transmis
    if (isset($_POST['submitfile1'])) {
        $info =  pathinfo($_FILES['file1']['name'], PATHINFO_EXTENSION);
        if ($info !== 'csv') {
            $body = new PhpEcho();
            $body->setCode('<p>This file is not a .csv file</p>');
            echo new PhpEcho([DIR_ROOT, 'view Layout.php'], ['body' => $body]);
            exit;
        }
        else {
            $body = new PhpEcho('', ['msg_end' => $_FILES['file1']['name']." is uploaded, start processing."]);
            $body->setCode('<p>'.$body('msg_end').'<br></p>');
            echo new PhpEcho([DIR_ROOT, 'view Layout.php'], ['body' => $body]);
     
            // fichier ok, parsage
            $csv_parser = new CSVParser($_FILES['file1']);
            if ($csv_parser->parse()) {
                    $body = new PhpEcho('', ['msg_end' => $_FILES['file1']['name']." fully processed, without errors."]);
                    $body->setCode('<p>'.$body('msg_end').'</p>');
                    echo $body;
            } else {
                // traitement des erreurs remontées par le parser
            }
    } else {
        // aucun fichier transmis
    }
    Enfin quelque chose dans ce genre, à toi d'adapter.

  12. #32
    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 de m'avoir répondu. Je mets du temps à répondre, car j'ai du mal à utiliser ta réponse.

    Ce que j'ai compris : ce que tu nommes actions 1 et 2 (csvform et csvupload) vont être transmises au routeur basique que tu as écrit. Celui-ci attend des fonctions, donc j'ai cru qu'il fallait plutôt écrire :
    action 1 :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
     
    use vendor\PhpEcho\PhpEcho;
    use Classes\CSVParser;
     
    // renvoi du formulaire d'upload de fichier
    public function csvform()
    {
    echo new PhpEcho([DIR_ROOT, 'view Layout.php'], [
        'body' => new PhpEcho([DIR_ROOT, 'view formCsvUpload.php'])]);
    }
    ?>

    action 2 :
    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
    <?php
     
    use vendor\PhpEcho\PhpEcho;
    use Classes\CSVParser;
     
    public function csvupload()
    {
    // contrôle du fichier transmis
    if (isset($_POST['submitfile1'])) {
        $info =  pathinfo($_FILES['file1']['name'], PATHINFO_EXTENSION);
        if ($info !== 'csv') {
            $body = new PhpEcho();
            $body->setCode('<p>This file is not a .csv file</p>');
            echo new PhpEcho([DIR_ROOT, 'view Layout.php'], ['body' => $body]);
            exit;
        }
        else {
            $body = new PhpEcho('', ['msg_end' => $_FILES['file1']['name']." is uploaded, start processing."]);
            $body->setCode('<p>'.$body('msg_end').'<br></p>');
            echo new PhpEcho([DIR_ROOT, 'view Layout.php'], ['body' => $body]);
     
            // fichier ok, parsage
            $csv_parser = new CSVParser($_FILES['file1']);
            if ($csv_parser->parse()) {
                    $body = new PhpEcho('', ['msg_end' => $_FILES['file1']['name']." fully processed, without errors."]);
                    $body->setCode('<p>'.$body('msg_end').'</p>');
                    echo $body;
            } else {
                // traitement des erreurs remontées par le parser
            }
    } else {
        // aucun fichier transmis
    }
    }

    et dans le routeur basique, ajouter :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $actions = [
        'CsvManage' => ['class' => 'Classes\CSVManage', 'fonction' => 'csvManage'], 
        'CsvForm' => ['class' => 'Classes_view\CSVForm', 'fonction' => 'csvform'], 
        'CsvUpload' => ['class' => 'Classes_view\CSVUpload', 'fonction' => 'csvupload'], 
    etc
    Ca tient la route ou c'est n'importe quoi ?

  13. #33
    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
    Pour répondre à ma question du post précédent, le plus simple était de faire l'essai, mais en essayant d'implémenter mon essai, je ramasse un message d'erreur ...

    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
    36
    37
    38
    39
    <?php
    use vendor\PhpEcho\PhpEcho;
    use Classes\CSVParser;
     
    public function csvUpload()
    {
    // contrôle du fichier transmis
    if (isset($_POST['submitfile1'])) {
        $info =  pathinfo($_FILES['file1']['name'], PATHINFO_EXTENSION);
        if ($info !== 'csv') {
            $body = new PhpEcho();
            $body->setCode('<p>This file is not a .csv file</p>');
            echo new PhpEcho([DIR_ROOT, 'view Layout.php'], ['body' => $body]);
            exit;
        }
        else
        {
            $body = new PhpEcho('', ['msg_end' => $_FILES['file1']['name']." is uploaded, start processing."]);
            $body->setCode('<p>'.$body('msg_end').'<br></p>');
            echo new PhpEcho([DIR_ROOT, 'view Layout.php'], ['body' => $body]);
     
            // fichier ok, parsage
            $csv_parser = new CSVParser($_FILES['file1']);
            if ($csv_parser->parse()) {
                    $body = new PhpEcho('', ['msg_end' => $_FILES['file1']['name']." fully processed, without errors."]);
                    $body->setCode('<p>'.$body('msg_end').'</p>');
                    echo $body;
            } 
            else
            {
                    // traitement des erreurs remontées par le parser
            }
        } else 
        {
        // aucun fichier transmis
        }
    }
    }
    ?>

    Parse error: syntax error, unexpected 'public' (T_PUBLIC), expecting end of file in C:\wamp64\www\ticket\Classes\CSVUpload.php on line 5
    J'ai vu ça hier soir mais je n'en vois pas la raison...

  14. #34
    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,

    la visibilité d'une fonction (public, protected, private) n'est possible que dans le code source d'une classe ou d'un trait. Dans une interface, ne sont acceptées que les fonctions public (ce qui est somme toute logique). Là t'es en dehors de tous ces objets, donc ça ne doit être que function.

    Je te réponds plus détaillé tout à l'heure

  15. #35
    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
    En effet. Comme il me paraît plus judicieux que ce soit une classe et une méthode de la classe, j'ai changé :
    CSVUpload.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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    <?php
    use vendor\PhpEcho\PhpEcho;
    use Classes\CSVParser;
     
    Class CSVUpload
    {
    public function __construct()
    {}
    public function csv_upload()
    {
    // contrôle du fichier transmis
    if (isset($_POST['submitfile1'])) {
        $info =  pathinfo($_FILES['file1']['name'], PATHINFO_EXTENSION);
        if ($info !== 'csv') {
            $body = new PhpEcho();
            $body->setCode('<p>This file is not a .csv file</p>');
            echo new PhpEcho([DIR_ROOT, 'view Layout.php'], ['body' => $body]);
            exit;
        }
        else
        {
            $body = new PhpEcho('', ['msg_end' => $_FILES['file1']['name']." is uploaded, start processing."]);
            $body->setCode('<p>'.$body('msg_end').'<br></p>');
            echo new PhpEcho([DIR_ROOT, 'view Layout.php'], ['body' => $body]);
     
            // fichier ok, parsage
            $csv_parser = new CSVParser($_FILES['file1']);
            if ($csv_parser->parse()) {
                    $body = new PhpEcho('', ['msg_end' => $_FILES['file1']['name']." fully processed, without errors."]);
                    $body->setCode('<p>'.$body('msg_end').'</p>');
                    echo $body;
            } 
            else
            {
                    // traitement des erreurs remontées par le parser
            }
        } 
     /*   else 
        {
        // aucun fichier transmis
        }*/
    }
    }
    }
    ?>

    Mais quand j'instancie un objet de cette classe, il ne la trouve pas...

    CSVManage.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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <?php
    namespace Classes;
    use DateTime;
    use vendor\PhpEcho\PhpEcho;
    use vendor\rawsrc\Request;
    use Classes\MYPDO;    //to use class MYPDO 
    use Classes\CSVUpload;
    use Classes\CSVParser;
    use Classes\DbWriter;
     
     
    class CSVManage
    {
       // private $csv_file_name;
       /* Constructor */
    public function __construct()
    {
     
    }
     
    public function csv_manage()
    {
        $ret=new CSVUpload();
        var_dump($ret);
     
     
        //$parser = new csvParser($ret);
        /*$data = $parser->parse();
        var_dump($data);
        
        $pdo  = new MYPDO();
    
        $writer = new DbWriter($pdo);
        $writer->write($data);*/
    }
     
    } //end class  CSVManage

    Fatal error: Uncaught Error: Class 'Classes\CSVUpload' not found in C:\wamp64\www\ticket\Classes\CSVManage.php on line 23

  16. #36
    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
    regarde bien ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    use vendor\PhpEcho\PhpEcho;
    use Classes\CSVParser;
     
    Class CSVUpload
    1. donne moi le nom pleinement qualifié de cette classe
    2. et compare le avec celui qui est appelé dans ta classe CSVManage.

    note que les mots clés PHP s'écrivent tous exclusivement en minuscules

  17. #37
    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 trouvé l'erreur :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    namespace Classes;
     
    use vendor\PhpEcho\PhpEcho;
    use Classes\CSVParser;
     
    class CSVUpload

    J'ai donc été un peu plus loin :
    CSVManage.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     $ret=new CSVUpload();
     var_dump($ret);
     
     $parser = new csvParser($ret);

    CSVParser.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
    namespace Classes;
    use DateTime;
    use vendor\PhpEcho\PhpEcho;
    use vendor\rawsrc\Request;
    use Classes\MYPDO;    //to use class MYPDO 
     
    class CSVParser
    {
    private $sep;
     
       /* Constructor */
    public function __construct($file)
    {
       if (!$file["error"]) {
          $upload_dir = 'csv';
          $name=$file['name'];
     
      if ( false === $handle = fopen(DIR_ROOT.$upload_dir.DIRECTORY_SEPARATOR.$name, 'r') )
          throw new Exception("impossible to open the file '$name'");
    etc.
    mais la classe CSVParser attend un array et on lui passe un objet...
    Fatal error: Uncaught Error: Cannot use object of type Classes\CSVUpload as array in C:\wamp64\www\ticket\Classes\CSVParser.php on line 15

  18. #38
    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
    Citation Envoyé par rawsrc Voir le message
    Je te réponds plus détaillé tout à l'heure
    Je compte sur ton aide....

  19. #39
    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 laurentSc,

    une question : tu développes ton projet de ticket en local ou en distant ?

  20. #40
    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 rawsrc,

    j'ai mis un certain temps à répondre, car j'ai eu une idée que j'ai voulue tester avant...

    Oui, je développe en local (Wampserver) et même à la fin, ça restera en local, car l'objectif est de développer un outil, qui sera utilisé en local.

    Sinon, mon idée était plutôt que passer de la classe CSVUpload à la classe CSVParser une variable contenant le fichier, il suffisait d'utiliser la variable globale $_FILES qui était forcément connue par tous les objets de toutes les classes. Mais non si je fais if (isset($_FILES)) var_dump($_FILES); dans l'objet de la classe CSVParser, NULL

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Réponses: 33
    Dernier message: 25/04/2014, 18h02
  2. Quelle place pour la conception d'IHM ?
    Par Tijee dans le forum Méthodes
    Réponses: 27
    Dernier message: 21/10/2008, 01h44
  3. Réponses: 3
    Dernier message: 31/10/2007, 16h14
  4. Quelle bibliothèque pour ces classes?
    Par forumcpp_nono dans le forum MFC
    Réponses: 9
    Dernier message: 05/04/2007, 16h43
  5. Quelle approche pour ce problème de conception bien spécifique ?
    Par wokmichel dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 23/10/2006, 09h50

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