Forum-webmaster
Technique - programmation => PHP / MySQL => Message commencé par: Grumos le le 10-12-2006 a 03:47:24

Titre: Afficher une frame une fois par ip et par jours.
Posté par: Grumos le le 10-12-2006 a 03:47:24

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 :


Code:
<?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 ?

Titre: Re:Afficher une frame une fois par ip et par jours.
Posté par: theonlydrayk le le 10-12-2006 a 22:25:13

Plusieurs probleme....

1) Ta table contient 1 entrer par adresse IP.
Alors ta table doit etre PRIMARY KEY(ip).
Une primary key veut dire en gros que il doit etre unique dans la base de donner comme UNIQUE KEY et rajoute un index sur ta row.

2) Dans ton select tu doit rajouter un where;

Code:
SELECT ip,date FROM ip_unique WHERE ip = $ip;

Tu choisit de cette facon 1 seule row. Sinon tu fait la requete de toute la table ca ralenti enormement.

3) Si la date est differente tu fait un truncunate ca efface la table au complet. Tu pert toute tes informations. Tu na aucun besoin de rien effacer.
----

Les etapes de ton script sont a peu pres :

1) Trouve la row dans la table avec un ip identique au clients. C'est MySQL avec SELECT qui fait les comparaison. SI
IP est dans la base de donner 2)
IP n'est pas dans la base de donner : tu affiche un iframe et tu l'ajoute. (MySQL : INSERT)

2) date dans la base de donner est differente de la date actuelle : tu affiche un iframe et tu mets la base de donner a jour (MySQL : UPDATE)
Si la date est egal tu affiche rien et tu ne mets rien a jour.

Titre: Re:Afficher une frame une fois par ip et par jours.
Posté par: Grumos le le 10-12-2006 a 23:14:06

J'ai essayer sa :

Code:
<?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 cela ne fonctionne pas il affiche toujours l'iframe :(, aurai-je oublier quelque chose?

Titre: Re:Afficher une frame une fois par ip et par jours.
Posté par: theonlydrayk le le 10-12-2006 a 23:56:56

Je crois que tu na pas bien compris comment fonctione une base de donner.

Tes commandes SELECT et UPDATE ont aucun sens.

Quand tu travail sur une base de donner tu travail sur 3 elements.
Base de donner : avec mysql_select_db, ca c'est ok.

Table et la row. Table est un tableaux de donner. Quand tu fait SELECT Ip,Date FROM TABLE; tu prend le tableaux au complet et non 1 seule colone. Meme chose pour ton UPDATE tu modifie le tableaux au complet.

Ta table est fait comme ceci :

192.168.0.1 10/12/2006
192.168.0.7 9/12/2006
192.168.0.2 7/12/2006
192.168.0.4 2/12/2006

Quand tu fait un "SELECT Ip,Date FROM Ip_Unique;" tu choisit toute la table (4 ensemble de ip,date) et non juste 1 valeur.

$data['Ip'] = "192.168.0.1";
peut importe la valeur de $_SERVER['REMOTE_ADDR'];

Quand tu fait un update tu ecrase toute la Table;

UPDATE Ip_Unique (Date) VALUES ('10/12/2006');
Le contenu de ta table va devenir

192.168.0.1 10/12/2006
192.168.0.7 10/12/2006
192.168.0.2 10/12/2006
192.168.0.4 10/12/2006

Toutes les dates on changer peut importe l'adresse IP

Quand tu fait un SELECT tu doit dire quel ligne de la table tu veut.

SELECT * FROM Ip_Unique WHERE ip = '192.168.0.2';
cette commande la va choisir 1 seule colone
celle que ip est egal a 192.168.0.2;
$data['Ip'] = '192.168.0.2';
$data['Date'] = '7/12/2006';


Meme chose pour le UPDATE :
UPDATE Ip_Unique (Date) VALUES ('$Date') WHERE ip = '192.168.0.2';
Comme ca tu change uniquement la ou les lignes dont ip est egal a 192.168.0.2 sans changer toute la table.

Titre: Re:Afficher une frame une fois par ip et par jours.
Posté par: Grumos le le 05-01-2007 a 12:46:10

Je te remerci theonlydrayk,
j'ai finalement opté pour le cookie, se script m'énerve telement je veut plus en entendre parler lol. Par les cookies c'est carrément plus simple.
Merci encore pour tes réponses.


Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.