[PHP] Nombre de fois que l'article est lu
Résolu/Fermé
zimeau
Messages postés
711
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
10 juin 2014
-
11 mars 2010 à 19:57
zimeau Messages postés 711 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 10 juin 2014 - 11 mars 2010 à 23:03
zimeau Messages postés 711 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 10 juin 2014 - 11 mars 2010 à 23:03
A voir également:
- [PHP] Nombre de fois que l'article est lu
- Whatsapp message lu mais pas bleu - Guide
- Sms distribué mais pas lu ✓ - Forum iPhone
- Qu'est ce qu'une femme fait 3 fois par jour et un homme une fois dans sa vie ✓ - Forum Loisirs / Divertissements
- Je suis une chose que les garçons utilisent deux fois par jour et les filles une fois toute leur vie - Forum Loisirs / Divertissements
8 réponses
avion-f16
Messages postés
19249
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
15 juin 2024
4 504
11 mars 2010 à 21:56
11 mars 2010 à 21:56
Il suffit de stocker l'IP des articles consultés dans une variable de session. Cette variable serait un array.
/* $idarticle = Identifiant de l'article dans la table $nb_lecture = Nombre de lectures avant le chargement de la page */ if(!array_key_exists($idarticle, $_SESSION['articles_lus']) { $_SESSION[articles_lus'][] = $idarticle; $sql = 'UPDATE 'articles' SET 'nb_lecture'='.intval($nblecture++).' WHERE 'id'='.$idarticle; // ... }
avion-f16
Messages postés
19249
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
15 juin 2024
4 504
11 mars 2010 à 20:10
11 mars 2010 à 20:10
Crées une table "lectures" avec 2 champs :
ip (INT) : contient l'IP convertie en INT avec ip2long()
article_id (même type que le champ 'id'de ta table 'articles') : contient tout simplement l'id de l'article.
Ensuite, il te suffit de compter le nombre d'entrée "WHERE ip = ip2long($ip) AND article_id = $article_id" : S'il y en a 1, alors tu fais une requête INSERT INTO.
ip (INT) : contient l'IP convertie en INT avec ip2long()
article_id (même type que le champ 'id'de ta table 'articles') : contient tout simplement l'id de l'article.
Ensuite, il te suffit de compter le nombre d'entrée "WHERE ip = ip2long($ip) AND article_id = $article_id" : S'il y en a 1, alors tu fais une requête INSERT INTO.
zimeau
Messages postés
711
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
10 juin 2014
117
11 mars 2010 à 20:48
11 mars 2010 à 20:48
l'idée est bonne! mais est ce que c'est pas un système qui risquerais de remplir ma base de donnée à la longue?
avion-f16
Messages postés
19249
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
15 juin 2024
4 504
11 mars 2010 à 21:09
11 mars 2010 à 21:09
Si, mais il n'y a pas vraiment d'autre solution car il faut bien stocker l'IP quelque-part et l'ID de l'article consulté.
Il y a aussi une technique avec les sessions mais une session est perdue à la fermeture du navigateur.
Ou bien les cookies ... mais ça risque de faire beaucoup.
Il y a aussi une technique avec les sessions mais une session est perdue à la fermeture du navigateur.
Ou bien les cookies ... mais ça risque de faire beaucoup.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
zimeau
Messages postés
711
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
10 juin 2014
117
11 mars 2010 à 21:24
11 mars 2010 à 21:24
en faite, ce que je veux éviter, c'est qu'un utilisateur lambda (qui ne connais donc rien aux sessions) ne puisse cliquer sur un article pour faire monter les stats trop facilement. il faut connaitre le fonctionnement des session pour penser a fermer et ouvrir le navigateur pour modifié les stats. c'est pour sa que j'ai penser aux session. mais je ne sais pas bien comment l'utiliser. j'ai bien mis mon <?php session_start(); ?> avant le début de mon code html. je ne sais pas comment savoir si la session est ouverte ou non.
zimeau
Messages postés
711
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
10 juin 2014
117
11 mars 2010 à 22:37
11 mars 2010 à 22:37
j'essaye de décrire le code. je ne connais pas array_key_exists(), j'ai donc fait la recherche :
array_key_exists() retourne TRUE s'il existe une clé du nom de key dans le tableau search . key peut être n'importe quelle valeur valide d'index de tableau.
donc, sa donne :
si il ne trouve pas $idarticle dans la variable global $_SESSION['articles_lus'], il met l'id de l'article dans $_SESSION['articles_lus'].
puis il met a jour la valeur dans la base de donnée.
je pense avoir compris, je test donc avec ce code :
/*
$id = Identifiant de l'article dans la table
*/
if(!array_key_exists($id, $_SESSION['articles_lus'])) {
$_SESSION['articles_lus'][] = $id;
echo "article pas encore lu";
}
else {
echo "article lu";
}
mais j'ai toujours "article pas encore lu" qui s'affiche.
ou est mon erreur?
Merci
array_key_exists() retourne TRUE s'il existe une clé du nom de key dans le tableau search . key peut être n'importe quelle valeur valide d'index de tableau.
donc, sa donne :
si il ne trouve pas $idarticle dans la variable global $_SESSION['articles_lus'], il met l'id de l'article dans $_SESSION['articles_lus'].
puis il met a jour la valeur dans la base de donnée.
je pense avoir compris, je test donc avec ce code :
/*
$id = Identifiant de l'article dans la table
*/
if(!array_key_exists($id, $_SESSION['articles_lus'])) {
$_SESSION['articles_lus'][] = $id;
echo "article pas encore lu";
}
else {
echo "article lu";
}
mais j'ai toujours "article pas encore lu" qui s'affiche.
ou est mon erreur?
Merci
loulou8484
Messages postés
29
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
26 avril 2010
2
11 mars 2010 à 22:55
11 mars 2010 à 22:55
Peut etre que je me trompe et je dit des betises mais il me semble qu'il faut un session_start();
avant
Voila,
avant
Voila,
zimeau
Messages postés
711
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
10 juin 2014
117
11 mars 2010 à 23:03
11 mars 2010 à 23:03
merci de ta réponse, mais comme je l'ai mis plus haut :
"j'ai bien mis mon <?php session_start(); ?> avant le début de mon code html. je ne sais pas comment savoir si la session est ouverte ou non."
le problème n'est donc malheureusement pas la.
merci quand même! ^^
"j'ai bien mis mon <?php session_start(); ?> avant le début de mon code html. je ne sais pas comment savoir si la session est ouverte ou non."
le problème n'est donc malheureusement pas la.
merci quand même! ^^