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 :

Envoyer un formulaire en MVC


Sujet :

Langage PHP

  1. #1
    Membre éprouvé

    Homme Profil pro
    Développeur PHP/Symfony // Mentor OpenClassrooms
    Inscrit en
    Octobre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur PHP/Symfony // Mentor OpenClassrooms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 203
    Points : 1 264
    Points
    1 264
    Billets dans le blog
    3
    Par défaut Envoyer un formulaire en MVC
    Bonsoir à tous,

    Je poste ce sujet car j'ai quelques soucis (rien de bien sorcier au fond mais bon ...), je n'utilise plus le PHP procédural (la POO et Symfony sont passés par là) depuis quelques temps et j'avoue avoir perdu quelques peu mes réflexes, afin de m'y remettre doucement, j'ai entrepris l'écriture de le partie IV du tutoriel sur Bootstrap et ce dernier porte sur le blog en php, easy peanut me direz-vous !

    Enfin, oui et non, jusque là, j'ai réussi à créer la pagination, l'affichage et d'autres points mais je bloque sur l'envoi de mon formulaire au sein de mon architecture MVC, voici l'architecture mise en place :

    Nom : Soucis_forums_II.PNG
Affichages : 802
Taille : 17,6 Ko

    Au fond, voici le code qui me pose soucis :

    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
     
    function send_commentaires($name, $email, $message)
    {
      global $bdd;
     
      $commentaire = [
        'name' => $name,
        'email' => $email,
        'message' => $message,
        'article_id' => $_GET['billet']
      ];
     
      $req = $bdd->prepare('INSERT INTO commentaires (auteur, contenu, date_publication, email, article_id)
                            VALUES (:name, :message, NOW(), :email, :article_id)');
      $commentaires = $req->execute($commentaire);
    }
    Cette fonction s'occupe de récupérer la variable globale $bdd qui initialise la connexion à MySQL, mes autres requêtes fonctionnent mais celle-ci ne veut pas fonctionner, PHP m'indique que $bdd est null ...

    Autre soucis, où placer l'appel à cette fonction, d'habitude, je place l'appel à mes fonctions dans mon contrôleur afin de bien séparer ma logique de mes actions et de ma vue, là, j'avoue bloquer quelques peu, si quelqu'un a une idée du pourquoi du comment, je suis preneur .

    Bonne soirée à tous.

  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 : 47
    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,
    Citation Envoyé par Guikingone Voir le message
    PHP m'indique que $bdd est null ...
    Il faut que tu traces les inclusions en amont de l'appel à ta fonction et voir s'il ne manquerait pas une inclusion relative à la définition de $bdd.

    Citation Envoyé par Guikingone Voir le message
    Autre soucis, où placer l'appel à cette fonction, d'habitude, je place l'appel à mes fonctions dans mon contrôleur afin de bien séparer ma logique de mes actions et de ma vue, là, j'avoue bloquer quelques peu, si quelqu'un a une idée du pourquoi du comment, je suis preneur
    Ben là ça va dépendre. Si t'es en MVC, tu dois avoir un objet représentant ta vue, soit t'es en mode strict : c'est-à-dire que la vue ne connait rien au modèle et dans ce cas, c'est ton contrôleur qui appelle le modèle pour collecter le tableau des commentaires et le passe à la vue, soit t'es en mode plus souple et la vue peut demander au modèle de lui fournir les données, dans ce cas, ce code est à rapprocher de la vue.

  3. #3
    Membre éprouvé

    Homme Profil pro
    Développeur PHP/Symfony // Mentor OpenClassrooms
    Inscrit en
    Octobre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur PHP/Symfony // Mentor OpenClassrooms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 203
    Points : 1 264
    Points
    1 264
    Billets dans le blog
    3
    Par défaut
    Hello,

    Merci du retour, voici ma connexion à la BDD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    /* On se connecte via PDO, on attrappera les Exceptions au besoin afin d'éviter les fuites de données */
    try{
      $bdd = new PDO('mysql:host=localhost;dbname=blog;charset=utf8', 'root', '');
    }
    catch(Exception $e){
      die('Erreur : '.$e->getMessage());
    }
    Ensuite, j'utilise un contrôleur global qui redirige le visiteur vers la page voulue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    include_once ('modele/Connexion_BDD.php');
     
    if(!isset($_GET['section']) OR $_GET['section'] === 'commentaires')
    {
      include_once ('controller/blog/commentaires.php');
    }
    Le contrôleur commentaires reçoit donc $bdd si je ne m'abuse ?

    Voici le 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
    <?php
    include_once ('modele/blog/get_commentaires.php');
    include_once ('modele/blog/get_articles.php');
     
    $commentaires = get_commentaires();
    $billets = get_articles_by_id();
     
    foreach($commentaires as $key => $commentaire){
      $commentaires[$key]['auteur'] = htmlspecialchars($commentaire['auteur']);
      $commentaires[$key]['contenu'] = htmlspecialchars($commentaire['contenu']);
    }
     
    include_once ('vue/blog/commentaires.php');
    Le soucis vient du fait que toutes mes autres requêtes utilisant $bdd fonctionnent, seul la fonction send_commentaires ne veut pas fonctionner, pour ce qui est du placement du formulaire d'envoi, j'ai créer mon formulaire dans ma vue, cette dernière ne pointe vers aucune page, je comptais faire en sorte que mon contrôleur effectue la vérification du formulaire puis contacte le modèle et que ce dernier insère les données mais j'avoue ne pas trop voir comment mettre cela en place, je ne peux pas rediriger mon formulaire vers mon contrôleur, ce serait contraire à toute règles ...

  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 : 47
    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,

    au pire, supprime le seul script qui ne fonctionne pas et recréé le. A tout hasard, peux-tu vérifier en entrée de script le contenu de $GLOBALS et voir s'il y trace de $bdd.

    Citation Envoyé par Guikingone
    mon contrôleur effectue la vérification du formulaire puis contacte le modèle et que ce dernier insère les données
    Si tu veux faire tout ça proprement, il y a deux niveaux de contrôles :
    - le premier au niveau du contrôleur qui s'assure que le contexte d'appel correspond bien à celui attendu pour l'action à effectuer
    - le deuxième au niveau du modèle qui vérifie la cohérence et la validité des données avant de le envoyer en base de données

    La plupart du temps, les dev font un raccourci en remontant une partie du boulot du modèle (cohérence et vérification) au niveau du contrôleur et le modèle ne fait plus que s'occuper de la persistance.
    Cette approche inféode le contrôleur au modèle, ce qui est loin d'être souhaitable. Tu peux te retrouver ainsi avec des contrôleurs obèses...

  5. #5
    Membre éprouvé

    Homme Profil pro
    Développeur PHP/Symfony // Mentor OpenClassrooms
    Inscrit en
    Octobre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur PHP/Symfony // Mentor OpenClassrooms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 203
    Points : 1 264
    Points
    1 264
    Billets dans le blog
    3
    Par défaut
    Hello,

    Après vérification, la variable $bdd est toujours null et ce, même si les autres modèles arrivent à l'appeler :

    Nom : Soucis_forums_III.PNG
Affichages : 672
Taille : 15,6 Ko

    Est-ce que je ne devrais pas appeler directement le fichier de connexion via mon contrôleur ?

Discussions similaires

  1. [HTML] Envoyer données formulaire automatiquement ??
    Par Aspic dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 19/03/2006, 19h41
  2. Récupération d'ne liste envoyé par formulaire
    Par Leviathan_72 dans le forum Langage
    Réponses: 5
    Dernier message: 24/11/2005, 09h36
  3. envoyer un formulaire sur un évènement onchange.
    Par maniaco_jazz dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/11/2005, 14h44
  4. Impossible d'envoyer un formulaire avec javascript
    Par Mimi Bulles dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 14/11/2005, 20h37
  5. Réponses: 2
    Dernier message: 30/11/2004, 02h36

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