Compteur de clics

Fredy07
Invité n'ayant pas de compte PHPfrance

16 août 2009, 01:38

Bonjour,

J'ai un petit problème avec le compteur des pages vues, il doit être incrémenter par 1 mais il s'incrémente par 2.
<?php
echo 'accueil';

################################## select to show the data #######################################
$select_sd = 'SELECT * from sds WHERE id_sd=1';
$result_sd = mysql_query ($select_sd) or die ('Erreur de selection: ' .mysql_error());
$total_sd = mysql_num_rows($result_sd);

if ($total_sd) {
	$row_sd = mysql_fetch_array($result_sd);
		
		$id_sd 			= $row_sd['id_sd'];
		$classement 	= $row_sd['classement'];
		$title_ar 		= $row_sd['title_ar'];
		$title_en 		= $row_sd['title_en'];
		$description 	= $row_sd['description'];
		$url 			= $row_sd['url'];
		$hits 			= $row_sd['hits'];
		
		echo '<br>hits:'.$hits.'<br>';
		echo 'id sd:'.$id_sd.'<br>';

include 'Included_Files/Replacement.php';			

$counter = $hits + 1;

echo 'counter'.$counter.'<br>';
		echo '<div align="center">Page vue: '.$hits.' fois and was generated on xxxx seconds</div><br>';
	
	################################## update the counter for hits #######################################
$update_sd = "UPDATE sds SET hits = $counter WHERE id_sd = 1";
echo $update_sd.'<br>';
$rup_sd = mysql_query($update_sd) OR DIE ('Erreur update: '. mysql_error());
}
?>
merci pour votre aide

Eléphanteau du PHP | 17 Messages

16 août 2009, 09:48

tu pourrais refaire une lecture après l'update pour voir? c'est bizarre ton truc, ça sent la race condition...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 août 2009, 19:07

Je n'arrive pas à voir d'où provient ta double incrémentation, mais ta façon de faire n'est pas bonne.. si tu as deux visiteurs qui se connectent simultanément, tu vas écraser ton compteur avec deux fois la même valeur au lieu de l'incrémenter deux fois.

Pour mettre à jour ton compteur, fais le directement en sql, les bases de données savent bien mieux gérer les accès multiples :
$update_sd = "UPDATE sds SET hits = hits + 1 WHERE id_sd = 1";
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Fredy07
Invité n'ayant pas de compte PHPfrance

17 août 2009, 03:16

Rebonjour,

Le code est correct et je l'utilise en local, le problème provient du fichier CSS qui charge l'entête de la page et continue le chargement, c'est pour cela que le compteur s'incremente en double.

Merci pour votre aide.