Compteur de vue qui bug

Résolu
Codeur -  
jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention   - 27 nov. 2020 à 23:14
Bonjour,
je suis actuellement en train de créer mon site web et j'aimerais notamment qu'il y est une fonctionnalités qui permettrais de compter et afficher le nombre de vues, un système de likes et un système de recommandation d'articles à la fin de chaque d'article.
J'ai réussi à coder le système de likes et de vues mais quand je me suis mis à coder le système de recommandation d'articles, j'ai vue que le système de vues bug et augmente parfois de 2 en 2 et parfois de 1.
C'est vraiment étrange, cela fait maintenant des heures que je cherche le problème mais que je ne trouve pas de solution.
J'ai juste remarqué que quand je remplace la requête préparée :
   

$utile_donnees_rec_article_1 = $bdd->query('SELECT * FROM blog_dev_public WHERE id = ?');
$utile_donnees_rec_article_1->execute(array($rec_article_1['1']));


par
  
$utile_donnees_rec_article_1 = $bdd->query('SELECT * FROM blog_dev_public WHERE id = 1');

et bah il n'y a plus ce problême.
Je vous donne la totalité de code source et merci d'avance pour votre réponse



<?php
session_start();

function random_number($from, $to, array $excluded = [])
{
$func = function_exists('random_int') ? 'random_int' : 'mt_rand';

do {
$number = $func($from, $to);
} while (in_array($number, $excluded, true));

return $number;
}

$bdd = new PDO('mysql:host=localhost;dbname=blogs;charset=utf8','root','' , array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));


$nb_article = $bdd->query('SELECT COUNT(*) AS contenu FROM blog_dev_public');


$nb_article = $nb_article->fetch();


if( isset($_GET['id_article']) and !empty($_GET['id_article']) and $_GET['id_article'] != NULL and $_GET['id_article'] != 0 and $_GET['id_article'] <= $nb_article['contenu'] ){

$_GET['id_article'] = htmlspecialchars($_GET['id_article']);
$_GET['id_article'] = (int) $_GET['id_article'];

$utile_donnees = $bdd->prepare('SELECT * FROM blog_dev_public WHERE id = ?' );
$utile_donnees->execute(array($_GET['id_article']));


$donnees = $utile_donnees->fetch();
$utile_donnees->closeCursor();


}
else {
redirectionErreur404();
}

function redirectionErreur404()
{
header('HTTP/1.0 404 Not Found');
exit;
}

if(isset($_SESSION['LIKE_UTILISE'],$_SESSION['DISLIKE_UTILISE'] ) AND !isset($_GET['btn_like_dislike'],$_GET['color_btn']) ){
session_destroy();
session_start();
echo 'Les variables session n\'existent plus ';
}
else {
echo 'Les variables sessions existent ';
}


if(!isset($_SESSION['LIKE_UTILISE'],$_SESSION['DISLIKE_UTILISE'], $_GET['btn_like_dislike'],$_GET['color_btn'] ) ){

$fichier_compteur = fopen('php-sql/vues/compteur.txt', 'r+');
$nb_fois_page_vues = fgets($fichier_compteur);
$nb_fois_page_vues += 1;
fseek($fichier_compteur, 0);
fputs($fichier_compteur, $nb_fois_page_vues);


fclose($fichier_compteur);
$utile_requete_sql['nombre_vues'] = (int)$nb_fois_page_vues;
$utile_requete_sql['nombre_vues'] = htmlspecialchars($utile_requete_sql['nombre_vues']);

$_GET['id_article'] = (int)$_GET['id_article'] ;
$_GET['id_article'] = htmlspecialchars($_GET['id_article'] );

$var_utile = $bdd->prepare('UPDATE blog_dev_public SET nb_vues = ? WHERE id = ?');
$var_utile->execute([$utile_requete_sql['nombre_vues'], $_GET['id_article']]);


echo 'action_nb_vues a été require';
}
else {
echo 'action_nb_vues n\'a pas été require';

}

$var_contenu['contenu'] = $nb_article['contenu'];
$rec_article_1['1'] = rand(1, $var_contenu['contenu']);

$utile_donnees_rec_article_1 = $bdd->query('SELECT * FROM blog_dev_public WHERE id = 1');

$donnees_rec_article_1 = $utile_donnees_rec_article_1->fetch();

?>


<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?= $donnees['titre']; ?></title>
<link rel="stylesheet" href="header-footer/style-header.css">
<link rel="stylesheet" href="header-footer/style-footer.css">
<link rel="stylesheet" href="fichiers-styles/style-article-business.css">
<link rel="stylesheet" href="fichiers-styles/polices.css">
<link rel="icon" href="img-communes/logo_couper.png">


</head>
<body>

<?php require('header-footer/haut.php'); ?>
<main >
<section id="article">





<img src="img-communes/type_business.png" alt="categorie de l'article">
<h1 id="grand_titre" >Comment augmenter son taux de clic et son trafic web</h1>
<p id="p_presentation">
Lorem ipsum bla bla bla bla .
</p>
<aside id="infos_article" >
<span class="type_article" ><?= $donnees['type_article'];?> </span>
<span >
<?php require('php-sql/path_vue'); ?>
<?= $donnees['nb_vues']; ?>

</span>
<span class="<?php require('php-sql/u/u_btn_like_dislike().php'); ?>" onclick="location.href='<?php require('php-sql/likes/liker_disliker().php') ;?>';">

<?php require('php-sql/path_like'); ?>
<?php require('php-sql/u/u_jaime_jaime_pas().php'); ?>
<b class="<?php require('php-sql/u/u_nb_vue_like_dislike().php'); ?>" >

<?= $donnees['nb_likes']; ?>

</b>

</span>
</aside>
<img class="big_img" src="https://img01.ztat.net/article/spp-media-p1/6c5740e9238e32189968faee6b82653f/10fa2eb8929b40deb15dd43b9835f5a8.jpg?imwidth=606&filter=packshot" alt="img de l'article">
<aside class="aside_partage">
<h4>Partagez cet article</h4>

<div class="flexeur_partage">
<div class="div_partage partage_facebook" onclick="location.href='<?= $donnees['lien_facebook']; ?>';">
<img src="img-communes/petite_icone_facebook.png" alt="">
<span>Facebook</span>
</div>

<div class="div_partage partage_tweeter" onclick="location.href='<?= $donnees['lien_tweeter']; ?>';">
<img src="img-communes/petite_icone_twitter.png" alt="">
<span>Tweeter</span>
</div>
</div>

</aside>
<div class="contenu_article">
<?= $donnees['contenu'] ;?>
</div>
<!--La ou le texte a été enlevé-->

<article id="acheter_livre" onclick="location.href='<?= $donnees['lien_amazon']; ?>';">

<article id="annonce_livre" >

<h2>Vous souhaitez aller plus loin ?</h2>
<div>
<img src="<?= $donnees['img_lien_amazon'] ;?>" id="img_acheter_livre" alt="">
<p id="nom_livre" ><?= $donnees['titre_livre_lien_amazon'] ;?></p>
<img src="img-communes/logo_amazon" alt="logo amazon" id="logo_amazon">
<p id="bouton_amazon" ><a href="<?= $donnees['lien_amazon'] ;?>">Se rendre sur le site</a></p>
</div>

</article>

</article>

//Voici la partie des articles conseillés
<article id="articles_conseilles">

<h2 id="titre_partie_articles_conseilles" >D'autres articles sélectionnés pour vous </h2>

<div id="flexeur_articles_conseilles">

<article onclick="location.href='article.php?id_article=<?= $donnees_rec_article_1['id']; ?>';">

<div class="img_articles_conseilles" style="background-image: url(<?= $donnees_rec_article_1['url_image'] ; ?>) " ></div>

<div class="div_deux" >

<h3 ><?= $donnees_rec_article_1['titre']; ?></h3>
<p><?= $donnees_rec_article_1['texte_presentation']; ?></p>

<aside class="infos_articles_conseilles" >
<span class="infos_articles_momms">

<?php include('php-sql/path_vue'); ?>
<?= $donnees_rec_article_1['nb_vues']; ?>

</span>
<span class="infos_articles_momms">

<?php include('php-sql/path_like'); ?>
<?= $donnees_rec_article_1['nb_likes']; ?>

</span>
</aside>
</div>
</article>
<?php $utile_donnees_rec_article_1->closeCursor(); ?>

</div>
</article>
<?php require('php-sql/commentaires/function_afficher_commentaires().php'); ?>


<article id="poster_comms">

<h3 id="repondre" >Laisser un commentaire</h3>
<p id="indication_poster_comms">Votre adresse email ne sera pas publiée. Les champs requis sont indiqués *</p>

<form action="php-sql/commentaires/creer_commentaires.php" method="get">

<textarea name="texte_commentaire" placeholder="Commentaire*" id="textarea" required></textarea>
<div id="flexeur_inputs" >
<input type="text" placeholder="Prenom*" name="prenom_commentaire" required>
<input type="text" placeholder="Votre nom *" name="nom_commentaire" required>
<input type="email" placeholder="Votre email" name="email_commentaire" required>
<input type="hidden" name="id_article" value="<?=$_GET['id_article']; ?>">
<input type="hidden" name="parent_id_referer"
value="<?php
if(isset($_GET['id_commentaire']) AND !empty($_GET['id_commentaire'])){
echo $_GET['id_commentaire'];
}
else {
echo '0';
}
?>">
</div>
<button id="btn_submit_comms" type="submit">Déposer mon commentaire</button>

</form>

</article>

</section>
</main>
<?php require('header-footer/bas.php'); ?>

</body>
</html>

A voir également:

1 réponse

jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention   4 746
 
Bonsoir,

En utilisant les bonnes fonctions... ça marchera mieux....

$utile_donnees_rec_article_1 = $bdd->prepare('SELECT * FROM blog_dev_public WHERE id = ?');  
$utile_donnees_rec_article_1->execute(array($rec_article_1['1']));


Je t'invite au passage ( encore une fois....) à appliquer les conseils donnés ici :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

Ainsi que ceux la :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Et puis, à l'avenir, merci de préciser le LANGAGE dans les balises de code afin que l'on ait la coloration syntaxique et la numérotation des lignes.
Explication ( à lire ENTIEREMENT !!!! ) disponibles ici : *
https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

La dernière fois que je t'ai donné ces liens tu m'as répondu que ça ne t'avait pas servi .... mais bon.. en même temps je constate que tu n'as même pas appliqué un seul de ces conseils....
J'espère que cette fois, la lecture de ces liens ne sera pas trop fatigante pour toi et que tu essaieras au moins de les appliquer un minimum ( et donc de réécrire ton code en en tenant compte... )
Aller... courage.... tu vas finir par progresser.







1