Probleme update et delete

Résolu
Utilisateur anonyme - 7 juin 2006 à 11:22
pastis51forever Messages postés 172 Date d'inscription dimanche 29 juin 2003 Statut Membre 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 !

13 réponses

Utilisateur anonyme
7 juin 2006 à 12:51
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
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 juin 2006 à 13:04
$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.
3
Utilisateur anonyme
7 juin 2006 à 11:44
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 ?
0
Utilisateur anonyme
7 juin 2006 à 11:53
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 ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
7 juin 2006 à 11:57
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());
}
0
pastis51forever Messages postés 172 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 8 septembre 2006 1
7 juin 2006 à 11:58
Ca marche les IF comme ca???
if ( $valeur['cptvisite'] != 0 )
0
Utilisateur anonyme
7 juin 2006 à 12:15
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
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 juin 2006 à 12:32
Hello,

if (!empty ($donnees[cptvisite])) { }
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 juin 2006 à 12:33
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.
0
Utilisateur anonyme
7 juin 2006 à 14:14
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
0
pastis51forever Messages postés 172 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 8 septembre 2006 1
7 juin 2006 à 15:23
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
0
Utilisateur anonyme
7 juin 2006 à 16:37
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
0
pastis51forever Messages postés 172 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 8 septembre 2006 1
7 juin 2006 à 17:08
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
0
Rejoignez-nous