Bonjour,
Je me suis dirigée vers vous encore un fois , je rencontre beaucoup de problèmes avec mon projet, il s'agit d'un forum , et mon problème c'est au niveau de l'insertion des réponses pour les sujets existants , en faite j'ai une table de sujet et une autre pour lse réponses, et je ne sais pas comment affecter une telle réponse à u tel sujet.
ma table réponse contient 3 attributs(id_reponse,id_sujet, contenu)
id_sujet c'est une clé étrangère qui fait référence à la table sujet.
Bonsoir.
Pour commencer, je crois que tu vas avoir un problème avec ta table pour les réponses.
Tu sauvegardes la réponse, mais pas celui qui l'a posté ?
Ni la date et heure ?
Ensuite, qu'est-ce que tu ne comprends pas et ou sais pas faire ?
La chaine de caractères qui représente la requête SQL ?
Mon problème c'est comment affecter la réponse saisie au bon sujet , (celui qui correspond )
Lorsque un utilisateur va sur une page pour répondre à un sujet, il doit bien y avoir l'id du sujet dans la barre d'adresse non ?
Si c'est bien le cas, tu peux ajouter un champ dans le formulaire qui permet de poster une réponse sur la page du sujet, par exemple :
<form action="...." method="post">
<input type="hidden" name="id_sujet" value="<?= $_GET['id'] ?>"> // ici le champ ajouté
<textarea name="contenu" placeholder="..."></textarea>
<button type="submit">Répondre</button>
</form>
Comme ça, l'orsque l'utilisateur soumettra le formulaire, ta page de traitement reçevra l'identifiant du sujet correspondant dans les données postées et tu pourras en récupérer la valeur via $_POST['id_sujet']
et tu pourras t'en servir dans ta requête SQL pour que la réponse soit bien sauvegardé pour le sujet correspondant.
Oui , mais , est ce qu'il faut indiquer l'id du sujet au moment de l'insertion de la réponse ? il faut utliser la clause where?
Non, pas de WHERE, puisque c'est un nouvel enregistrement.
Les conditions elles s'utilisent pour les sélections (SELECT), les modifications (UPDATE) et les suppressions (DELETE).
Il te faut juste donner toutes les valeurs nécessaires, soit pour tes champs id_reponse
, id_sujet
et contenu
.
Oui , c'est bon le code marche bien , j'ai encore une question si vous le me permettez, je veux afficher la dernière réponse saisie pour un sujet
j'ai essayé avec cette reqûete mais il ne fonctionne pas.
$sql5="SELECT id_sujet AS id‚ id_reponse‚ contenu
FROM reponsehtcs
WHERE id_reponse = (
SELECT MAX(id_reponse) FROM reponsehtcs WHERE id_sujet = id
)";
$res5=$conn->query($sql5);
echo $res5;
.
Salut,
je veux afficher la dernière réponse saisie pour un sujet
ah ben là on revient au problème soulevé par @Lartak ^^
Tu sauvegardes la réponse, mais pas celui qui l'a posté ?
Ni la date et heure ?
Comme tu m'as déjà dit que tu as très peu étudié le PHP (et SQL) dans ta formation,
je vais essayer d'expliquer le plus clairement possible.
Si tu veux récupérer la dernière réponse postée,
normalement tu utilises :
ORDER BY
, DESC
, et LIMIT
de SQLORDER BY,
sert à ordonner les données.
Si les données sont des varchar
, alors "l'ordre" sera alphabétique.
Si les données sont des int
, alors "l'ordre" sera numérique.
Si les données sont des datetime
, alors "l'ordre" sera chronologique (c'est justement ce que tu veux)
On peut peut donc ordonner les données.
On peut aussi choisir de les ordonner en commençant par le début, ou en commençant par la fin.
DESC
--> "descending", signifie qu'on commence depuis la fin.
ASC
--> "ascending", signifie qu'on commence depuis le début (c'est la valeur par défaut)
Ensuite, on peut aussi limiter le nombre de réponse retournées.
C'est là qu'on utilise LIMIT
.
Un exemple pour comprendre :
<?php
$sql = 'SELECT *
FROM reponse
WHERE id_sujet = ' . $id_sujet . '
ORDER BY date DESC
LIMIT 1';
/* On ordonne les réponses par rapport à leur date de publication (ORDER BY date), en commençant par la fin (DESC),
et on limitte le nombre de réponses retournées à UNE SEULE (LIMIT 1),
comme ça on aura juste la dernière réponse postée (postée sur le sujet qui à l'id "$id_sujet")
*/
?>
Il faudrait donc que tu rajoutes un champ "date" à ta table.
Attention,
"date" est un mot-clé de SQL,
et on aime pas trop nommer un champ en utilisant un mot-clé de SQL.
En général, sur un forum, on peut éditer ses réponses, alors ce qu'on fait c'est qu'on créer 2 champs de type datetime
:
PS : "date_create", et "date_update" ne sont que des noms que j'ai donné pour l'exemple, tu peux évidemment choisir les noms que tu veux (en pensant à ne pas les nommer par un mot-clé de SQL)
Oui , j'ai nommé le champ DH (DateHeure)
Alors j'ai tester le bout de code que vous avez proposé mais toujours cette erreur s'affiche:
Catchable fatal error: Object of class PDOStatement could not be converted to string in C:\wamp64\www\forum\HTML_CSS.php on line 92