oujood.com

>Comment créer un système de Like & Unlike en PHP, MySQL et jQuery?

Ce script fonctionne comme le système de "j'aime" et "je n'aime pas" de Youtube pour les vidéos. Ce script fonctionne parfaitement sur votre site web. Vous pouvez passer des URL ou intégrer des identifiants. C'est un script basé sur PHP, MySQL et jQuery.

chercher |

Tutoriel pour un script de système "J'aime" et "Je n'aime pas"

Dans ce tutoriel, nous allons explorer un script qui fonctionne de manière similaire au système "J'aime" et "Je n'aime pas" de YouTube pour les vidéos. Ce script est entièrement opérationnel sur votre site web, vous offrant la possibilité de transmettre des URL ou d'intégrer des identifiants. Développé en PHP, MySQL et jQuery, ce script reproduit la fonctionnalité de notation des vidéos, similaire à celle de YouTube.

Détails de la base de données :
nom de la base de données => system
nom de la table => produits
nom de la table => like

Le fichier : db.sql
Le fichier de base de données s'exécute dans votre MySQL pour créer une base de données et ajouter des données à la table.

Exemple :       Copier le code

-- 
-- Structure de la table `likes`
-- 

CREATE TABLE `likes` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `pid` int(10) NOT NULL,
  `like` int(10) NOT NULL,
  `unlike` int(10) NOT NULL,
  `uid` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1;



-- --------------------------------------------------------

-- 
-- Structure de la table `produits`
-- 

CREATE TABLE `produits` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `produit_name` varchar(255) NOT NULL,
  `prix` double(10,2) NOT NULL DEFAULT '0.00',
  `image` varchar(255) NOT NULL,
  `statut` int(2) NOT NULL DEFAULT '1', 
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4;

-- 
-- Ajout des données dans la table `produits`
-- 

INSERT INTO `produits` VALUES (1, 'PHP Books', 20.00, '1.jpg', 1);
INSERT INTO `produits` VALUES (2, 'RestAPI Code', 10.00, '2.jpg', 1);
INSERT INTO `produits` VALUES (3, 'oujood Abonnement annuel', 100.00, '3.jpg', 1);

Ce fichier SQL définit deux tables, `likes` et `produits`, ainsi que quelques données initiales pour la table `produits`.

La table `likes` comprend les colonnes suivantes :

  • id : Clé primaire auto-incrémentée de type entier.
  • pid : Clé étrangère faisant référence à l'ID d'un produit.
  • like : Nombre d'approbations (likes) pour un produit.
  • unlike : Nombre de désapprobations (unlikes) pour un produit.
  • uid : Identifiant de l'utilisateur qui a donné le like ou l'unlike.

La table `produits` est constituée des colonnes suivantes :

  • id : Clé primaire auto-incrémentée de type entier.
  • produit_name : Nom du produit (texte).
  • prix : Prix du produit (nombre décimal à deux décimales).
  • image : Chemin ou nom de fichier pour l'image associée au produit.
  • statut : Statut du produit (peut être utilisé pour indiquer s'il est actif ou non).

Les données initiales ajoutées à la table `produits` comprennent trois enregistrements avec des informations telles que le nom du produit, le prix, le nom de fichier de l'image associée et un statut par défaut actif.

Si vous avez des questions spécifiques sur l'utilisation de ce fichier SQL ou si vous avez besoin d'une assistance supplémentaire, n'hésitez pas à demander !

Le fichier : db.php
Modifiez ce fichier en fonction des informations d'identification de votre base de données.

Exemple :       Copier le code

<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'username');
define('DB_PASSWORD', 'password');
define('DB_DATABASE', 'database');
$connection = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
?>

Ce fichier PHP définit des constantes pour les paramètres de connexion à une base de données MySQL et crée une connexion à cette base de données en utilisant l'extension MySQLi.

Voici ce que font les différentes lignes de code dans ce fichier PHP :

  • define('DB_SERVER', 'localhost');: Définit une constante DB_SERVER avec la valeur 'localhost', représentant le serveur de base de données.
  • define('DB_USERNAME', 'username');: Définit une constante DB_USERNAME avec la valeur 'username', représentant le nom d'utilisateur de la base de données.
  • define('DB_PASSWORD', 'password');: Définit une constante DB_PASSWORD avec la valeur 'password', représentant le mot de passe de la base de données.
  • define('DB_DATABASE', 'database');: Définit une constante DB_DATABASE avec la valeur 'database', représentant le nom de la base de données.
  • $connection = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);: Établit une connexion à la base de données en utilisant la fonction mysqli_connect avec les paramètres fournis : le serveur de base de données, le nom d'utilisateur, le mot de passe et le nom de la base de données. Cette connexion est stockée dans la variable $connection.

Ce fichier PHP est typiquement utilisé pour se connecter à une base de données MySQL en utilisant l'extension MySQLi de PHP. Assurez-vous de remplacer 'localhost', 'username', 'password', et 'database' par les valeurs appropriées pour votre configuration de base de données.

Il est important de garder ce type de fichiers contenant des informations sensibles (comme les mots de passe) sécurisé, en limitant l'accès à ces informations uniquement aux personnes autorisées.

Le fichier : index.php
Il contient du code PHP pour mettre à jour les enregistrements du tableau et afficher le nombre actuel dans le fichier ; dans ce fichier, nous avons utilisé des cookies pour ignorer les mentions "J'aime" et "Je n'aime pas" non valides.
Le fichier principal affiche la liste des produits et les boutons "J'aime" :

Exemple :       Copier le code

<?php
session_start();
include("db.php");
if(!isset($_SESSION['user']))
{
    $_SESSION['user'] = session_id();
}
$uid = $_SESSION['user'];  // définir les paramètres de l'identifiant de l'utilisateur

$query  = "SELECT * FROM  `produits`"; // lliste des produits
$res    = mysqli_query($connection,$query);
$HTML = "";
while($row=mysqli_fetch_array($res))
{
    // Produits likes et dislikes
    $query = mysqli_query($connection,"select sum(`like`) as `like`,sum(`unlike`) as `unlike` from `likes` where pid = ".$row['id']);
    $rowCount = mysqli_fetch_array($query);
    if($rowCount['like'] == "")
        $rowCount['like'] = 0;
        
    if($rowCount['unlike'] == "")
        $rowCount['unlike'] = 0;
        
    if($uid == "") // Si l'utilisateur n'est pas connecté, afficher le lien de connexion lors du clic sur le bouton "like".
    {
        $like = '
            <input onclick="location.href = \'login.php\';" type="button" value="'.$rowCount['like'].'" rel="'.$row['id'].'" data-toggle="tooltip"  data-placement="top" title="Login to Like" class="button_like" />
            <input onclick="location.href = \'login.php\';" type="button" value="'.$rowCount['unlike'].'" rel="'.$row['id'].'" data-toggle="tooltip" data-placement="top" title="Login to Unlike" class="button_unlike" />';
    }
    else
    {
        $query = mysqli_query($connection,"SELECT * from `likes` WHERE pid='".$row['id']."' and uid='".$uid."'");
        if(mysqli_num_rows($query)>0){ //si vous avez déjà aimé ou ne pas aimé un produit
            $likeORunlike = mysqli_fetch_array($query);
            // Effacer les valeurs des variables
            $liked = '';
            $unliked = '';
            $disable_like = '';
            $disable_unlike = '';
            
            if($likeORunlike['like'] == 1) // Si vous avez déjà aimé, désactivez le bouton "J'aime".
            {
                $liked = 'disabled="disabled"';
                $disable_unlike = "button_disable";
            }
            elseif($likeORunlike['unlike'] == 1) // si déjà vous n'aimez pas le bouton "je n'aime pas" est désactivé
            {
                $unliked = 'disabled="disabled"';
                $disable_like = "button_disable";
            }
            
            $like = '
            <input '.$liked.' type="button" value="'.$rowCount['like'].'" rel="'.$row['id'].'" data-toggle="tooltip"  data-placement="top" title="Like" class="button_like '.$disable_like.'" id="linkeBtn_'.$row['id'].'" />
            <input '.$unliked.' type="button" value="'.$rowCount['unlike'].'" rel="'.$row['id'].'" data-toggle="tooltip" data-placement="top" title="Un-Like" class="button_unlike '.$disable_unlike.'" id="unlinkeBtn_'.$row['id'].'" />
            ';
        }
        else{ 
            $like = '
            <input  type="button" value="'.$rowCount['like'].'" rel="'.$row['id'].'" data-toggle="tooltip"  data-placement="top" title="Like" class="button_like" id="linkeBtn_'.$row['id'].'" />
            <input  type="button" value="'.$rowCount['unlike'].'" rel="'.$row['id'].'" data-toggle="tooltip" data-placement="top" title="Un-Like" class="button_unlike" id="unlinkeBtn_'.$row['id'].'" />
            ';
        }
    }
        
    $HTML.='
        <li> <img src="images/'.$row['image'].'" class="">
            <h4 class="">'.$row['produit_name'].'</h4>
            <div class="produit-price">
                <span class="normal-price">$'.$row['price'].'</span>
            </div>
            <a href="#" class="btn btn-default navbar-btn" >Buy Now</a>
            <div class="grid">
                '.$like.'
            </div>
        </li>';
}

?>
<!doctype html>
<head>
    <title>Créer un système de Like & Unlike en PHP MySQL et jQuery | www.oujood.com</title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <script type="text/javascript" src="jquery-1.8.0.min.js"></script>
    <script type="text/javascript" src="script.js"></script>
    <link href="style.css" rel="stylesheet" type="text/css" />
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
  </head>
  <body>
  <h2><a href="#">Création d'un système "Like & Unlike" en PHP MySQL et jQuery</a></h2><br><br>
  <div class="container">
    <div class="row">
    <h1>ojood.com PHPLift Boutique</h1>
        <div class="col-sm-12 col-md-12">
            <ul class="thumbnail-list">
            <?php echo $HTML; ?>
            </ul>
        </div>
    </div>
</div>
  </body>
</html>

Le fichier index.php est une page web qui affiche une liste de produits avec les fonctionnalités "Like" et "Unlike" pour chaque produit. Voici un aperçu des fonctionnalités principales de ce code :

  1. Initialisation de session : Le code démarre une session avec session_start(). Il inclut également un fichier db.php qui, à partir de ce que vous avez montré précédemment, contient les paramètres de connexion à la base de données.
  2. Récupération des produits depuis la base de données : Il exécute une requête SQL pour récupérer tous les produits depuis la table produits avec la requête $query = "SELECT * FROM produits";.
  3. Boucle sur les produits : Pour chaque produit récupéré, le code construit une liste HTML affichant les détails du produit (nom, image, prix) ainsi que les boutons "Like" et "Unlike".
  4. Vérification de l'état de Like/Unlike pour un utilisateur connecté : Si un utilisateur est identifié (via $_SESSION['user']), le code vérifie s'il a déjà aimé ou n'aimé pas le produit actuel. Si l'utilisateur n'est pas connecté, les boutons de Like/Unlike redirigent vers une page de connexion.
  5. Gestion des boutons de Like/Unlike : Les boutons sont configurés pour interagir avec la base de données via des requêtes AJAX (probablement gérées dans le fichier script.js) lorsqu'ils sont cliqués.
  6. Affichage des résultats : Une fois la boucle terminée, le HTML généré est affiché, montrant la liste des produits avec les boutons de Like/Unlike.

Assurez-vous d'avoir le fichier jquery-1.8.0.min.js, script.js, style.css et les images dans les bons emplacements pour que la page fonctionne correctement. De plus, assurez-vous que la connexion à la base de données est établie correctement via le fichier db.php.

N'oubliez pas de mettre en place la sécurité pour les requêtes SQL, notamment en utilisant des requêtes préparées pour éviter les injections SQL. De même, assurez-vous de protéger l'accès aux fonctionnalités réservées aux utilisateurs connectés en vérifiant correctement leur session.

Le code ci-dessous est utilisé pour afficher l'action du bouton "J'aime" :

Exemple :       Copier le code

<?php
if($_POST)
{
    $pid    = mysqli_real_escape_string($connection,$_POST['pid']);  // id du produit 
    $op     = mysqli_real_escape_string($connection,$_POST['op']);  // variable pour like ou unlike 
    

    if($op == "like")
    {
        $gofor = "like";
    }
    elseif($op == "unlike")
    {
        $gofor = "unlike";
    }
    else
    {
        exit;
    }
    // Requete pour vérifier si l'on a déjà aimé ou non 
    $query = mysqli_query($connection,"SELECT * from `likes` WHERE pid='".$pid."' and uid='".$uid."'");
    $num_rows = mysqli_num_rows($query);

    if($num_rows>0) // Vérifier si l'on a déjà aimé ou non 
    {
        $likeORunlike = mysqli_fetch_array($query);
    
        if($likeORunlike['like'] == 1)  // si déjà aimé set unlike pour produit déjà aimé
        {
            mysqli_query($connection,"update `likes` set `unlike`=1,`like`=0 where id='".$likeORunlike['id']."' and uid='".$uid."'");
            echo 2;
        }
        elseif($likeORunlike['unlike'] == 1) 
        {
            mysqli_query($connection,"update `likes` set `like`=1,`unlike`=0 where id='".$likeORunlike['id']."' and uid='".$uid."'");
            echo 2;
        }
    }
    else  // Nouveau Like
    {
       mysqli_query($connection,"INSERT INTO `likes` (`pid`,`uid`, `$gofor`) VALUES ('$pid','$uid','1')");
       echo 1;
    }
    exit;
}
?>

Ce code PHP semble gérer les opérations de "Like" et "Unlike" pour un produit donné. Voici ce que fait ce code :

  1. Réception des données POST : Il vérifie si des données ont été envoyées via la méthode POST (if($_POST)).
  2. Récupération des valeurs POST : Les valeurs POST pour pid (ID du produit) et op (l'action, "like" ou "unlike") sont récupérées et échappées pour éviter les attaques par injection SQL (mysqli_real_escape_string).
  3. Détermination de l'action : En fonction de la valeur de op, il détermine s'il s'agit d'un "like" ou d'un "unlike" pour le produit.
  4. Vérification de l'état précédent : Une requête SQL est exécutée pour vérifier si l'utilisateur a déjà aimé ou n'aimé pas ce produit. Si des enregistrements correspondants sont trouvés dans la table likes, il vérifie également si l'utilisateur a déjà aimé ou n'aimé pas ce produit.
  5. Mise à jour ou insertion dans la table likes : En fonction des résultats de la vérification précédente, le code met à jour les valeurs de "like" ou "unlike" pour l'utilisateur donné et le produit donné. Si aucun enregistrement correspondant n'est trouvé, il insère un nouvel enregistrement dans la table likes pour cet utilisateur et ce produit avec la valeur "like" ou "unlike" appropriée.
  6. Réponse JSON : Il renvoie une réponse au format JSON indiquant le statut de l'opération (1 pour un nouveau Like, 2 pour une mise à jour).

Il est important de noter que le code utilise mysqli_real_escape_string pour échapper les données POST, ce qui peut aider à prévenir les injections SQL. Cependant, l'utilisation de requêtes préparées est fortement recommandée pour une meilleure sécurité.

De plus, assurez-vous que la variable $uid est correctement définie et sécurisée pour éviter les problèmes de sécurité potentiels.

Enfin, ce code ne semble pas implémenter la gestion des erreurs ou des retours non prévus lors de l'exécution des requêtes SQL. Il est recommandé de gérer les erreurs et les exceptions pour assurer une robustesse et une fiabilité accrues du code.

Il s'agit d'un code simple et facile à utiliser pour les systèmes "like" et "unlike" ; j'espère que vous l'apprécierez. N'hésitez pas à nous faire part de vos remarques ou si vous rencontrez un problème, n'hésitez pas à nous contacter via le lien ci-dessous:

Nous contacter



Retour à l'accueil du site


Voir aussi nos tutoriel :

Les images dans bootstrap

Apprenez à appliquer le style aux images, créer des vignettes, des grilles d'images et de vidéos et plus à l'aide de Bootstrap.

background-image

Définit l'image de fond d'un élément

L'Attribut dir

Spécifie l'orientation du texte dans un élément