Afichage frame par ip unique et par jours.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Afichage frame par ip unique et par jours.

par Ajoloca » 10 déc. 2006, 17:16

Je ne suis par ailleurs pas certain que l'on puisse utiliser la condition WHERE dans un INSERT.
Je te confirme que la syntaxe SQL ne permet pas de clause "WHERE" dans une instruction "INSET".

Celà me semble logique, un "INSERT" correspond à une "création" donc aucun critère de sélection ne peut être appliqué.

Si ce que tu cherches c'est de faire une insertion s'il n'exite pas et une mise à jour s'il existe, regarde du coté de "INSERT INTO .... ON DUPLICATE KEY UPDATE"

par Ryle » 10 déc. 2006, 12:18

Tu as un petit soucis dans la récupération de l'ip en base. En effet tu récupère celle associée à la dernière date, mais tu ne sais pas si entre temps tu as vidé la table ou pas. Je ne suis par ailleurs pas certain que l'on puisse utiliser la condition WHERE dans un INSERT.

Pour ma part, la première chose que je ferais c'est de ramener uniquement la date max de ta table sans ramener les autres enregistrements (actuellement tu ramenes toutes les lignes pour ne traiter que la première) et sans te soucier de l'ip. (soit avec un "max", soit avec un "limit 0,1")
Si la date est différente, effectivement tu tronques.

Ensuite, je me consacrerais à l'ip. Je ferais donc un count(*) dans la table avec un WHERE sur l'ip pour savoir s'il y a déjà un enregistrement correspondant ou pas (si on vient de faire un truncate, c'est pas utile, on sait déjà qu'il n'y en aura pas)

Et en fonction du résultat du count, s'il n'a rien trouvé, je fais l'insertion en base et j'affiche la frame, sinon je lui dis qu'il est déjà venu :)


Sinon quelques p'tites remarques en passant :
- quand tu définies une nouvelle constante, il faut mettre des apostrophes (ou des guillemets) autour du nom de la constante. Tant qu'elle n'est pas définie, ca reste une chaine de caractère normale :)
define( '_TABLE' , 'Ip_Unique' ); 
- Ce n'est pas utile, lorsque tu concatène une variable à la fin d'une chaine, de rajouter une chaine vide après :
mysql_query("TRUNCATE TABLE " . _TABLE ); // pas besoin du: . ""
- Ton contrôle sur l'ip devrait également (surtout d'ailleurs) être effectué sur la page PTP2.php si ce n'est pas déjà le cas, dans la mesure ou l'on peut l'appeller directement via son url. C'est d'avantage elle qu'il faut protéger que l'iframe qui l'affiche :)

Afichage frame par ip unique et par jours.

par Grumos » 10 déc. 2006, 03:53

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 : Tout sélectionner

<?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 ?[/color]