Bonjour,
Je suis tout nouveau ici alors bienvenue parmi moi j’ai un certain sens de l’humour
J’explique mon sujet :
Je suis en train de mettre a jour un vieux forum vers POO pour l’instant je test encore certaine chose en procédural notamment cette partie ou je dois mettre a jour la date pour un système de vu non vu.
Alors mon système fonctionne sauf que lors de la création d’une réponse ou d’un topic je dois quand même actualisé la page topic même si c’est moi l’auteur pour qu’a l’index du forum l’image change.
Voici la partie de la requête :
if(empty($error)){
//on insert une reponse
$i = [$userid,$f_rep_name, $content, $id];
$db->prepare("INSERT INTO f_topics_reponse SET f_user_id = ?, f_rep_name = ?, f_topic_reponse = ?, f_topic_id = ?, f_topic_rep_date = NOW()")->execute($i);
$lastid = $db->lastInsertId(); //pour la redirection
//on met a jour la date du premier topic pour mettre en avant
$db->prepare("UPDATE f_topics SET f_topic_message_date = NOW() WHERE id = ?")->execute([$id]);
// on met ajour topic track
$smtp = $db->prepare('SELECT * FROM f_topic_track WHERE user_id = ? AND topic_id = ?');
$smtp->execute([$userid,$id]);
$views = $smtp->fetch();
//on update topic track en fonction de l'utilisateur
if($views != null){
$db->prepare("UPDATE f_topic_track SET read_topic = NOW() WHERE user_id = ? AND topic_id = ?")->execute([$userid,$id]);
}else{
$db->prepare("INSERT INTO f_topic_track SET read_topic = NOW(), user_id = ?, topic_id = ?")->execute([$userid,$id]);
}
//tester une redirection vers la page en court et redirigé dessus même si une nouvelle page se créer
if($pagination->isPage() > 1){
setFlash('Votre réponse a bien étais poster');
redirect($router->routeGenerate('viewtopic',['id' => $match['params']['id'] .'?page='.$pagination->isPage().'#rep-' . $lastid]));
}
setFlash('Votre réponse a bien étais poster');
redirect($router->routeGenerate('viewtopic',['id' => $match['params']['id'] .'#rep-' . $lastid]));
}
Pour faire mon vu non vu j’ai 2 table une table de tracking lié au topic et la table topic ou j’insert la date de topic, et en cas de réponse une date de réponse.
ici c’est la partie post réponse mais c’est pareil pour la création d’un topic, les dates se mettent bien a jour en bdd mais ça dois se joué en micro second car a l’index du forum ça reste en non vu jusqu’à ce que je vois le topic que je viens de créer, je comprend que l’image change pour un autre utilisateur mais pour moi qui suis l’auteur elle devrais resté neutre.
Peut être un ordre des requête ?
j’ai aussi une fonction qui met a jour seulement dans le cas ou un utilisateur n’a pas vu un topic ou une réponse mais seulement pour ceux qui sont connecté.
/**********
* view not view seulement si l'utilisateur est connecter
***********/
if(isset($_SESSION['auth']) && isset($match['params']['id'])){
$userid = (int) $_SESSION['auth']->id;
$get = (int) $match['params']['id'];
$smtp = $db->prepare('SELECT * FROM f_topic_track WHERE user_id = ? AND topic_id = ?');
$smtp->execute([$userid,$get]);
$views = $smtp->fetch();
//on update topic track en fonction de l'utilisateur
if($views != null){
// il faudrai que l'update ce fasse seulement si la date du topic ou des réponses est supérieur a f_topic_track
if($topic->f_topic_message_date >= $views->read_topic or $topic->f_topic_date >= $views->read_topic){
$db->prepare("UPDATE f_topic_track SET read_topic = NOW() WHERE user_id = ? AND topic_id = ?")->execute([$userid,$get]);
}
}else{
$db->prepare("INSERT INTO f_topic_track SET read_topic = NOW(), user_id = ?, topic_id = ?")->execute([$userid,$get]);
}
}
J’ai conscience que ça fais beaucoup pour un premier message mais c’est une partie un peut technique on vois pas de tuto là dessus sur youtube, surtout que j’utilise pas une méthode simple.
Bonne journée a vous.