Probleme update et delete [Résolu]

Messages postés
307
Date d'inscription
mercredi 26 octobre 2005
Dernière intervention
21 mai 2008
- - Dernière réponse : pastis51forever
Messages postés
180
Date d'inscription
dimanche 29 juin 2003
Dernière intervention
8 septembre 2006
- 7 juin 2006 à 17:08
Bonjour à tous, alors voila, j'ai un script qui me permet de compter le nombre de visiteurs totale et le nombre de visiteurs en ligne, or bien evidemment...ça ne marche pas (pas marrant sinon)
Donc voilou le code, ma base de données est bien faite, ce sont les bons noms que j'utilise,etc!

<?php
function get_ip() //obtenir l'IP du visiteur
{
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
elseif(isset($_SERVER['HTTP_CLIENT_IP']))
{
$ip = $_SERVER['HTTP_CLIENT_IP'];
}
else
{
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
$ip = get_ip();
echo "$ip"; //affichage de son IP(test)
?>

<?php
// Connexion à MySQL
mysql_connect("localhost", "root", "");
mysql_select_db("compteur");

// ETAPE 1 : on vérifie si l'IP se trouve déjà dans la table
// Pour faire ça, on n'a qu'à compter le nombre d'entrées dont le champ "ip" est l'adresse ip du visiteur
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM visiteurs WHERE ip=\'' . $ip . '\'');
$donnees = mysql_fetch_array($retour);

if ($donnees['nbre_entrees'] == 0) // L'ip ne se trouve pas dans la table, on va l'ajouter
{
mysql_query('INSERT INTO visiteurs VALUES(\'' . $ip . '\', ' . time() . ')') or die(mysql_error());
echo 'oh un petit nouveau';
mysql_query("INSERT INTO cpt(cptvisite) VALUES('0')") or die(mysql_error());

mysql_query('UPDATE cpt SET cptvisite = cptvisite+1') or die(mysql_error()); //J'incremente mon compteur(j'espere que c'est comme ca, dans ma base compteur, j'ai une table cpt, qui contient le champs cptvisite,ce champs contient un nombre que je veux incrémenter)
}
else // L'ip se trouve déjà dans la table, on met juste à jour le timestamp
{
mysql_query('UPDATE visiteurs SET time=' . time() . ' WHERE ip=\'' . $ip . '\'') or die(mysql_error());
echo 'oh un ancien';
}

// ETAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 10 minutes
// On stocke dans une variable le timestamp qu'il était il y a 10 minutes : $timestamp_10min time() - (60*10); // 60 *1 0 nombre de secondes écoulées en 10 minutes
mysql_query('DELETE FROM visiteurs WHERE time < ' . $timestamp_10min) or die(mysql_error());
//deja la une erreur, meme au bout d'une heure, mon IP n'est pas supprimer(127.0.0.1)

//ETAPE 3 : on compte le nombre d'ip stockées dans la table. C'est le nombre de visiteurs connectés
$retour = mysql_query('SELECT COUNT(*) AS connecte FROM visiteurs');
$donnees = mysql_fetch_array($retour);
echo 'nombre de visiteurs connectes: ' . $donnees['connecte'] . '

';

//on affiche cptvisite
$reponse = mysql_query("SELECT cptvisite FROM cpt") or die(mysql_error()) ;
$donnees = mysql_fetch_array($reponse);
echo 'nombre de visiteurs total: ' . $donnees['cptvisite'] . '!

';

mysql_close();
?>

Donc pour résumer les erreurs, mon compteur ne s'incremente pas,car ma base ne supprime pas mon IP au bout des 10min (PS: j'espere que et easyPHP fonctionnent bien lorsqu'ils sont en arriere plan et que le probleme vient bien de mon code )

Merci à toutes les tentatives !
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
307
Date d'inscription
mercredi 26 octobre 2005
Dernière intervention
21 mai 2008
3
Merci
if ($donnees['nbre_entrees'] == 0) // L'ip ne se trouve pas dans la table, on va l'ajouter
{
    mysql_query('INSERT INTO visiteurs VALUES(\'' . $ip . '\', ' . time() . ')') or die(mysql_error());
 echo 'oh un petit nouveau';
 
 $reponse = mysql_query("SELECT cptvisite FROM cpt") or die(mysql_error()) ;
 while($donnees = mysql_fetch_array($reponse))
 {
  if (!empty ($donnees[cptvisite]))     //if($donnees['cptvisite'] != 0)
  {
   mysql_query('UPDATE cpt SET cptvisite = cptvisite+1') or die(mysql_error());
  }
  else
  {
   mysql_query("INSERT INTO cpt(cptvisite) VALUES('0')") or die(mysql_error());
   mysql_query('UPDATE cpt SET cptvisite = cptvisite+1') or die(mysql_error());
  }
 }
}

j'ai plus l'erreur de marquer, mais now autre probleme, il n'ecrit pas dans la base!!!! ma table cpt reste vide !!!!
et si j'enleve juste le mot while et ses 2 {}, ca ecrit mais ca me marque lors de ma 1ere visite:
Notice: Use of undefined constant cptvisite - assumed 'cptvisite' in c:\site web\compteur.php on line 42

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 105 internautes nous ont dit merci ce mois-ci

Commenter la réponse de blinix123
Messages postés
10918
Date d'inscription
lundi 24 février 2003
Dernière intervention
2 mars 2010
3
Merci
$donnees['cptvisite']))    
j'ai copié ton texte, erreur...les index de tableaux associatifs DOIVENT être entourés par des apostrophes.
De toutes façons, je ne comprends pas pourquoi tu fais ça...
Quand tu crées ta table, tu as ton champ cpt. C'est un entier, il suffit de le mettre à 0 par défaut, lors de la création. Et là, t'as plus à faire ce test...il y a juste à faire l'update.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 105 internautes nous ont dit merci ce mois-ci

Commenter la réponse de malalam
Messages postés
307
Date d'inscription
mercredi 26 octobre 2005
Dernière intervention
21 mai 2008
0
Merci
Arf, je crois avoir compris...
Pour UPDATER mon cpt, il faut d'abord l'initialiser, donc je fait INSERT INTO ctpvisite VALUES ('0') et ensuite il prend cptvisite+1 donc 1 !
La ca marche,ensuite un nouveau arrive,donc son IP n'est pas enregistrer, donc il va me refaire le INSERT INTO et vlan mon compteur repart a 0, c'est pour ca, en fait je dois faire un IF cptvisite != 0 alors tu ne me fais pas le INSERT INTO, comme ca mon INSERT INTO ne se fera qu'une seule fois au lancement de mon site,hihihi !!! zé reussi :p


reste plus qu'a coder:


$reponse = mysql_query("SELECT cptvisite FROM cpt") or die(mysql_error()) ;
$donnees = mysql_fetch_array($reponse);
IF .$donnees['cptvisite'] != 0
mysql_query('UPDATE cpt SET cptvisite = cptvisite+1') or die(mysql_error());
ELSE
mysql_query("INSERT INTO cpt(cptvisite) VALUES('0')") or die(mysql_error());
mysql_query('UPDATE cpt SET cptvisite = cptvisite+1') or die(mysql_error());




good or not good ?
Commenter la réponse de blinix123
Messages postés
307
Date d'inscription
mercredi 26 octobre 2005
Dernière intervention
21 mai 2008
0
Merci
Coucou, voilou mon petit bout de code de ci-dessus ^


$reponse = mysql_query("SELECT cptvisite FROM cpt") or die(mysql_error()) ;
$valeur = mysql_fetch_array($reponse);
if . $valeur['cptvisite'] != 0        //ligne 41
{ .......


et voilou l'erreur:
Parse error: parse error, expecting `'('' in c:\site web\compteur.php on line 41




J'ai une table cpt qui contient un champs cptvisite, ce champs contient un nombre,lequel j'aimerais comparer à 0, donc je penser que pour extraire ce nombre de ma base et pouvoir l'utiliser,il fallait cette syntaxe,car je crois que MySQL me sort des trucbidulemachin non exploitable directement par PHP et qu'il faut passer par un tableau..?


merci à toutes les tentatives ^^
Commenter la réponse de blinix123
Messages postés
1218
Date d'inscription
mardi 20 décembre 2005
Dernière intervention
18 octobre 2012
0
Merci
salut
not good

if($donnees['cptvisite'] != 0 )
{
mysql_query('UPDATE cpt SET cptvisite = cptvisite+1') or die(mysql_error());
}
else
{
mysql_query("INSERT INTO cpt(cptvisite) VALUES('0')") or die(mysql_error());
mysql_query('UPDATE cpt SET cptvisite = cptvisite+1') or die(mysql_error());
}
Commenter la réponse de sidf
Messages postés
180
Date d'inscription
dimanche 29 juin 2003
Dernière intervention
8 septembre 2006
0
Merci
Ca marche les IF comme ca???
if ( $valeur['cptvisite'] != 0 )
Commenter la réponse de pastis51forever
Messages postés
307
Date d'inscription
mercredi 26 octobre 2005
Dernière intervention
21 mai 2008
0
Merci
if ($donnees['nbre_entrees'] == 0) // L'ip ne se trouve pas dans la table, on va l'ajouter
{
    mysql_query('INSERT INTO visiteurs VALUES(\'' . $ip . '\', ' . time() . ')') or die(mysql_error());
 echo 'oh un petit nouveau';
 
 $reponse = mysql_query("SELECT cptvisite FROM cpt") or die(mysql_error()) ;
 $donnees= mysql_fetch_array($reponse);
 
 if($donnees['cptvisite'] != 0)            //ligne 42
 {
  mysql_query('UPDATE cpt SET cptvisite = cptvisite+1') or die(mysql_error());
 }
 else
 {
  mysql_query("INSERT INTO cpt(cptvisite) VALUES('0')") or die(mysql_error());
  mysql_query('UPDATE cpt SET cptvisite = cptvisite+1') or die(mysql_error());
 }
}

-----------> Notice: Undefined index: cptvisite in c:\site web\compteur.php on line 42
Commenter la réponse de blinix123
Messages postés
10918
Date d'inscription
lundi 24 février 2003
Dernière intervention
2 mars 2010
0
Merci
Hello,

if (!empty ($donnees[cptvisite])) { }
Commenter la réponse de malalam
Messages postés
10918
Date d'inscription
lundi 24 février 2003
Dernière intervention
2 mars 2010
0
Merci
et puis :
mysql_query("INSERT INTO cpt(cptvisite) VALUES('0')") or die(mysql_error());

cptvisite est de type 'entier', non?? Alors pourquoi tu insères une valeur entre quotes...? C'est pour les chaînes, ça.
Commenter la réponse de malalam
Messages postés
307
Date d'inscription
mercredi 26 octobre 2005
Dernière intervention
21 mai 2008
0
Merci
Bon ca a l'air de marcher, j'avais oublier les ' ' dans le [] en effet :p
Et sinon ben je l'avais fait dès le début de mettre 0 par défaut, mais ca ne marchais pas ! il fallait que je refasse une requete pour lui dire que c'est 0, c'est louche je sais mais c 'est comme ca...


merci
Commenter la réponse de blinix123
Messages postés
180
Date d'inscription
dimanche 29 juin 2003
Dernière intervention
8 septembre 2006
0
Merci
Moi aussi je sais le faire:

Bon ca a l'air de marcher, j'avais oublier les ' ' dans le [] en effet :p
Et sinon ben je l'avais fait dès le début de mettre 0 par défaut, mais ca ne marchais pas ! il fallait que je refasse une requete pour lui dire que c'est 0, c'est louche je sais mais c 'est comme ca...

merci à tous
Commenter la réponse de pastis51forever
Messages postés
307
Date d'inscription
mercredi 26 octobre 2005
Dernière intervention
21 mai 2008
0
Merci
1: toi tu n'as pas le petit smiley
2: tu es sérieux en faisant ça ?
3: tu crois vraiment que j'ai fais exprès ou bien alors tu penses que "IE" a bugger ?

Bye
Commenter la réponse de blinix123
Messages postés
180
Date d'inscription
dimanche 29 juin 2003
Dernière intervention
8 septembre 2006
0
Merci
1: C'est vrai, du boulot c'est bloqué et je suis obligé d'utiliser la mauvaise texte area...
2: oui
3: Je pensais en effet qu'il y avait eu un bug, et ca m'a amusé...
Désolé si ca t'a perturbé

ciao
Commenter la réponse de pastis51forever

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.