Bonjour à tous,
Je reviens vers vous pour un problème d'envoi de question-réponse. En effet j'ai un formulaire ou je pose ma question et j'enregistre directement dans la BD. Ensuite j'affiche ma question avec le formulaire pour répondre. Un utilisateur peut poser plusieurs questions s'il le souhaite mais j'aimerais que chaque question soit indépendante. Chaque réponse est liée à la question concernée par une clé étranger question_id.
J'arrive pour le moment à poser une question et répondre. Mon problème est une fois que je pose plusieurs je ne pourrai pas répondre sur le reste. Mes questions sont affichées par ordre décroissant (de la plus récente à la plus ancienne). Sur sur la plus récente il n'y a pas de soucis je répond sans problème. Mais sur le reste il ne se passe rien. Dans ma console je n'ai pas d'erreur. J'ai fait requête Ajax pour afficher mes réponses sans recharger la page. J'aimerais avoir le choix quand je veux répondre à une autre question qui n'est la dernière postée de pouvoir le faire sans problème. Pour le moment je suis bloqué sur ça. Toute aide est la bienvenue.
Merci par avance !
Je vous mets ci-dessous mon code :
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 // Affichage question-réponse et formulaire réponse: // connexion à la BD sql server require_once('db.php'); $user_id = isset($_SESSION['user_id']) ? urldecode($_SESSION['user_id']) : null;<br>// Affiche les questions et sa réponse<br>$q = array('user_id'=>$user_id); $sql = 'SELECT * FROM question WHERE user_id = :user_id ORDER BY question_date DESC'; $req = $db->prepare($sql); $req->execute($q) or die(print_r($db->errorInfo())); while ($row= $req->fetch(PDO::FETCH_ASSOC)): <div class="question"> <p><?=isset($row['question_titre'])?$row['question_titre']:' ';?></p> <p><?=isset($row['question_description'])?$row['question_description']:' ';?></p> <p><em>Par <?=isset($row['user_name'])?$row['user_name']:'';?>, le <?=isset($data['question_date'])?$data['question_date']:'';?></em></p> </div> <div class="form"> $q1 = array('question_id'=>$question_id'); $sql1 = 'SELECT * FROM reponse WHERE question_id = :question_id ORDER BY reponse_date DESC'; $req1 = $db->prepare($sql1); $req1->execute($q1) or die(print_r($db->errorInfo())); while ($data = $req1->fetch(PDO::FETCH_ASSOC)): <div class="reponse"> <p><?=isset($data ['reponse_message'])?$data ['reponse_message']:'';?></p> <p>Par <?=isset($_SESSION ['user_name'])?$_SESSION['user_name']:'';?>, le <?=isset($data['reponse_date'])?date('d/m/Y H:i:s', strtotime($data['reponse_date'])):'';?></p> </div> endwhile; <div id="status"></div> <form method="post" action="actionReponse.php" class="myform"> <textarea name="message" id="message"></textarea> <input type="submit" name="valider" value="Envoyer"> <input type="hidden" name="question_id" id="question_id" value="<?=isset($row['question_id'])?$row['question_id']:'';?>"> <input type="hidden" name="user_name" id="user_name" value="<?=isset($_SESSION['user_name'])?$_SESSION['user_name']:'';?>"> <input type="hidden" name="date" id="date" value="<?=date('d/m/Y H:i:s')"> </form> </div> endwhile;
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 // Partie jquery-ajax : $(document).ready(function() { $('.myform').on('submit', function(e) { e.preventDefault(); var $this = $(this); var message = $('#message').val(); var question_id = $('#question_id').val(); var user_name = $('#user_name').val(); var date = $('#date').val(); if (message === '' || question_id === '') { $('#status').html('<p class="error">Champ invalide</p>'); } else { $.ajax({ url: 'ActionReponse.php', type: 'POST', data: $this.serialize(), ContentType: 'application/x-www-form-urlencoded; charset=UTF-8', beforeSend: function() { $this.after('<span id="load4"><img src="inc/img/loader.gif" alt="loading"> Chargement...</span>'); }, success: function(data){ $('#load4').remove(); $('.form').prepend('<div class="reponse"><p>'+message+'</p><p>Par '+user_name+', le '+date+'</p></div>').hide().slideDown(); } }); } }); });
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 // PHP : actionReponse.php $question_id = isset($_REQUEST['question_id']) ? $_REQUEST['question_id'] : null; $date = isset($_REQUEST['date ']) ? $_REQUEST['date '] : null; $message = isset($_REQUEST['message']) ? nl2br(htmlspecialchars($_REQUEST['message'])) : null; // connexion à la BD require_once('db.php'); $q2 = array('message'=>$message, 'date'=>$date, 'question_id'=>$question_id); $sql2 = "INSERT INTO reponse (reponse_message, reponse_date, question_id) VALUES (:message, :date, :question_id)"; $req2 = $db->prepare($sql2); $req2->execute($q2) or die(print_r($db->errorInfo())); $data = $req2;
Partager