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 :

classe non trouvée malgré un use [POO]


Sujet :

Langage PHP

  1. #1
    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 classe non trouvée malgré un use
    Bonjour,
    afin de répartir les traitements, j'ai un formulaire qui sert à afficher toutes les données relatives à un ticket, donc le formulaire est dans un fichier :
    Code php+html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <form method="post" action="model\dispValuesTicket.php"> 
    <select id="id" name="id" onchange="submit();" style="width:200px;">
       <option value="0">Select the Id ticket</option>
        <?php
        foreach(($this['ret']) as $id_ticket)
            echo "<option>".$id_ticket['id_ticket']."</option>";
        ?>
    </select>
    </form>
    mais l'interrogation de la bdd pour obtenir les données relatives au ticket sélectionné, dans un autre fichier :
    model\dispValuesTicket.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    use vendor\util\MYPDO;    //to use class MYPDO 
    $bdd=new MYPDO();
    if( isset ($_POST['id']) )  //as name of the select is "id"...
    {//tant que pas au point, je me limite
    $req='SELECT Product_Name from `tickets` where (id_ticket=:id)';
    $var=$bdd->select($req,[':id'=>$_POST['id']]);
    echo "Product Name of ".$_POST['id'].": ".($var[0]['Product_Name'])."<br/><br/>";  // ça, je le changerai plus tard
    }
    ?>
    mais
    Fatal error: Uncaught Error: Class 'vendor\util\MYPDO' not found in C:\wamp64\www\ticket2\model\dispValuesTicket.php on line 3
    bien que dans ce fichier, il y ait un use et que j'ai déjà chargé un autoloader. Qu'est-ce qui va pas ?

  2. #2
    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,

    c'est quoi l'espace de nom déclaré de MYPDO ?

  3. #3
    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
    namespace vendor\util;

  4. #4
    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, faut chercher ailleurs.
    Comment tu atterris dans ce fichier : dispValuesTicket.php ?

  5. #5
    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
    cf ligne 2 du 1er code du post #1.

    Au cas où, voici quelques détails :

    index.php (contient l'autoloader et le router)

    action\view.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //entre autres
    $AT=new all_tickets();
    $AT->getAllTickets();

    Classes\Olivier\All_Tickets.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
     
    <?php
    declare(strict_types=1);
    namespace Classes\Olivier;
    use Classes\olivier\utilFct; 
    use DateTime;
    use vendor\PhpEcho\PhpEcho;
    use vendor\rawsrc\Request;
    use vendor\util\MYPDO;    //to use class MYPDO 
     
    class all_tickets
    {
    public function __construct()
    {}
     
     
    public function getAllTickets()
    {
        $bdd=new MYPDO(); 
        $sql="SELECT id_ticket from `tickets`";
        $ret=$bdd->select( $sql, [] );
        //appel d'une vue select html et liste des ids.
        $page = new PhpEcho([DIR_ROOT, 'view Layout.php']);
     
        $body = new PhpEcho([DIR_ROOT, 'view dispIdTickets.php'], [
            'ret' => $ret
        ]);
        $page['body'] = $body;
     
        // on renvoie au navigateur la page assemblée
        echo $page;
     
    }
     
    } //end class all_tickets

    view\dispIdTickets.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <form method="post" action="model\dispValuesTicket.php"> 
    <select id="id" name="id" onchange="submit();" style="width:200px;">
       <option value="0">Select the Id ticket</option>
        <?php
        foreach(($this['ret']) as $id_ticket)
            echo "<option>".$id_ticket['id_ticket']."</option>";
        ?>
    </select>
    </form>

    model\dispValuesTicket.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    use vendor\util\MYPDO;    //to use class MYPDO 
    $bdd=new MYPDO();
    if( isset ($_POST['id']) )  //as name of the select is "id"...
    {
    $req='SELECT Product_Name from `tickets` where (id_ticket=:id)';
    $var=$bdd->select($req,[':id'=>$_POST['id']]);
    echo "Product Name of ".$_POST['id'].": ".($var[0]['Product_Name'])."<br/><br/>";
    }
    ?>

  6. #6
    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
    quand je t'ai demandé comment tu atterrissais dans ton script, je parlais du point d'entrée dans le script. L'url, son traitement (routage ou pas...) pour bien voir si l'environnement d'exécution est bien chargé à chaque appel.

  7. #7
    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
    Désolé, mais je te suis pas. C'est quoi que tu appelles le point d'entrée ?

  8. #8
    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
    tu passes par index.php ou tu atterris directement sur la page de ton script ?

  9. #9
    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 question car j'y allais directement et ça m'a fait comprendre qu'il était mieux de passer par index.php.
    Voilà ce que j'ai fait :
    rajout d'une route dans le routeur :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // routage très basique
    $routes = [
        'controller' => 'action/controller.php', 
        'view' => 'action/view.php',
        'dispValTicket' => 'model/dispValuesTicket.php'
    ];
    modification de l'action du formulaire : <form method="post" action="index.php?dispValTicket">Or, on ne va pas dans model/dispValuesTicket.php et si je fais un var_dump($action) dans index.php, la variable est vide...Que faudrait-il faire ?

  10. #10
    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
    Comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <form method="post" action="index.php?action=dispValTicket">

  11. #11
    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
    Nickel, mais pour comprendre, j'ai mis dans le routeur : parse_str($_SERVER['QUERY_STRING'], $query);var_dump($_SERVER['QUERY_STRING']); et le var_dump me donne
    C:\wamp64\www\ticket2\index.php:35:string 'action=dispValTicket' (length=20)
    Pourquoi cet index qui vaut action ?
    Et dans la doc de $_SERVER, j'ai trouvé :
    'QUERY_STRING'
    La chaîne de requête, si elle existe, qui est utilisée pour accéder à la page.
    C'est quoi la chaîne de requête ?

  12. #12
    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
    la doc mon vieux la doc !
    Cela correspond à tout ce qui est après le ? dans une URL : c'est l'ensemble des paires clé=valeur séparées par &

  13. #13
    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 ton explication d'une chaîne de requête car j'ai pas trouvé de doc qui l'explique.

    Par contre, tu m'as pas dit pourquoi y avait action...

  14. #14
    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
    clé=valeur : action="index.php?action=dispValTicket"

  15. #15
    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
    Décidément, j'ai du mal. Dans la ligne de code que tu donnes, le 1er action est un attribut html mais le 2nd est une clé. Et pourtant, il semble important qu'elle s'appelle action. Pourquoi ?

  16. #16
    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
    il faut que tu lises le code plus attentivement : dans le routage basique voici ce qui est fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    parse_str($_SERVER['QUERY_STRING'], $query);
    $action = $query['action'] ?? '';
    On recherche la clé 'action' dans le tableau des [clé => valeur] renvoyé par la fonction parse_str().

    On aurait très bien pu nommer la clé 'xyz' que cela n'aurait rien changé :
    <form method=post action="index.php?xyz=dispValTicket"> et dans le routage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    parse_str($_SERVER['QUERY_STRING'], $query);
    $action = $query['xyz'] ?? '';
    Je ne vois pas trop où tu bloques.

  17. #17
    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
    Non, je ne bloque plus car tu m'as éclairé. Je ne peux pas le tester car mon Wampserver a un problème. On verra plus tard...

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/10/2019, 17h46
  2. Classe non trouvé TWebBrowser
    Par Aloneghost dans le forum Web & réseau
    Réponses: 1
    Dernier message: 18/04/2006, 20h51
  3. [ORACLE9i][XML]:ORA-29540: classe non trouvée
    Par anaon dans le forum Oracle
    Réponses: 8
    Dernier message: 15/11/2005, 20h02
  4. [Plugin] Classe non trouvée au runtime
    Par toto_toto dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 15/02/2005, 10h36
  5. [debutant][Classpath][Linux] Classe non trouvée
    Par oghma777 dans le forum Général Java
    Réponses: 5
    Dernier message: 15/10/2004, 21h26

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