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 :

Controller MVC


Sujet :

Langage PHP

  1. #1
    Candidat au Club Avatar de Robiox
    Homme Profil pro
    Etudiant en développement informatique
    Inscrit en
    Janvier 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Etudiant en développement informatique

    Informations forums :
    Inscription : Janvier 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut Controller MVC
    Bonjour,

    J'ai un site sous l'architecture MVC que j'ai mis en ligne.

    J'ai des données stockées dans ma base de données et que j'affiche sur le site sous forme de texte, d'image ou de document.

    En local ça marche nickel, j'ai toutes mes données de la BDD qui s'affichent sur le site (image, texte, document), en revanche en ligne, quasi tout fonctionne sauf 3 tables qui ne s'affichent pas sur le site (j'ai une page blanche) et j'ai constaté que c'était les 3 seules tables qui n'avaient pas d'images. Toutes les autres qui s'affichent correctement ont une image.
    J'ai donc essayé de leur ajouter une image mais rien à faire, la page s'affiche toujours en blanc avec une erreur GET 500 Internal Server Error dans la console du navigateur.

    Exemple d'1 des 3 tables qui ne s'affichent pas en ligne :

    View index.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <div class="titretarif col-lg-4-ml-auto text-center rectangle">
      <p>Tarif de la licence</p>
         <?php foreach($variablecinq['prixlicence'] as $ligne): ?>
     
         <div class="tarif">
            <p><?= $ligne->cat-prixlicence ?> <?= $ligne->prix_prixlicence ?></p>
         </div>
    <?php endforeach ?>
    </div>
    Model PrixLicence.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
     
    class PrixLicence extends Model
     
    {
     
      var $table="prixlicence";
     
    }
    Controller Licence.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
    17
    18
    19
    <?php class Licence extends Controller{
     
      function index(){
     
        $tables = Model::load("prixlicence");
     
         $tableRes['variablecinq']=array("prixlicence"=>$tables->find(Model::connexion()));
     
         Model::deconnexion();
     
        $tableRes["variable"]=array('titre'=>'Licence', 'description'=>'Prix des licences');
     
        $this-> set($tableRes);
     
        $this->render('index');
     
      }
     
     }
    Et j'ai remarqué que quand je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        $tableRes["variable"]=array('titre'=>'Licence', 'description'=>'Prix des licences');
     
        $this-> set($tableRes);
     
        $this->render('index');
    au dessus de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        $tables = Model::load("prixlicence");
     
         $tableRes['variablecinq']=array("prixlicence"=>$tables->find(Model::connexion()));
     
         Model::deconnexion();
    donc comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $tableRes["variable"]=array('titre'=>'Licence', 'description'=>'Prix des licences');
     
        $this-> set($tableRes);
     
        $this->render('index');
     
        $tables = Model::load("prixlicence");
     
         $tableRes['variablecinq']=array("prixlicence"=>$tables->find(Model::connexion()));
     
         Model::deconnexion();
    la page s'affiche bien mais sans les données de la BDD.

    Un exemple de controller qui fonctionne bien :

    Controller Boutique.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
    17
    18
    19
    20
    <?php class Boutique extends Controller{
     
      function index(){
     
        $tables = Model::load("produit");
     
        $tableRes['variable']=array("produit"=>$tables->find(Model::connexion(), array('inner'=>'natural join illustration')));
     
        Model::deconnexion();
     
        $tableRes["variablee"]=array('titre'=>'Boutique', 'description'=>'Produits du site');
     
        $this-> set($tableRes);
     
        $this->render('index');
     
      }
     
    }
    ?>

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      <?phpforeach($variablecinq['prixlicence'] as $ligne) {
    Attention ton foreach() est collé au tag <?php

    Je te conseille d'utiliser la syntaxe alternative des structures, bien plus lisible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php foreach ($data as $row): ?>
        <div>...</div>
    <?php endforeach ?>
    Et de ne pas mettre de ?> à la fin de tes fichiers PHP purs car autrement il y a toujours un risque d'un caractère blanc venant fausser la sortie HTML/texte/autre
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Candidat au Club Avatar de Robiox
    Homme Profil pro
    Etudiant en développement informatique
    Inscrit en
    Janvier 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Etudiant en développement informatique

    Informations forums :
    Inscription : Janvier 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Ah oui c'est plus propre comme ça effectivement, merci du conseil
    Sinon si quelqu'un aurait une solution ou une idée je suis toujours preneur !

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Ben t'as corrigé l'erreur de syntaxe ? L'erreur 500 peut venir de là
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Candidat au Club Avatar de Robiox
    Homme Profil pro
    Etudiant en développement informatique
    Inscrit en
    Janvier 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Etudiant en développement informatique

    Informations forums :
    Inscription : Janvier 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Ben t'as corrigé l'erreur de syntaxe ? L'erreur 500 peut venir de là
    Oui mais j'ai toujours une page blanche avec l'erreur GET 500

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    Bonjour,

    J'ajoutes que la syntaxe de la boucle foreach est soit :


    Mais pas les deux en même temps.

    Pour l'exemple que tu as cité, quand je vois ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     ...
     $this->render('index');
     
     $tables = Model::load("prixlicence");
     ....
    Je comprends tout de suite pourquoi la page s'affiche sans les données de la bdd, car, tu demandes au contrôleur d'afficher la vue "index" $this->render("index") sans aucune donnée.

    L'appel de la méthode render doit être la dernière ligne de ton code, à moins que tu veux retourner autres choses....

    La documentation de symfony montre comment passer des données à la méthode render.

  7. #7
    Candidat au Club Avatar de Robiox
    Homme Profil pro
    Etudiant en développement informatique
    Inscrit en
    Janvier 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Etudiant en développement informatique

    Informations forums :
    Inscription : Janvier 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Ok merci je comprends mieux pourquoi la page s'affiche mais sans les données lorsque je déplace le code comme j'ai dit plus haut. Mais du coup ça ne résout pas mon problème car j'ai bien mon $this->render('index'); en dernier et j'ai une page blanche avec une erreur GET 500 dans la console
    Je vais regarder la documentation symfony que tu m'as envoyé.

    Controller Licences.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php class Licences extends Controller{
     
        function index(){
     
            $tables = Model::load("prixlicence");
        	$tableRes['variablecinq']=array("prixlicence"=>$tables->find(Model::connexion()));
            Model::deconnexion();
     
            $this-> set($tableRes);
            $this->render('index');
     
        }
    }

  8. #8
    Candidat au Club Avatar de Robiox
    Homme Profil pro
    Etudiant en développement informatique
    Inscrit en
    Janvier 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Etudiant en développement informatique

    Informations forums :
    Inscription : Janvier 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Petit up si quelqu'un a une solution car je n'ai toujours pas trouvé

  9. #9
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 381
    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 381
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    je ne suis pas expert, mais le code de Model\PrixLicence.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
     
    class PrixLicence extends Model
     
    {
     
      var $table="prixlicence";
     
    }
    avec pour unique code, une déclaration de variable, ça me paraît bizarre (on attend la déclaration de propriétés et de méthodes).
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  10. #10
    Candidat au Club Avatar de Robiox
    Homme Profil pro
    Etudiant en développement informatique
    Inscrit en
    Janvier 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Etudiant en développement informatique

    Informations forums :
    Inscription : Janvier 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Ouais je sais pas trop mais c'était une prof qui nous avait donné ce code. Après ça fonctionne avec les autres tables et puis peut être que ça charge la table pour ensuite l'utiliser dans le controller

  11. #11
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 381
    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 381
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Par curiosité, elle fait quoi la méthode set, comme là : $this-> set($tableRes); (ligne 9 du code du post #7) ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  12. #12
    Candidat au Club Avatar de Robiox
    Homme Profil pro
    Etudiant en développement informatique
    Inscrit en
    Janvier 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Etudiant en développement informatique

    Informations forums :
    Inscription : Janvier 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Et bien je ne sais pas trop non plus, je comprends pas tout son code, j'imagine que ça initialise ou ça appelle la variable $tableRes qui est au dessus.

  13. #13
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 381
    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 381
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Vu le code du post #7, la méthode set appartient à la classe Licenses ou à la classe Controller. Peux-tu donner son code ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  14. #14
    Candidat au Club Avatar de Robiox
    Homme Profil pro
    Etudiant en développement informatique
    Inscrit en
    Janvier 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Etudiant en développement informatique

    Informations forums :
    Inscription : Janvier 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Vu le code du post #7, la méthode set appartient à la classe Licenses ou à la classe Controller. Peux-tu donner son code ?
    Le code de Licences est déjà au dessus, il y a le model, le controller et le view de la classe Licence

Discussions similaires

  1. JSON - Envoyer une liste d'objets au controller MVC 2
    Par blasil64 dans le forum ASP.NET Ajax
    Réponses: 0
    Dernier message: 13/12/2012, 09h32
  2. Service en tant que controller (MVC)
    Par Arno5788 dans le forum Android
    Réponses: 2
    Dernier message: 09/02/2012, 09h29
  3. [PHP 5.3] Router et controller MVC
    Par grunk dans le forum Langage
    Réponses: 1
    Dernier message: 08/11/2010, 09h24
  4. [MVC/Organisation] Séparer le Modèle/Métier de la Vue/Controller
    Par Wookai dans le forum Développement Web en Java
    Réponses: 5
    Dernier message: 25/06/2007, 11h03
  5. Réponses: 1
    Dernier message: 12/02/2007, 12h43

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