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


pixe
Auteur
Réponse acceptée

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

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
Auteur

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');
}

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']));
}