11521 sujets

JavaScript, DOM et API Web HTML5

Pages :
Bonjour,

Voici mon site internet : https://benarafabole.alwaysdata.net/listpost.php

Sur listpost.php, j'ai un buton que j'ai inséré qui fait que lorsqu'un utilisateur de mon site appuie dessus, le compteur s'incrémente. Ce n'est malheuresement pas le cas... J'ai beaucoup de mal avec javascript.

Voici une partie de monde listpost.php (d'ailleurs accessible en inspectant le code source mon site web):

// Requête pour récupérer les posts, le nombre de likes pour chaque post, et le pseudo de l'utilisateur qui a posté
    $data_post = 'SELECT Post.*, Utilisateur.pseudo, COUNT(Likes.post_id) as likes_count FROM Post 
    INNER JOIN Utilisateur ON Post.user_id=Utilisateur.user_id 
    LEFT JOIN Likes ON Post.post_id = Likes.post_id 
    GROUP BY Post.post_id 
    ORDER BY date';
<div class="likes">
                <?php echo $dbRow['likes_count'] . ' j\'aime'; ?>
                <button class="like-button" data-post-id="<?php echo $dbRow['post_id']; ?>">J'aime</button>
            </div>
        </div>

        <!-- Inclusion de la bibliothèque jQuery -->
        <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

        <!-- Script pour incrémenter le nombre de j'aime -->
        <script src="javascript/jaime.js"></script>


Mes tables :

DROP TABLE IF EXISTS Likes;
DROP TABLE IF EXISTS Post;
DROP TABLE IF EXISTS Utilisateur;

CREATE TABLE Utilisateur(
    user_id INTEGER PRIMARY KEY AUTO_INCREMENT,
    nom VARCHAR(20),
    prenom VARCHAR(16),
    pseudo VARCHAR(16),
    mail VARCHAR(64) UNIQUE,
    mdp VARCHAR(32),
    admin INTEGER DEFAULT 0
);

CREATE TABLE Post (
    post_id INTEGER PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(32),
    message VARCHAR(500),
    date DATE,
    note INTEGER,
    user_id INTEGER,
    CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES Utilisateur(user_id)
);

CREATE TABLE Likes (
    like_id INTEGER PRIMARY KEY AUTO_INCREMENT,
    post_id INTEGER NOT NULL,
    user_id INTEGER NOT NULL,
    FOREIGN KEY (post_id) REFERENCES Post(post_id),
    FOREIGN KEY (user_id) REFERENCES Utilisateur(user_id)
);



mon code JS jaime.js : 
$(document).ready(function() {
    // Ajoute un événement "click" sur chaque bouton "J'aime"
    $('.like-button').click(function() {
        var postId = $(this).data('post-id');
        var likesDiv = $(this).siblings('.likes');

        // Envoie une requête AJAX pour incrémenter le nombre de likes
        $.ajax({
            type: 'POST',
            url: 'increment_likes.php',
            data: {post_id: postId},
            success: function() {
                // Met à jour l'affichage avec le nouveau nombre de likes
                var likesCount = parseInt(likesDiv.text().split(' ')[0]) + 1;
                likesDiv.html(likesCount + ' j\'aime');
            }
        });
    });
});

mon code de like.php :

<?php
require_once('config.php');
session_start();

if(isset($_POST['post_id'])) {
    $postId = $_POST['post_id'];

    // Connexion à la BD
    $dbLink = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME)
    or die('Erreur de connexion au serveur : ' . mysqli_connect_error());

    // Sélection de la base de données
    mysqli_select_db($dbLink, DB_NAME)
    or die('Erreur dans la sélection de la base : ' . mysqli_error($dbLink));

    // Vérifie si l'utilisateur a déjà liké ce post
    $query = "SELECT * FROM Likes WHERE post_id = $postId AND user_id = {$_SESSION['user_id']}";
    $result = mysqli_query($dbLink, $query);

    if(mysqli_num_rows($result) == 0) {
        // Incrémente le nombre de likes dans la table Post
        $query = "UPDATE Post SET likes = likes + 1 WHERE post_id = $postId";
        mysqli_query($dbLink, $query);

        // Ajoute une entrée dans la table Likes pour enregistrer que l'utilisateur a liké ce post
        $query = "INSERT INTO Likes (post_id, user_id) VALUES ($postId, {$_SESSION['user_id']})";
        mysqli_query($dbLink, $query);
    }
}
?>


Merci pour votre aide.
Modifié par linab (25 Apr 2023 - 18:59)
Modérateur
Bonjour,

Il s'appelle like.php ou increment_likes.php, le script qui met à jour la base ?

Dans ton code js, il s'appelle increment_likes.php. Mais tu parles d'un like.php dans ta question.

Amicalement,
Modifié par parsimonhi (25 Apr 2023 - 19:56)
Bonsoir,

Oui effectivement j'ai fais une erreur dans le js. Mon fichier s'appelle bien like.php.

je l'ai corrigé mais rien n'y change Smiley ohwell


$(document).ready(function() {
    // Ajoute un événement "click" sur chaque bouton "J'aime"
    $('.like-button').click(function() {
        var postId = $(this).data('post-id');
        var likesDiv = $(this).siblings('.likes');

        // Envoie une requête AJAX pour incrémenter le nombre de likes
        $.ajax({
            type: 'POST',
            url: 'like.php',
            data: {post_id: postId},
            success: function() {
                // Met à jour l'affichage avec le nouveau nombre de likes
                var likesCount = parseInt(likesDiv.text().split(' ')[0]) + 1;
                likesDiv.html(likesCount + ' j\'aime');
            }
        });
    });
});
Modérateur
Bonjour,

linab a écrit :
Oui effectivement j'ai fais une erreur dans le js. Mon fichier s'appelle bien like.php.

je l'ai corrigé mais rien n'y change.

On progresse mais on n'est pas encore rendu ! Smiley cligne

Pour les scripts js, on n'a besoin de ne les déclarer qu'une fois dans le code. Mets les lignes <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> et <script src="javascript/jaime.js"></script> une seule fois, par exemple juste avant la balise fermante </head>.

Dans le script button-form.js il faut remplacer
formInscription.style.display = "none";

par
if(formInscription) formInscription.style.display = "none";

et aussi
formInscription.style.display = "block";

par
if(formInscription) formInscription.style.display = "block";

et aussi
formConnexion.style.display = "none";

par
if(formConnexion) formInscription.style.display = "none";

et aussi
formConnexion.style.display = "block";

par
if(formConnexion) formInscription.style.display = "block";


De mon côté, je sens que je vais être obligé de faire une page de test. Ça va prendre un peu de temps.

Amicalement,
parsimonhi a écrit :
Bonjour,


On progresse mais on n'est pas encore rendu ! Smiley cligne

Pour les scripts js, on n'a besoin de ne les déclarer qu'une fois dans le code. Mets les lignes &lt;script src="https://code.jquery.com/jquery-3.6.0.min.js"&gt;&lt;/script&gt; et &lt;script src="javascript/jaime.js"&gt;&lt;/script&gt; une seule fois, par exemple juste avant la balise fermante &lt;/head&gt;.

Dans le script button-form.js il faut remplacer
formInscription.style.display = "none";

par
if(formInscription) formInscription.style.display = "none";

et aussi
formInscription.style.display = "block";

par
if(formInscription) formInscription.style.display = "block";

et aussi
formConnexion.style.display = "none";

par
if(formConnexion) formInscription.style.display = "none";

et aussi
formConnexion.style.display = "block";

par
if(formConnexion) formInscription.style.display = "block";


De mon côté, je sens que je vais être obligé de faire une page de test. Ça va prendre un peu de temps.

Amicalement,


Merci pour ces améliorations de code. Je voulais vous demander pour l'inclusion du script avant le /head cela pose-t-il un soucis si je les mets dans la fonction start_page ? (car c'est elle qui reprendre le head de mon menu)
Il me semble d'ailleurs que les scripts js ne sont déclarés qu'une fois dans le code de listpost.php

Arrivez-vous à accéder convenablement au code source de mes pages ? Si ce n'est pas le cas, n'hésitez pas à me demander.

Merci pour votre aide,
Modérateur
Bonjour,
linab a écrit :
Je voulais vous demander pour l'inclusion du script avant le /head cela pose-t-il un soucis si je les mets dans la fonction start_page ? (car c'est elle qui reprendre le head de mon menu)
Ça devrait le faire.
linab a écrit :
Il me semble d'ailleurs que les scripts js ne sont déclarés qu'une fois dans le code de listpost.php
Peut-être, mais probablement dans une fonction qui est appelée pour afficher chaque avis.
linab a écrit :
Arrivez-vous à accéder convenablement au code source de mes pages ? Si ce n'est pas le cas, n'hésitez pas à me demander.

On ne peut pas voir les codes php (et heureusement, sinon, ce serait un jeu d'enfant de pirater le site). Pour l'instant, ce n'est pas nécessaire d'accéder à ces codes.

Dans le script button-form.js, il reste encore un formInscription.style.display = "none"; non précédé par un if(formInscription), et je me suis trompé dans mon message précédent sur les corrections à apporter (erreur de copier-coller, mea culpa). En fait, il faut revenir à la version initiale et juste faire précéder tous les "formInscription.style.display =" par un "if(formInscription)" et tous les "formConnexion.style.display =" par un "if(formConnexion)".

En tout, il y a 5 lignes concernées. Cela devrait donner ça :
//js pour les formulaire d'inscription/connexion
// Récupérer les boutons de connexion et d'inscription
var btnConnexion = document.getElementById("connexion");
var btnInscription = document.getElementById("inscription");

// Récupérer les formulaires de connexion et d'inscription
var formConnexion = document.getElementById("connexion_form");
var formInscription = document.getElementById("inscription_form");

// Cacher le formulaire d'inscription par défaut
if(formInscription) formInscription.style.display = "none";

// Ajouter un gestionnaire d'évènement pour le bouton de connexion
btnConnexion.addEventListener("click", function() {
    // Cacher le formulaire d'inscription et afficher le formulaire de connexion
    if(formInscription) formInscription.style.display = "none";
    if(formConnexion) formConnexion.style.display = "block";
});

// Ajouter un gestionnaire d'évènement pour le bouton d'inscription
btnInscription.addEventListener("click", function() {
    // Cacher le formulaire de connexion et afficher le formulaire d'inscription
    if(formConnexion) formConnexion.style.display = "none";
    if(formInscription) formInscription.style.display = "block";
});


Amicalement,
parsimonhi a écrit :
Bonjour,
Ça devrait le faire.
Peut-être, mais probablement dans une fonction qui est appelée pour afficher chaque avis.

On ne peut pas voir les codes php (et heureusement, sinon, ce serait un jeu d'enfant de pirater le site). Pour l'instant, ce n'est pas nécessaire d'accéder à ces codes.

Dans le script button-form.js, il reste encore un formInscription.style.display = "none"; non précédé par un if(formInscription), et je me suis trompé dans mon message précédent sur les corrections à apporter (erreur de copier-coller, mea culpa). En fait, il faut revenir à la version initiale et juste faire précéder tous les "formInscription.style.display =" par un "if(formInscription)" et tous les "formConnexion.style.display =" par un "if(formConnexion)".

En tout, il y a 5 lignes concernées. Cela devrait donner ça :
//js pour les formulaire d'inscription/connexion
// Récupérer les boutons de connexion et d'inscription
var btnConnexion = document.getElementById("connexion");
var btnInscription = document.getElementById("inscription");

// Récupérer les formulaires de connexion et d'inscription
var formConnexion = document.getElementById("connexion_form");
var formInscription = document.getElementById("inscription_form");

// Cacher le formulaire d'inscription par défaut
if(formInscription) formInscription.style.display = "none";

// Ajouter un gestionnaire d'évènement pour le bouton de connexion
btnConnexion.addEventListener("click", function() {
    // Cacher le formulaire d'inscription et afficher le formulaire de connexion
    if(formInscription) formInscription.style.display = "none";
    if(formConnexion) formConnexion.style.display = "block";
});

// Ajouter un gestionnaire d'évènement pour le bouton d'inscription
btnInscription.addEventListener("click", function() {
    // Cacher le formulaire de connexion et afficher le formulaire d'inscription
    if(formConnexion) formConnexion.style.display = "none";
    if(formInscription) formInscription.style.display = "block";
});


Amicalement,


Effectivement, je viens de reprendre les bonnes lignes de code pour button-form.js merci !
Modérateur
Bonjour,

Il faut aussi mettre un if(btnConnexion) devant btnConnexion.addEventListener et un if(btnInscription) devant btnConnexion.addEventListener.

Toutes ces corrections sont nécessaires parce que sinon il y a une erreur qui se produit quand la page ne contient pas de bouton d'inscription, de bouton de connexion, de formulaire d'inscription et de formulaire de connexion.

Ce n'est pas propre, mais on verra plus tard comment assainir ça. Car pour l'instant, le but est de ne plus avoir d'erreur dans la console (qu'on peut voir en faisant click-droit sur la page => menu inspecter => onglet console).

Amicalement,
Modérateur
Bonjour,

1) je remplacerais dans le code html tous les "0 j'aime" par des "<span>0 j'aime</span>"

2) je remplacerais le contenu du script jaime.js par :
$(document).ready(function() {
    // Ajoute un évènement "click" sur chaque bouton "J'aime"
    $('.like-button').click(function() {
        var postId = $(this).data('post-id');
        var likesSpan = $(this).siblings().first();
        // Envoie une requête AJAX pour incrémenter le nombre de likes
        $.ajax({
            type: 'POST',
            url: 'like.php',
            data: {post_id: postId},
            success: function() {
                // Met à jour l'affichage avec le nouveau nombre de likes
                var likesCount = parseInt(likesSpan.text().split(' ')[0]) + 1;
                likesSpan.text(likesCount + ' j\'aime');
            }
        });
    });
});

En faisant ça, on cible plus facilement ce qui précède les boutons "j'aime".

Note : il y a toujours plusieurs fois les lignes
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
et
<script src="javascript/jaime.js"></script>
Il faut qu'elles n'apparaissent qu'une fois dans le <html>.

Une fois tout ça fait, on devrait voir le nombre de likes s'incrémenter. Restera ensuite à faire marcher la mise à jour de la base de données.

Amicalement,
Modifié par parsimonhi (25 Apr 2023 - 23:16)
J'ai procédé aux modifications merci. Comme suit :

<?php
    while ($dbRow = mysqli_fetch_assoc($dbResult)) {
        ?>
        <div class="post">
            <div class="titre_post">
                <?php
                echo '<h3>' . $dbRow['title'] . '</h3><br>';
                ?>
            </div>
            <div class="info_post">
                <?php
                echo '<p>Pseudo : ' . $dbRow['pseudo'] . '</p><p>Date de publication : ' . $dbRow['date'] . '</p><br>';
                ?>
            </div>
            <div class="contenu_post">
                <?php
                echo '<p>Note: ' . $dbRow['note'] . '/5'. '</p><p>' . $dbRow['message'] . '</p>';
                ?>
                <br>
            </div>
            <!--likes, on met un span pour que le JS cible plus facilement ce qui précède les boutons "j'aime"-->
            <span>
                <?php echo $dbRow['likes_count'] . ' j\'aime'; ?>
                <button class="like-button" data-post-id="<?php echo $dbRow['post_id']; ?>">J'aime</button>
            </span>
        </div>


Pour jaime.js

$(document).ready(function() {
    // Ajoute un événement "click" sur chaque bouton "J'aime"
    $('.like-button').click(function() {
        var postId = $(this).data('post-id');
        var likesSpan = $(this).siblings().first();

        // Envoie une requête AJAX pour incrémenter le nombre de likes
        $.ajax({
            type: 'POST',
            url: 'like.php',
            data: {post_id: postId},
            success: function() {
                // Met à jour l'affichage avec le nouveau nombre de likes
                var likesCount = parseInt(likesSpan.text().split(' ')[0]) + 1;
                likesSpan.text(likesCount + ' j\'aime');
            }
        });
    });
});


Je me demande si mon like.php fonctionne bien. Normalement il n y a pas d'erreur mais peut être des améliorations à faire. Le texte de j'aime ne change pas, il ne s'incrémente toujours pas Smiley ohwell

<?php
require_once('config.php');
session_start();

if(isset($_POST['post_id'])) {
    $postId = $_POST['post_id'];

    // Connexion à la BD
    $dbLink = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME)
    or die('Erreur de connexion au serveur : ' . mysqli_connect_error());

    // Sélection de la base de données
    mysqli_select_db($dbLink, DB_NAME)
    or die('Erreur dans la sélection de la base : ' . mysqli_error($dbLink));

    // Vérifie si l'utilisateur a déjà liké ce post
    $query = "SELECT * FROM Likes WHERE post_id = $postId AND user_id = {$_SESSION['user_id']}";
    $result = mysqli_query($dbLink, $query);

    if(mysqli_num_rows($result) == 0) {
        // Incrémente le nombre de likes dans la table Post
        $query = "UPDATE Post SET likes = likes + 1 WHERE post_id = $postId";
        mysqli_query($dbLink, $query);

        // Ajoute une entrée dans la table Likes pour enregistrer que l'utilisateur a liké ce post
        $query = "INSERT INTO Likes (post_id, user_id) VALUES ($postId, {$_SESSION['user_id']})";
        mysqli_query($dbLink, $query);
    }
}


J'ai également tester ce code JS :

$(document).ready(function() {
  // Ajoute un événement "click" sur chaque bouton "J'aime"
  $('.like-button').click(function() {
    var postId = $(this).data('post-id');
    var likesDiv = $(this).siblings().first();

    // Envoie une requête AJAX pour incrémenter le nombre de likes
    $.ajax({
      type: 'POST',
      url: 'like.php',
      data: {post_id: postId},
      success: function() {
        // Met à jour l'affichage avec le nouveau nombre de likes
        var likesCount = parseInt(likesDiv.text().split(' ')[0]) + 1;
        likesDiv.find('span').text(likesCount + ' j\'aime');
      }
    });
  });
});


Mais rien n'y fait Smiley ohwell

Merci,
Modifié par linab (26 Apr 2023 - 10:26)
Modérateur
Bonjour,

Dans la première version, au lieu de :
<span>
  <?php echo $dbRow['likes_count'] . ' j\'aime'; ?>
  <button class="like-button" data-post-id="<?php echo $dbRow['post_id']; ?>">J'aime</button>
</span>

Il faut mettre :
<div class="likes">
    <span>
        <?php echo $dbRow['likes_count'] . ' j\'aime'; ?></span>
    <button class="like-button" data-post-id="<?php echo $dbRow['post_id']; ?>">J'aime</button>
</div>

En d'autres termes, il faut que le <button> et le <span> soient frères et non pas que le <button> soit le fils du <span>.

Amicalement,
Modérateur
Bonjour,

Ou plutôt écris :
<div class="likes">
    <span><?php echo $dbRow['likes_count'] . ' j\'aime'; ?></span><button class="like-button" data-post-id="<?php echo $dbRow['post_id']; ?>">J'aime</button>
</div>

Sinon, il y a des espaces qui s'intercalent et qui viennent perturber la suite.

Amicalement,
Je suis trop contente on avance ! :')

Ca marche à peu près !!!! C'est déjà une victoire merci. Alors effectivement j'ai remarqué que avec "l'espace" au lieu que les j'aime s'incrémentent ca affichait "NaN". Sans espace avec votre dernière version cela s'incrèmente :'). Pourriez-vous m'expliquer pourquoi cette subtilité s'il vous plait ?

j'ai quand même posé le code comme cela :

<div class="likes">
                <span><?php echo $dbRow['likes_count'] . ' j\'aime'; ?></span>
                <button class="like-button" data-post-id="<?php echo $dbRow['post_id']; ?>">J'aime</button>
            </div>


pour garder l'espace entre "j'aime" et le boutton et cela fonctionne.

Maintenant je dois essayer de limiter le click du boutton j'aime à un seul par post par utilisateur et il faut qu'il soit connecté.
Je pense que c'est avec le code de like.php :
avec un if loggedin :

// On vérifie si l'utilisateur est connecté
    $loggedIn = isset($_SESSION['user_id']);
    if ($loggedIn){
        if(mysqli_num_rows($result) == 0) {
            // Incrémente le nombre de likes dans la table Post
            $query = "UPDATE Post SET likes = likes + 1 WHERE post_id = $postId";
            mysqli_query($dbLink, $query);

            // Ajoute une entrée dans la table Likes pour enregistrer que l'utilisateur a liké ce post
            $query = "INSERT INTO Likes (post_id, user_id) VALUES ($postId, {$_SESSION['user_id']})";
            mysqli_query($dbLink, $query);
        }
    }


sauf que ca ne conditionne rien. Je me demande donc s'il faut rajouter une condition dans le JS?

Merci encore,
Salut,

A priori il faudrait que tu fasses le insert into avant le update (et du coup avec une contrainte d'unicité dans ta table Likes tu sauras si tu dois faire le update ou pas en casacade)

Et dans l'absolu on pourrait se passer du update de Post vu que c'est un recalcul d'une données que tu as deja. Il faudrait faire juste un
select count(*) from Likes where post_id=$postId;
(avec un index qui va bien sur post_id pour que ça se traîne pas trop)
Modérateur
Bonjour,

linab a écrit :
Je suis trop contente on avance ! :')
Smiley cligne

linab a écrit :
Ca marche à peu près !!!! C'est déjà une victoire merci. Alors effectivement j'ai remarqué que avec "l'espace" au lieu que les j'aime s'incrémentent ca affichait "NaN". Sans espace avec votre dernière version cela s'incrèmente :'). Pourriez-vous m'expliquer pourquoi cette subtilité s'il vous plait ?

C'est parce que dans jaime.js, la ligne var likesCount = parseInt(likesSpan.text().split(' ')[0]) + 1; dit qu'on regarde le texte qui est dans le span, qu'on le divise en plusieurs éléments en prenant un espace comme séparateur, qu'on prend le premier élément trouvé, qu'on le transforme en nombre et qu'on lui ajoute 1.

S'il y a des espaces et/ou un retour à la ligne entre le <span> et le nombre de clics, alors le premier élément trouvé ci-dessus ne sera pas le nombre de clics, mais probablement un retour à la ligne ou rien. Et quand on essaie de transformer un retour à la ligne ou rien en nombre, on obtient NaN qui signifie "Not a number".

linab a écrit :
J'ai quand même posé le code comme cela :
<div class="likes">
                <span><?php echo $dbRow['likes_count'] . ' j\'aime'; ?></span>
                <button class="like-button" data-post-id="<?php echo $dbRow['post_id']; ?>">J'aime</button>
            </div>


pour garder l'espace entre "j'aime" et le boutton et cela fonctionne.

Les espaces en fin de <span> sont ici sans conséquences vu qu'on ne s'intéresse qu'au début du <span>.

linab a écrit :
Maintenant je dois essayer de limiter le click du boutton j'aime à un seul par post par utilisateur et il faut qu'il soit connecté ... Je me demande donc s'il faut rajouter une condition dans le JS?

Il faut suivre les pistes données par Mathieuu ci-dessus. Mais déjà, il faudrait s'assurer que $_SESSION['user_id'] contient bien l'id d'un utilisateur. Par exemple en faisant provisoirement quelque chose du genre :
if(isset($_SESSION['user_id'])) $loggedIn=$_SESSION['user_id'];
else $loggedIn=null;
if ($loggedIn) file_put_contents("log.txt",date('Y-m-d H:i:s')." user id = ".$loggedIn."\n");
else file_put_contents("log.txt",date('Y-m-d H:i:s')." no user id\n");
Il suffit ensuite de regarder le contenu du fichier "log.txt" pour avoir la réponse.

Amicalement,
Modifié par parsimonhi (26 Apr 2023 - 11:43)
Mathieuu a écrit :
Salut,

A priori il faudrait que tu fasses le insert into avant le update (et du coup avec une contrainte d'unicité dans ta table Likes tu sauras si tu dois faire le update ou pas en casacade)

Et dans l'absolu on pourrait se passer du update de Post vu que c'est un recalcul d'une données que tu as deja. Il faudrait faire juste un
select count(*) from Likes where post_id=$postId;
(avec un index qui va bien sur post_id pour que ça se traîne pas trop)


Oui effectivement je n'ai même plus besoin de la ligne de update Post puisque je n'ai plus de colonne "likes" dans ma table Post. C'était ma première idée avant de créer une table likes à part entière.

J'ai fais un
 $query = "SELECT COUNT(*) FROM Likes WHERE post_id = $postId AND user_id = {$_SESSION['user_id']}";


Merci,
Non si tu rajoutes le user_id dans la condition du count tu va savoir combien de fois l'utilisateur à liké le poste ce qui devrait te retourner toujours la valeur 1 (je suppose que tu dois avoir une contrainte d'unicité sur le tuple (post_id, user_id) dans ta table Likes).
Modérateur
Bonjour,

La ligne
$loggedIn = isset($_SESSION['user_id']);
n'est pas correcte. Si on utilise ça, $loggedIn vaudra true ou false mais jamais $_SESSION['user_id'].

Il vaut mieux utiliser quelque chose du genre
if(isset($_SESSION['user_id'])) $loggedIn = $_SESSION['user_id'];
else $loggedIn = -1;


Amicalement,
parsimonhi a écrit :
Bonjour,

Il faut suivre les pistes données par Mathieuu ci-dessus. Mais déjà, il faudrait s'assurer que $_SESSION['user_id'] contient bien l'id d'un utilisateur. Par exemple en faisant provisoirement quelque chose du genre :
if(isset($_SESSION['user_id'])) $loggedIn=$_SESSION['user_id'];
else $loggedIn=null;
if ($loggedIn) file_put_contents("log.txt",date('Y-m-d H:i:s')." user id = ".$loggedIn."\n");
else file_put_contents("log.txt",date('Y-m-d H:i:s')." no user id\n");
Il suffit ensuite de regarder le contenu du fichier "log.txt" pour avoir la réponse.

Amicalement,


Merci pour les expliquations du JS et du span. C'est un peu plus clair pour moi Smiley smile