Bonjour,

Je suis actuellement en train de mettre en place un système "Signaler le message" pour mon forum.
"Signaler le message" apparait donc pour chaque message du sujet en lecture.
Mon objectif est :

  • D'ouvrir une fenête modale en reprenant en citation le message
  • Expliquer le motif
  • Soumettre

Je bug sur l'appel du message.

Mon code se situe dans la boucle qui appelle le message, j'ai donc pensé que je devais juste appelé $donnee['message'],
mais lorsque je procède de cette manière, la citation me renvoie toujours le premier message du sujet.

Je me souviens alors que l'on m'avait dit d'appeler $donnee['message'] dans un input de type "hidden", sauf que dans le contexte actuel ça ne m'arrange pas de passer par cette méthode.

Existe-t-il une autre manière de faire ?

Merci d'avance x)

<?php
$bdd->query("SET NAMES 'UTF8', lc_time_names = 'fr_FR'");
$req = $bdd->prepare("SELECT id,pseudo,message,DATE_FORMAT(datemessage, '%a %d %b %Y à %Hh%i') AS datepublication,forum FROM forummessages");
$req->execute();
foreach ($req as $donnee):
?>

<label class="button" for="modalCheck">Signaler ce message</label>
            <div class="popup_block">
                <label for="modalCheck"><img alt="Fermer" title="Fermer la fenêtre" class="btn_close" src="../../image/closed.gif"></label>
                <h2>Oh le vilain !</h2>

                <p>Vous souhaitez signaler le message suivant :</p>
                <div class="citation">
                        <?php
                        if(strlen(nl2br(utf8_decode($donnee['message'])))>100)
                        {
                            echo substr(nl2br(utf8_decode('<em>'.$donnee['message'])),0,200).'...</em>';
                        }
                        ?>      
                </div>
                <p>Afin de vérifier la conformité du message cité, veuillez décrire en quelques mots les raisons qui vous feraient penser que l'auteur ne <br/>respecte pas les Conditions Générales d'Utilisation.</p>
                <form method="post" action="forummessage.php?c=<?php echo $_GET['c']; ?>&t=<?php echo $_GET['t'];?>">
                    <input type="text" class="input_signalement" placeholder="Motif (description en quelques mots)"/><br/>
                    <p style="text-align: center;">Je souhaite être informé(e) du suivi : <input type="checkbox"/><br/></p>
                    <input type="submit" class="submit_signalement" name="valider_signalement" value="Soumettre"/>
                </form>
            </div>

<?php endforeach; ?>

3 réponses


Il y a pas beaucoup de choix.
Soit c'est en get ou en post
Si tu utilises la méthode post généralement on passe les infos par des ipputs hiddens.
Sinon tu peux faire du JS & Ajax.

PS: mieux veux transmettre un identifiant / code que le message (La PK ou un hash du Message).

Bonjour,

Les seuls moyenns que je vois c'est soit de :

  • crée une modal pour chaque message (c'est à dire l'inclure dans la boucle des messages)
  • Ou faire un appel ajax à l'ouverture d'une modal

Pour la première solution c'est ce que tu as l'air de faire, le problème c'est que tu n'a pas mis à jour ton appel à ta modal :

<label class="button" for="modalCheck">Signaler ce message</label>

à remplacer par

//On attribue un identifiant unique à la modal
<label class="button" for="message-<?php echo $message['id'] ?>">Signaler ce message</label>

et idem pour:

 <label for="modalCheck"><img alt="Fermer" title="Fermer la fenêtre" class="btn_close" src="../../image/closed.gif"></label>

à remplacer par:

//On oublie pas de faire de même ici, afin que notre bouton appel la bonne modal
 <label for="message-<?php echo $message['id'] ?>"><img alt="Fermer" title="Fermer la fenêtre" class="btn_close" src="../../image/closed.gif"></label>

Déjà il y a un problème dans ton code au niveau coformité il me semble, je vois des balises label à l'extérieur d'unf ormulaire, ça n'a pas de sens et un label n'a rien à faire à l'extérieur d'une balise <form>.
Tu as deux alternatives, ou bien tu appelles ton formulaire dans ta modal en là chargeant en Ajax via une requête GET, tu as besoin de deux variables pour identifier quel est le commentaire et sur quel topic cela est. Donc deux ID seulement que tu peux envoyer en GET ou en POST. (Prend moins de ressources)

L'autre alternative notamment est effectivement de charger un formulaire pour chaque commentaire lorsque tu appelles la page.

Par contre n'oublie pas que l'on n'utilise pas un label comme bouton, on utilise un lien ou un button, il vaut mieux prendre des bonnes habitudes conformes.