Liste conditionnelle en panne

Signaler
-
 Mesosm94 -
Bonjour

J'ai sur mon site un compteur qui fonctionne parfaitement, mais je voudrais le modifier pour voir l'ordre de consultation des pages.
Je reste bloqué avec la fonction "if" qui ne fonctionne pas normalement, je ne trouve pas ou est l'erreur, c'est toujours le premier "if" qui prend l'info sans se soucier de la valeur des clics.
Si je supprime "else", tous prennent le même résultat.
La bdd est sur MySql

Voici mon code

if($deja_connecter=='1')
{
$sql_connect = mysql_connect($sql_serveur,$sql_login,$sql_password);
mysql_select_db($bd, $sql_connect);
$req="select clic from mon_compteur where ip='$ip_connecte'";
$resultclic=mysql_query($req,$sql_connect);
$ligneclic=mysql_fetch_array($resultclic);
$clic=$ligneclic;
if($clic >= 4) // plus de 4 pages consultées
{
$clic = ++ $ligneclic[clic];
mysql_query("UPDATE mon_compteur Set clic='$clic',format='$format',page='$page' where ip='$ip_connecte' ");
}
else if($clic = 3) // 4e page consultée
{
$cpc=$_SERVER['PHP_SELF'];
$chpc=date('d-m-Y H:i');
$clic = ++ $ligneclic[clic];
mysql_query("UPDATE mon_compteur Set clic='$clic',format='$format',chpc='$chpc',cpc='$cpc',page='$page' where ip='$ip_connecte' ");
}
else if($clic = 2) // 3e page
{
$bpb=$_SERVER['PHP_SELF'];
$bhpb=date('d-m-Y H:i');
$clic = ++ $ligneclic[clic];
mysql_query("UPDATE mon_compteur Set bhpb='$bhpb',bpb='$bpb',clic='$clic',format='$format',page='$page' where ip='$ip_connecte' ");
}
else if($clic = 1) // 2e page
{
$pa2=$_SERVER['PHP_SELF'];
$hpa2=date('d-m-Y H:i');
$clic = ++ $ligneclic[clic];
mysql_query("UPDATE mon_compteur Set hpa2='$hpa2',pa2='$pa2',clic='$clic',format='$format',page='$page' where ip='$ip_connecte' ");
}
}

etc...

Précision : l'incrémentation se fait parfaitement et le nom de la page et l'heure également mais toujours dans le premier conditionnel.

Merci pour vos lumières je ne suis pas un surdoué

11 réponses


bon déjà je me suis permis de factoriser un peu ton code (j'ai commenté, mais n'hésite pas à demander.

if($deja_connecter=='1') 
{ 
$sql_connect = mysql_connect($sql_serveur,$sql_login,$sql_password); 
mysql_select_db($bd, $sql_connect); 
$req = "select clic from mon_compteur where ip='$ip_connecte'"; 
$resultclic = mysql_query($req,$sql_connect); 
$ligneclic = mysql_fetch_array($resultclic); 

//pourquoi faire ça puisque tu ne t'en sert pas après ?
//$clic=$ligneclic; 

//un peu defactorisation ne fait pas de mal
$cpc $bpb $pa2 = $_SERVER['PHP_SELF']; //pourquoi utiliser plusieurs variable ?
$chpc $bhpb $hpa2 = date('d-m-Y H:i'); //pourquoi utiliser plusieurs variable ?

//vu que tu le fais systématiquement autant le mettre avant
$clic = ++ $ligneclic['clic']; // je ne pense pas que clic soit uen constante il faut donc le mettre entre '

if($clic >= 4) // plus de 4 pages consultées 
{ 
mysql_query("UPDATE mon_compteur Set clic='$clic',format='$format',page='$page' where ip='$ip_connecte' "); 
} 
else if($clic == 3) // 4e page consultée Attention, il faut utiliser le double égale, sinon tu met la valeur 3 dans clic et el teste de ça retourne true
{ 
mysql_query("UPDATE mon_compteur Set clic='$clic',format='$format',chpc='$chpc',cpc='$cpc',page='$page' where ip='$ip_connecte' ");
} 
else if($clic == 2) // 3e page 
{ 
mysql_query("UPDATE mon_compteur Set bhpb='$bhpb',bpb='$bpb',clic='$clic',format='$format',page='$page' where ip='$ip_connecte' ");
} 
else if($clic == 1) // 2e page 
{ 
mysql_query("UPDATE mon_compteur Set hpa2='$hpa2',pa2='$pa2',clic='$clic',format='$format',page='$page' where ip='$ip_connecte' ");
} 
} 


Avec les au lieu de tes dans les if, ça devrait mieux fonctionner.
Si tu mets juste = le if va tester le fait de donner la valeur 3 à la variable $clic (il ne passera donc jamais dans les autres à partir du moment ou tu ne passe pas dans le premier if). Ce qui est vrai ^^
Le == te permet de comparer la valeur de $clic à 3 ou 2 ou 1 suivant le if.

Je pense que ça marchera mieux comme ça.
Merci d'avoir regardé mon problème.

mais j'avais déjà testé "==" et là plus rien ne s'affiche, j'ai vérifié la bdd "clic" s'incrémente.
De plus j'ai une page non consultable de l'extérieur qui m'affiche les résultats de tous les visiteurs et la colonne "clic" est bien incrémentée à chaque consultation.

En réponse :
if($deja_connecter=='1')
J'utilise également =='0' pour la 1ere page d'une part et pour faire un nouveau dossier pour tout nouveau visiteur.
*****
else if($deja_connecter=='0')
{
$clic = ++ $ligneclic[clic];
$ouve=$_SERVER['PHP_SELF'];
$format="M";
$heure=date('d-m-Y H:i');
mysql_query("INSERT Into mon_compteur (ip,heure,clic,ouve,format,page) VALUES ('$ip_connecte','$heure','$clic','$ouve','$format','$page')");
}
mysql_close(); //fermeture de la connexion avec MySQL
***** La partie ci-dessus fonctionne impec ($format="M") est fonction de l'écran du visiteur et sans influence sur le reste.

$cpc $bpb $pa2 = $_SERVER['PHP_SELF']; //pourquoi utiliser plusieurs variable ?

Cela correspond $pa2 signifie 2e page consultée
$bpb = 3e page, etc...

Pour
$clic = ++ $ligneclic['clic'];
Je peux mettre ' mais l'incrémentation fonctionne sans

Pour
$clic = ++ $ligneclic['clic'];
Je peux mettre ' mais l'incrémentation fonctionne sans


$clic = ++ $ligneclic[clic]; va fonctionner mais va généré une erreur de type notice qui n'est certe pas impactante sur le déroulé du script, mais c'est quand même une erreur, autant la corrigé.

$cpc $bpb $pa2 = $_SERVER['PHP_SELF']; //pourquoi utiliser plusieurs variable ?

Cela correspond $pa2 signifie 2e page consultée
$bpb = 3e page, etc...

Rien ne t'oblige d'utiliser des variable avec le même nom que tes champs.
tu peut très bien utiliser le $_SERVER['PHP_SELF'] directement dans ta requette. Ca évite d'instantié une variable pour rien. Au pire n'en utilise qu'une, puisque c'est la même quelque soit la page consulté.

mais j'avais déjà testé "==" et là plus rien ne s'affiche, j'ai vérifié la bdd "clic" s'incrémente.
De plus j'ai une page non consultable de l'extérieur qui m'affiche les résultats de tous les visiteurs et la colonne "clic" est bien incrémentée à chaque consultation.

Si tu ne met pas de == tes testes ne servent à rien.
Tu me dis que tout s'incrémente bien en BDD, c'est donc que ton code fonctionne...

Je ne vois pas ou est ton problème. Quand tu dis que rien ne s'affiche tu parle de quoi ? Parce que la ton code n'est pas prévu pour afficher le moindre truc ^^
Le code fonctionne, mais à la consultation de la page suivante, cela écrase la précédente puisque cela ne va pas dans la bonne colonne, en clair la variable qui fixe la colonne n'est pas respectée. puisque le premier "if" est toujours le même pris en compte quelques soit la valeur de "clic" avec "=" et jamais avec "==" dans ce cas il ne passe rien.

Il me semble que c'est l'affectation d'une valeur à la variable "clic" qui cloche quelques part.

exemple : La valeur de clic est 2 et pourtant, c'est la première possibilité >=4 qui va être utilisée.

Il ne s'affiche pas à l'écran des visiteurs, le résultat est en stock sur la base Sql,.

Pour lire le résultat, il faut que j'appelle une page protégée contenant le tableau (modèle ci-dessous), non consultable par les visiteurs.

id IP Heure Début clic Page 1 H. page 2 Page 2 Heure page 3 Page
1 xx.xx 01-10 16:02 2 P1 01-10 16:02 P2
2 xx.xx 02-10 17:00 4 P1 01-10 17:04 P2

Tu as factorisé le code comme je te proposais ou pas ?
Le problème vient peut être de la :

dans ton code d'origine :
$clic=$ligneclic; 
if($clic >= 4)


A mon avis si tu fais un var_dump de $clic avant le if, tu va avoir une surprise.

Il faudrait que tu es :

$clic=$ligneclic['clic']; 
if($clic >= 4)
oui j'ai modifié
et en plus j'ai changé ceci

$ligneclic=mysql_num_rows($resultclic);

Résultat : ça marche une fois mais cela écrase la valeur de clic donc cela retombe à zéro, je cherche pourquoi et je pense qu'en cela devrait fonctionner

Que je résume.
La personne va sur une page.
La tu va chercher en BDD son nombre de clic en fonction de son IP et tu l'incrémente, puis tu enregistre.
Ca, a priori ça fonctionne.

Ce que je suppose du reste (sans avoir la page et le code complet, c'est pas forcément simple de débugger ^^).
A un endroit tu affiche le nombre de page vu par la personne.
Tu fais donc une requête pour recuperer le nb de clic de la personne (toujours en fonction de l'IP) et tu l'affiche.

C'est la que ça ne fonctionne pas, il n'affiche pas la bonne valeur ?
C'est ça ?
Aux dernières modifs, c'est ça
Voici l'ensemble

<?php
//connexion à la base de données
$format="M";
$page=$_SERVER['PHP_SELF'];
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$ip_connecte=$_SERVER['HTTP_X_FORWARDED_FOR'];
else
$ip_connecte=$_SERVER['REMOTE_ADDR'];
$deja_connecte=mysql_query("SELECT id from mon_compteur where ip='$ip_connecte'");
$deja_connecter=mysql_num_rows($deja_connecte);
if($deja_connecter=='1')
{
$sql_connect = mysql_connect($sql_serveur,$sql_login,$sql_password);
mysql_select_db($bd, $sql_connect);
$req="select clic from mon_compteur where ip='$ip_connecte'";
$resultclic=mysql_query($req,$sql_connect);
$ligneclic=mysql_num_rows($resultclic);
$clic=$ligneclic('clic');
if($clic >= 4) // plus de 4 pages consultées
{
$clic = ++ $ligneclic[clic];
mysql_query("UPDATE mon_compteur Set clic='$clic',format='$format',page='$page' where ip='$ip_connecte' ");
}
else if($clic==3) // 4e page consultée
{
$cpc=$_SERVER['PHP_SELF'];
$chpc=date('d-m-Y H:i');
$clic = ++ $ligneclic[clic];
mysql_query("UPDATE mon_compteur Set clic='$clic',format='$format',chpc='$chpc',cpc='$cpc',page='$page' where ip='$ip_connecte' ");
}
else if($clic==2) // 3e page
{
$bpb=$_SERVER['PHP_SELF'];
$bhpb=date('d-m-Y H:i');
$clic = ++ $ligneclic[clic];
mysql_query("UPDATE mon_compteur Set bhpb='$bhpb',bpb='$bpb',clic='$clic',format='$format',page='$page' where ip='$ip_connecte' ");
}
else if($clic==1) // 2e page
{
$pa2=$_SERVER['PHP_SELF'];
$hpa2=date('d-m-Y H:i');
$clic = ++ $ligneclic[clic];
mysql_query("UPDATE mon_compteur Set hpa2='$hpa2',pa2='$pa2',clic='$clic',format='$format',page='$page' where ip='$ip_connecte' ");
}
}
else if($deja_connecter=='0')
{
$clic = ++ $ligneclic['clic'];
$ouve=$_SERVER['PHP_SELF'];
$format="M";
$heure=date('d-m-Y H:i');
mysql_query("INSERT Into mon_compteur (ip,heure,clic,ouve,format,page) VALUES ('$ip_connecte','$heure','$clic','$ouve','$format','$page')");
}
mysql_close(); //fermeture de la connexion avec MySQL
?>
else if($deja_connecter=='0')
{
$clic = ++ $ligneclic['clic'];
$ouve=$_SERVER['PHP_SELF'];
$format="M";
$heure=date('d-m-Y H:i');
mysql_query("INSERT Into mon_compteur (ip,heure,clic,ouve,format,page) VALUES ('$ip_connecte','$heure','$clic','$ouve','$format','$page')");
}
mysql_close(); //fermeture de la connexion avec MySQL
?>
les quote ' y sont je testais sens eux

Alors déjà tu utilise
$ligneclic=mysql_num_rows($resultclic);
Ce qui te retourne le nombre de ligne de ta requette

Il faut que tu utilise mysql_fetch_array (comme dans ton code d'origine) qui te retourne les lignes de ton tableau.
Habituellement on l'utilise dans un while pour parcourir chaque ligne retourné par la requete : while ($row = mysql_fetch_array($result)) {
Vu que tu n'a qu'une ligne de retourner tu n'es pas obliger de l'utiliser dans le while.
Ce qui te donne $ligneclic=mysql_fetch_array($resultclic);

Dans $ligneclic tu as donc un tableau. Pour accéder au donné du tableau il faut que tu utilise des crochet et pas des parenthèses.
Tu as $clic=$ligneclic('clic');
Il te faut $clic=$ligneclic['clic'];
SUPER, ça marche.

Bravo et merci

Je me doutais bien qu'il n'y avait pas grand-chose, mais à force on ne voit plus rien

Je me demande pourquoi j'ai mis des parenthèses là, alors que j'avais mis des crochets ailleurs

Encore merci et si ça peut servir à d'autres qu'ils n'hésitent pas, je leur passerai comme faire le tableau qui récupère les infos.