Probléme d'include sous une architecture MVC

Par pixe, il y a 9 ans


Bonjour,

Voila je rencontre un petit problème avec mon code pour inserer mes messages.
J ai une arboresence classique :

3 dossiers -> modele - vue - controleur, dans chacun des dossiers un sous dossier minichat ,
avec un fichier index.php pour controleur
un fichier index.php pour vue
un fichier get_message pour afficher les messages et un fichier ajouter_message pour modele
un fichier connexion (connexion-sql) dans le dossier modele au meme niveau que le dossier minichat
et un fichier controleur-globale (minichat.php) à la racine de mon site

les fichiers :
Modele

<?php function ajouter_message($pseudo, $contenu) { global $bdd; $req = $bdd->prepare('INSERT INTO mini_chat (pseudo, message) VALUE(?,?)'); $req->execute(array($pseudo, $message)); }

Controleur

<?php include_once('modele/minichat/get_messages.php'); include_once('modele/minichat/ajouter_message.php'); $sqlmessages = get_messages(0, 10); if (isset($_POST['pseudo']) && isset($_POST['message'])) { $pseudo = $_POST['pseudo']; $message = $_POST['message']; ajouter_message($pseudo, $message); } foreach($sqlmessages as $cle => $mes) { $sqlmessages[$cle]['pseudo'] = htmlspecialchars($mes['pseudo']); $sqlmessages[$cle]['message'] = nl2br(htmlspecialchars($mes['message'])); } include_once('vue/minichat/index.php');

Vue

<h1>Mon minichat !</h1> <p>Derniers messages du chat :</p> <form action="controleur/minichat/index.php" method="post"> <p> <label for="pseudo">Pseudo</label> : <input type="text" name="pseudo" id="pseudo" /><br /> <label for="message">Message</label> : <input type="text" name="message" id="message" /><br /> <input type="submit" value="Envoyer" /> </p> </form> <?php foreach($sqlmessages as $message) { ?> <div class="news"> <h3> <?php echo $message['pseudo']; ?> </h3> <p> <?php echo $message['message']; ?> </p> </div> <?php } ?>

Controleur global

<?php include_once('modele/connexion_sql.php'); if (!isset($_GET['section']) OR $_GET['section'] == 'index') { include_once('controleur/minichat/index.php'); }

Ce que je veux

J'aurai voulu avoir des conseilles pour résoudre mon probléme svp

Ce que j'obtiens

Une suite d'erreures :
Et je n'arrive pas a rediriger vers ma page "controleur globale" minichat.php
J'arrive sur cette page
http://localhost/PHP-mini-chtat/PHP-minichat-MVC-form/controleur/minichat/index.php

Warning: include_once(modele/minichat/get_messages.php): failed to open stream: No such file or directory in C:
Warning: include_once(): Failed opening 'modele/minichat/get_messages.php' for inclusion (include_path='.;C:\php\pear') in C:
Warning: include_once(modele/minichat/ajouter_message.php): failed to open stream: No such file or directory in C:
Warning: include_once(): Failed opening 'modele/minichat/ajouter_message.php' for inclusion (include_path='.;C:

Fatal error: Call to undefined function get_messages() in C:\wamp\www\PHP-mini-chtat\PHP-minichat-MVC-form\controleur\minichat\index.php on line 6

Merci a vous , si vous pouvez me donner des pistes

4 réponses

SLK, il y a 9 ans

Salut,

essaies de mettre tes include_once en chemin absolu.

Dans mini-chat.php tu définie une variable globale
$root = "C:\wamp\www\PHP-mini-chtat\PHP-minichat-MVC-form\"

et tu rajoutes cette variable à tous tes include_once

include_once($root . 'modele/minichat/get_messages.php');

Rien à voir avec ton problème : mais J'ai vu que pour ton modèle, tu sembles faire un fichier par fonction :

include_once('modele/minichat/get_messages.php'); include_once('modele/minichat/ajouter_message.php');

En théorie tu mets toutes tes fonctions liées au modèle minichat, dans le même fichier.

include_once('modele/minichat/model.php'); // modele/minichat/model.php function get_message() { ... } function ajouter_message() { ... }
pixe, il y a 9 ans

salut SLK , je crois avoir resolut mon probléme mais du coup j ai un affichage bizard
je m'explique :
Je rentre un message rien s'affiche, mais il s'insert ds ma bdd, et quand je rentre un autre message le premier message entrée apparait mais pas le second , mais les deux sont présent ds ma bdd et ainsi de suite

J'ai pas d'erreur qui apparait

mon code : fichier ajouter_message / minichat / modele

<?php function ajouter_message($pseudo, $message) { global $bdd; $req = $bdd->prepare('INSERT INTO mini_chat (pseudo, message) VALUE(?,?)'); $req->execute(array($pseudo, $message)); }

mon code : fichier index.php / minichat / controleur

<?php include_once('modele/minichat/get_messages.php'); include_once('modele/minichat/ajouter_message.php'); $sqlmessages = get_messages(0, 10); if (isset($_POST['pseudo']) && isset($_POST['message'])) { $pseudo = $_POST['pseudo']; $message = $_POST['message']; ajouter_message($pseudo, $message); } foreach($sqlmessages as $cle => $mes) { $sqlmessages[$cle]['pseudo'] = htmlspecialchars($mes['pseudo']); $sqlmessages[$cle]['message'] = nl2br(htmlspecialchars($mes['message'])); } include_once('vue/minichat/index.php');

le formulaire: index.php/minichat/vue

<form action="minichat.php" method="post"> <p> <label for="pseudo">Pseudo</label> : <input type="text" name="pseudo" id="pseudo" /><br /> <label for="message">Message</label> : <input type="text" name="message" id="message" /><br /> <input type="submit" value="Envoyer" /> </p><br></form>

Opérateur global à la racine du site :

<?php include_once('modele/connexion_sql.php'); if (!isset($_GET['section']) OR $_GET['section'] == 'index') { include_once('controleur/minichat/index.php'); }
SLK, il y a 9 ans

OK, du coup on dirait que c'est peut-être la fonction get_messages qui merdouille, montre nous son code.

Aussi, j'ai vu ça qui m'intrigue un peu :

foreach($sqlmessages as $cle => $mes) { $sqlmessages[$cle]['pseudo'] = htmlspecialchars($mes['pseudo']); $sqlmessages[$cle]['message'] = nl2br(htmlspecialchars($mes['message'])); }

Est-ce qu'il ne faudrait pas plutôt faire un truc comme ça ?

foreach($sqlmessages as $entry) { $entry['pseudo'] = htmlspecialchars($entry['pseudo']); $entry['message'] = nl2br(htmlspecialchars($entry['message'])); }
pixe, il y a 9 ans

Ok, je vais tester ce que tu m'indiques , merci ^^