PHP-> besoin d'aide pour un compteur de clique

WRInaute occasionnel
Bonjour, je voudrai compter les cliques sortants de mon site. Par exemple, si quelqu'un clique sur un lien partenaire, l'adresse sera de type -www.example.com/click.php?id=1
Comment faire pour ajouter un click dans click.php et faire la redirection? Merci.

Voici le code que j'ai commencé (le fichier config.php a les infos pour se conecter à la base de données) :

Code:
<?php
$_SESSION['id']=$id 
?>
<?php
	include("config.php");
	$result = mysql_query("SELECT url, click FROM `click` WHERE id='$id'");
    while ($myrow = mysql_fetch_row($result)) {
    $query="UPDATE click SET click=click+1 WHERE id='$id';";
	header(
 "Location: $myrow[0]");
exit();
?>
 
WRInaute occasionnel
J'ai cherché et trouvé ça mais ça ne marche pas, sauriez-vous me dire pourquoi? Merci.

Code:
<?
if(empty($id))
{
include("index.html");
}
else
{
include("config.php");
$connexion = mysql_connect($db_host,$db_login,$db_pass);
$sql = "SELECT url, click FROM clicks WHERE id='$id'";
$result = mysql_db_query($db_name, $sql, $connexion);

while($resultat = mysql_fetch_array($result))
{
$total=$resultat[click];
$url=$resultat[url];
}
$total=$total+1;
$connexion = mysql_connect($db_host,$db_login,$db_pass);
$sql = "UPDATE clicks SET clicks='$total' WHERE id='$id'";
mysql_db_query($db_name, $sql, $connexion);

header("location: $url");
}
?>

PS : En faisant -www.example.com/click.php?id=11, je suis redirigé sur la page index.html
 
WRInaute discret
Ajoute en début de script :

parse_str(getenv("QUERY_STRING"));

pour récupérer la valeur $id de l'URL
 
WRInaute occasionnel
Ca ne marche pas, à chaque fois, la page index.html est affichée. Voici le code :
Code:
<?
parse_str(getenv("QUERY_STRING"));
if(empty($id))
{
include("index.html");
}
else
{
include("config.php");
$connexion = mysql_connect($db_host,$db_login,$db_pass);
$sql = "SELECT url, click FROM clicks WHERE id='$id'";
$result = mysql_db_query($db_name, $sql, $connexion);

while($resultat = mysql_fetch_array($result))
{
$total=$resultat[click];
$url=$resultat[url];
}
$total=$total+1;
$connexion = mysql_connect($db_host,$db_login,$db_pass);
$sql = "UPDATE clicks SET clicks='$total' WHERE id='$id'";
mysql_db_query($db_name, $sql, $connexion);

header("location: $url");
}
?>

Quelqu'un pourrait m'aider svp? Merci.
 
WRInaute discret
essaye comme ça :

Code:
<?
parse_str(getenv("QUERY_STRING"));

if (!isset($id))
{
include("index.html");
}
else
{
include("config.php");
$connexion = mysql_connect($db_host,$db_login,$db_pass);
$sql = "SELECT url, click FROM clicks WHERE id='$id'";
$result = mysql_db_query($db_name, $sql, $connexion);

while($resultat = mysql_fetch_array($result))
{
$total=$resultat[click];
$url=$resultat[url];
}
$total=$total+1;
$connexion = mysql_connect($db_host,$db_login,$db_pass);
$sql = "UPDATE clicks SET clicks='$total' WHERE id='$id'";
mysql_db_query($db_name, $sql, $connexion);

header("location: $url");
}
?>
 
WRInaute occasionnel
Merci, ça marche! Mais comment faire pour que ça vérifie le numéro id, pour que par exemple, si le lien est cassé (id=111 n'existe pas dans la base de données), ça retourne sur la page d'accueil?
Merci.
 
WRInaute discret
Comme ça je pense :
Code:
<?
parse_str(getenv("QUERY_STRING"));

if (!isset($id))
{
include("index.html");
}
else
{
include("config.php");
$connexion = mysql_connect($db_host,$db_login,$db_pass);
$sql = "SELECT url, click FROM clicks WHERE id='$id'";
$result = mysql_db_query($db_name, $sql, $connexion);

if ($resultat = mysql_fetch_array($result))
{
$total=$resultat[click];
$url=$resultat[url];

$total=$total+1;
$connexion = mysql_connect($db_host,$db_login,$db_pass);
$sql = "UPDATE clicks SET clicks='$total' WHERE id='$id'";
mysql_db_query($db_name, $sql, $connexion);

header("location: $url");
}
else
{
include("index.html");
};
};
?>
 
WRInaute occasionnel
Merci, il y avait une petite erreur dans votre code. Ca marche avec celui là :
Code:
<? 
parse_str(getenv("QUERY_STRING")); 

if (!isset($id)) 
{ 
include("index.html"); 
} 
else 
{ 
include("config.php"); 
$connexion = mysql_connect($db_host,$db_login,$db_pass); 
$sql = "SELECT url, click FROM clicks WHERE id='$id'"; 
$result = mysql_db_query($db_name, $sql, $connexion); 

if ($resultat = mysql_fetch_array($result)) 
{ 
$total=$resultat[click]; 
$url=$resultat[url]; 

$total=$total+1; 
$connexion = mysql_connect($db_host,$db_login,$db_pass); 
$sql = "UPDATE clicks SET clicks='$total' WHERE id='$id'"; 
mysql_db_query($db_name, $sql, $connexion); 

header("location: $url"); 
} 
else 
{ 
include("index.html"); 
}; 
} 
?>
 
WRInaute occasionnel
Mais le compteur de clique ne marche pas... La page est bien redirigé, mais les cliques sont toujours à 0.
 
WRInaute occasionnel
Sauriez vous me dire quelle est la fonction php qui permet de faire la somme de toutes les valeurs "click" de la table "clicks", afin de faire des stats?
Merci.
 
WRInaute discret
Je procède de cette façon :

Je définis en début de script une valeur $total=0

Puis je fais une requête allant chercher la valeur de click pour chaque ligne
de la table, du type "SELECT click FROM clicks where.... " (définir un where valable pour chaque ligne à compter, du genre where click>'0')

puis dans le while de l'execution de la requête while ($resultat = mysql_fetch_array($result))
j'ajoute $total = $total + $click;

ainsi $total s'incrémente de la valeur de $click

Il ne reste plus qu'à afficher $total à la fin de la requete.

Il y a peut-être plus simple, mais je ne connais pas la fonction spécifique, s'il y en a une.
 
WRInaute occasionnel
Ben j'ai fais ça, mais ça ne marche pas :
Code:
<?
$total = 0
$click = mysql_num_rows(mysql_query("SELECT click FROM 'clicks' where 'click'>'0'"));
while ($resultat = mysql_fetch_array($result, MYSQL_NUM)) {
$total = $total + $click;
?>

Erreur à la ligne $total = 0
 
WRInaute occasionnel
C'est bon le CODE marche sans erreur, mais il ne réalise pas la bonne chose :

Code:
<?
$total = 0;
include("config.php");
$click = mysql_num_rows(mysql_query("SELECT click FROM clicks where click>'0'"));
$total = $total + $click;
?>

Code:
Nombre de click sortant : <? echo "$total"; ?>

En fait au lieu d'indiquer les cliques sortants (par exemple 5 cliques pour l'id 1+2 cliques pour l'id2=7 cliques sortants), il affiche le nombre de lien sortant (1 avec l'id1, 2 avec l'id 2, 3 avec l'id 3...).
 
WRInaute accro
La fonction SUM(champ) fait la somme de tous les champs indiqués entre parenthèses de la table indiquée (FROM...) et avec une clause si nécessaire (WHERE...)

Dans ton cas, sans connaître la structure de la base de données que tu as adoptée :
Code:
$connexion=...
$resultat = mysql_query("SELECT SUM(click) FROM clicks where click>0"; $lien); 
if(mysql_num_rows($resultat)==1){
$unres = mysql_fetch_array($resultat);
$total = $unres[0];
}
 
WRInaute discret
Code:
<?
$total = 0;
include("config.php")
$sql = "SELECT click FROM clicks where click>'0'"
$result = mysql_query($sql);
while ($resultat = mysql_fetch_array($result))
{
$clicks = $resultat['clicks'];
$total = $total + $clicks;
}

echo $total;

?>
 
WRInaute occasionnel
Le CODE :
Code:
<? 
$total = 0; 
include("config.php") 
$sql = "SELECT click FROM clicks where click>'0'" 
$result = mysql_query($sql); 
while ($resultat = mysql_fetch_array($result)) 
{ 
$clicks = $resultat['clicks']; 
$total = $total + $clicks; 
} 

echo $total; 

?>

M'affiche une erreur :

Parse error: syntax error, unexpected T_VARIABLE in /home/benefw/public_html/test1.php on line 4
 
WRInaute accro
il manque le point virgule après :
include("config.php");
et aussi à la fin de la ligne $sql =... ;

il manque ta connexion à la base de données :

$connexion= etc.



et n'oublies pas de corriger la faute clicks par click dans la requête :

$sql = "SELECT click FROM click where click>'0'"
 
WRInaute accro
le code de ninive corrigé :

Code:
<? 
$total = 0; 
$connexion = mysql_connect($db_host,$db_login,$db_pass);
$sql = "SELECT click FROM clicks where click>'0'";
$result = mysql_query($sql,$connexion); 
mysql_close();
while ($resultat = mysql_fetch_array($result)) 
{ 
$clicks = $resultat['click']; 
$total = $total + $clicks; 
}

echo $total; 

?>

M'enfin, c'est tout de même plus court d'utiliser la fonction SUM...
 
Discussions similaires
Haut