Se connecter / S'enregistrer
Votre question

Afficher une frame une fois par ip et par jours.

Tags :
  • MySQL
  • Programmation
Dernière réponse : dans Programmation
10 Décembre 2006 03:41:00

Bonsoir,
J'ai fait un script pour afficher une frame une fois par ip et par jours mais il ne fonctionne pas vraiments. Le script que j'ai fait vide donc la table dès que quelqu'un ouvre la page si la date n'est pas trouvée dans la table pour ensuite afficher la frame et inscrire sont ip dans la base pour normalement ne plus afficher la frame à sa prochaine visite le même jours. Mais je ni arrive pas après plusieurs essaie j'ai arrété sur se script et là il ne veut plus afficher la frame pouriez vous m'aider svp. Voici le script :

<?php
$Ip = $_SERVER['REMOTE_ADDR'];
$Date = date("d/m/Y");

$db = mysql_connect('localhost', 'login', 'mdp') or die('Erreur de connexion '.mysql_error());

mysql_select_db('base',$db) or die('Erreur de selection '.mysql_error());

define( _TABLE , 'Ip_Unique' );

$sql = "SELECT Ip,Date FROM " . _TABLE . " ORDER BY DATE DESC ";

$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

$data = mysql_fetch_assoc($req);

if($data['Date'] != $Date)
{
mysql_query("TRUNCATE TABLE " . _TABLE . "");
}

if($data['Ip'] != $Ip)
{
mysql_query("INSERT INTO " . _TABLE . " (Ip,Date) VALUES ('$Ip','$Date') WHERE Ip!='".$Ip."'");
}

if($Ip != $data['Ip'])
{
if($Date != $data['Date'])
{
echo ("<iframe src='http://www.bonus.grumosweb.fr/PTP2.php' width=0 height=0 MARGINWIDTH=0 MARGINHEIGHT=0 HSPACE=0 VSPACE=0 FRAMEBORDER=0 SCROLLING=no></iframe>");
}
}

mysql_close();

?>

Me suis-je bien fait comprendre ?

Autres pages sur : afficher frame fois jours

a c 232 L Programmation
10 Décembre 2006 11:24:03

Bah le truc, c'est que tu vides la table complètement !
C'est idiot...

Ce qu'il faudrait faire, c'est regardé s'il y a une ligne avec l'IP de la personne qui correspond à aujourd'hui, si c'est le cas, tu n'affiches pas ta frame, si ce n'est pas le cas, tu insères son IP et la date, et tu affiches la frame.

Tu as trois cas différents :
- l'IP et la date sont déjà dans la base de données = affiche pas de frame
- l'IP est dans la base, mais c'est pas la bonne date = insère une nouvelle ligne avec l'IP et la nouvelle date + affiche la frame
- l'IP n'est pas dans la base = insère une nouvelle ligne avec l'IP et la date + affiche la frame.

:) 
10 Décembre 2006 16:27:18

je sais pas le schéma de ta table mais si la colonne Date est de type date, le format retourné est américain (AAAA-MM-JJ), or tu récupere la date du jour sous format JJ/MM/AAAA
de meme l'insertion de la date peut etre fausse
Contenus similaires
10 Décembre 2006 23:37:30

Nan le champ 'Date' est un champ "VACHAR", mé c bien di avoir penssé.

OmaR_ShaRif quand tu dit : l'IP et la date sont déjà dans la base de données = affiche pas de frame.
Comment on peu faire cela? Enfaite il suffi de ne rien mettre?

Sinon j'ai changer le script je ne vide plus la table mais la met à jours et j'ai mit le champ 'Ip' en PRIMARY KEY :

<?php

$Ip = $_SERVER['REMOTE_ADDR'];
$Date = date("d/m/Y");

$db = mysql_connect('localhost', 'login', 'mdp') or die('Erreur de connexion '.mysql_error());

mysql_select_db('ophosff362_site',$db) or die('Erreur de selection '.mysql_error());

define( _TABLE , 'Ip_Unique' );

$sql = "SELECT Ip,Date FROM " . _TABLE . "";

$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

$data = mysql_fetch_assoc($req)

if ($data['Ip'] != $Ip)
{
echo ("<iframe src='http://www.bonus.grumosweb.fr/PTP2.php' width=0 height=0 MARGINWIDTH=0 MARGINHEIGHT=0 HSPACE=0 VSPACE=0 FRAMEBORDER=0 SCROLLING=no></iframe>");
mysql_query("INSERT INTO " . _TABLE . " (Ip,Date) VALUES ('$Ip','$Date')'");
}

if ($data['Date'] != $Date)
{
echo ("<iframe src='http://www.bonus.grumosweb.fr/PTP2.php' width=0 height=0 MARGINWIDTH=0 MARGINHEIGHT=0 HSPACE=0 VSPACE=0 FRAMEBORDER=0 SCROLLING=no></iframe>");
mysql_query("UPDATE " . _TABLE . " (Date) VALUES ('$Date')'");
}

mysql_close();

?>

Mais maintenant l'iframe s'affiche tout le temp même si l'ip est dans la table, je ne comprend plus rien.
a c 232 L Programmation
11 Décembre 2006 07:07:27

C'est normal.
Tu ne comprends pas trop ce que tu fais à mon avis.
  1. $sql = "SELECT Ip,Date FROM " . _TABLE . "";
  2.  
  3. $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());


Avec ça, tu fais une requête qui te dit "sélectionne moi tout ce qui est dans la table Ip_Unique".

  1. $data = mysql_fetch_assoc($req)


Avec ça, tu mets toutes les données du retour de la requête dans un tableau associatif.
donc, tu auras un tableau du genre :
$data[0]['Ip'] = la première IP de la table
$data[0]['Date'] = la première Date de la table
$data[1]['Ip'] = la 2nde IP
$data[1]['Date'] = la 2nde Date
etc...

Donc, quand tu fais un
  1. if ($data['Ip'] != $Ip)
, ça va toujours être vrai... vu que $data['Ip'] est null...

Il faut modifier ta requête directement, comme ceci :

  1. $sql = 'SELECT Ip, Date FROM '._TABLE.' WHERE Ip = '.$Ip


Ca va alors te sélectionner toutes les lignes qui ont cette IP.
Ensuite, il faudra que tu fasses soit une boucle sur toutes les dates associées à cette IP si tu as des lignes retournées, soit faire une deuxième requête pour voir si la date existe pour cette ip donnée.
11 Décembre 2006 19:48:57

C'est vrai je ne c'est pa vrément ce que je fait, j'apprend sur des sites comme PHP Débutant.
Mais malgré ca c'est pas facile tous seul, votre aide m'est précieuse.
Je vous en remerci, je suis précé que ce script fonctionne parce qu'il commence vrément à m'énerver mais j'en est besoin. Cela évitera à mes visiteurs de ne pas avoir des pubs à chaque visite ce qui rend le chargement des pages très long.

J'ai un porblème avec le WHERE :

$sql = "SELECT * FROM "._TABLE." WHERE Ip=$Ip AND Date=$Date";

Il me renvoi l'erreur suivante :

Erreur SQL !
SELECT * FROM Ip_Unique WHERE Ip=***.***.157.50 AND Date=11/12/2006
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.157.50 AND Date=11/12/2006' at line 1

Quand je ne n'est que "WHERE Date=$Date" il n'y a pas d'erreur mais sa n'a pas d'intérêt.
Qu'est ce que cela?
11 Décembre 2006 20:00:11

Ip et Date sont des varchar, il faut donc les entourer par de simple quote.
  1. $sql = "SELECT * FROM "._TABLE." WHERE Ip='$Ip' AND Date='$Date'";
5 Janvier 2007 12:47:47

Je vous remerci,
j'ai finalement opté pour le cookie. C'est carrément plus simple.
Merci encore pour vos réponses.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS