Bonjour à tous,

J'ai actuellement deux pages, qui permettent de créer des sujets. La première étant viewtopic.php où se situe l'affichage du topics et les réponses aux topics, ainsi que un formulaire de réponse. Ce formulaire pointe vers addanswer.php.
Donc, je fais des vérifications sur addanswer.php, et si le message est posté j'aimerai que ça affiche sur viewtopic.php un message, pareillement si le message est vide. Donc comment faire ?
Voici mes scripts :
viewtopic.php :

<table>
    <thead>
            <tr class="en">
                <th class="autor">Auteur</th>
                <th>Message</th>
            </tr>
    </thead>
    <tbody>
            <?php
                $bdd->query('SET NAMES "UTF8"');
                $reqTopic = $bdd->query('SELECT * FROM topics WHERE id='.$_GET'id'].'');
                $dataTopic = $reqTopic->fetch();
                echo "<tr>";
                echo "<td>".$dataTopic'autor']."</td>";
                echo "<td>".$dataTopic'content']."</td>";
                echo "</tr>";
                $reqTopicAnswer = $bdd->query('SELECT * FROM answers WHERE topics_id='.$dataTopic'id'].'');
                while($dataAnswer = $reqTopicAnswer->fetch()){
                    echo "<tr>";
                    echo "<td>".$dataAnswer'autor']."</td>";
                    echo "<td>".$dataAnswer'content']."</td>";
                    echo "</tr>";
                }

            ?>
    </tbody>
</table>
<form method="post" action="index.php?p=addanswer">
    <br/><center>Votre réponse au sujet :</center>
    <textarea name="content" id="addanswer"></textarea><br/>
    <input type="hidden" name="topics_id" value="<?php echo $_GET'id']; ?>" />
    <input type="hidden" name="autor" value="" />
    <input type="submit" value="Envoyer" />
</form>

addanswer.php :

<?php
    $bdd->query('SET NAMES "UTF8"');
    extract($_POST);

if(isset($_POST'content'])){
    if(!empty($_POST'content'])){
        $content = nl2br($_POST'content']);
        $content = htmlspecialchars($content);
        $req = $bdd->prepare("INSERT INTO answers (content,autor,topics_id) VALUES (:content, :autor, :topics_id)");
        $req->execute(array(
            'content' => $content,
            'autor' => $_POST'autor'],
            'topics_id' => $_POST'topics_id']
        ));
        header("Location: ".$_SERVER'HTTP_REFERER']."");
    }else{
        header("Location: ".$_SERVER'HTTP_REFERER']."");
    }
}
?>

Si vous avez une idée? Pour ma part j'ai essayé de définir des variables avec define() mais rien de concluant.
Merci :)

8 réponses


Dans l'action de ton form il faut mettre ta page addanswer.php au lieu de l'index.

Babou
Auteur

Mes urls sont du type : monsite.com/index.php?p=addanswer
J'ai utiliser le tuto sur comment décomposer son site en php

Teste quand même car la c'est une page de traitement ta page addanswer, je ne sais pas comme est fait le tuto

Babou
Auteur

Non non je t'assure, je dois rester avec ce lien

Babou
Auteur

UP ?

Peut-être que tu devrais passer un argument dans ton url de header dans "addAnswer.php". Du style:

header("Location: "viewtopic.php?response=true");

Ensuite dans viewtopic.php tu interroges

$_GET'response']

et tu informes en fonction. C'est surement une bonne piste...Sinon tu peux toujours traiter ton formulaire en ajax...
En espérant t'avoir aiguillé.

Tout t'abord, t'as une faille SQL.
Utilise intval() pour les nombres entiers avant de les insérer en bdd, et mysql_escape_string() pour les chaines de caractères.

Tu veux faire la gestion d'erreur si j'ai bien compris?
Soit tu passes par des paramètres de type GET en faisant une redirection depuis ta page answer (comme l'explique plus ou moins brunoauger)
Soit tu le fais en Ajax (pas trop le choix dans ton cas).

Ensuite pour l'Ajax on va pas te donner la solution toute faite, vaut mieux que tu apprennes.
Regardes le tuto sur comment poster via un formulaire en Ajax.

Salut,

Tout à fait d'accord avec WinuX !

Sinon tu as la solution vraiment bidouille avec un $_SESSION'error_message'] qui serait égale a "Une erreur est survenue ...." que tu test sur la page index.php comme ça c'est valide partout sur le site !

Bien-sur une fois le message afficher il faut supprimer la variable !!!

Enfin je conseil fortement l'ajax ! Autant pour le côté pratique pour l'utilisateur que pour toi niveau code !

Cordialement, Mandarin974.