Bonjour,
J'ai développé un script php couplé avec une bdd permettant de faire du suivi d'e-mailing. A savoir: qui a lu le mail? quand? A-t-il visité le site web indiqué dans le mail depuis le mail?
Pour cela, je mets une balise <img> dans mon mail qui pointe vers une page php. Pour les infos de click sur les liens, j'ai modifié l'index du site avec un peu de php qui récupère l'IP et qui fait +1 sur un compteur dans la base de données.
Ma table sql
retour possède 5 champs:
mail=mail du destinataire
nombre=nombre de lecture
date=date de lecture
adripmail= @Ip de lecture
web=nombre de visites sur le site depuis le mail
Lors de mon envoi de mail, j'importe toutes les adresses dans la table et j'initialise tous les champs.
J'aimerai avoir votre avis sur la façon dont j'ai codé le script (c'est mon premier script) et s'il est "optimal" (pas de cas boiteux oublié):
Voici l'algo final auquel je suis parvenu:

Voici le code associé:
//Récupération de l'@ IP
if($_SERVER) {
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$adress = $_SERVER['HTTP_X_FORWARDED_FOR'];
elseif(isset($_SERVER['HTTP_CLIENT_IP']))
$adress = $_SERVER['HTTP_CLIENT_IP'];
else
$adress = $_SERVER['REMOTE_ADDR'];
}
else {
if(getenv('HTTP_X_FORWARDED_FOR'))
$adress = getenv('HTTP_X_FORWARDED_FOR');
elseif(getenv('HTTP_CLIENT_IP'))
$adress = getenv('HTTP_CLIENT_IP');
else
$adress = getenv('REMOTE_ADDR');
}
//Test sur l'adresse IP
$iptmp=mysql_query("select adripmail from retour where mail='$mail'");
$adrip=mysql_fetch_array($iptmp);
//@IP = valeur par défaut -> nouvelle lecture -> mise à jour de tous les champs
if($adrip['adripmail']=="xx")
{
mysql_query("update retour set nombre=nombre+1, date='$date', adripmail='$adress' where mail='$mail'");
}
else
{
//Seconde lecture
//Si @IP actuelle est différente de celle enregistrée
if($adress!=$adrip['adripmail'])
{
//Test pour éviter les doublons
$req=mysql_query("select * from retour where adripmail='$adress' and mail='$mail'");
$res=mysql_num_rows($req);
if($res=='0')
{
//Si non présent, on insère une nouvelle ligne dans la base
$mailencod=utf8_encode($mail);
mysql_query("insert into retour(mail,nombre,date,adripmail,web) values('$mailencod','1','$date','$adress','0')");
}
else
{
//Sinon, update du compteur de lecture
mysql_query("update retour set nombre=nombre+1 where mail='$mail' and adripmail='$adress'");
}
}
//Sinon mise à jour du compteur de lecture
else
{
mysql_query("update retour set nombre=nombre+1 where mail='$mail' and adripmail='$adress'");
}
}
J'ai pas tout mis car le début est pas utile, c'est la connexion au sql et la récupération du mail.
Pour ma part, je l'ai testé et il semble fournir le résultat attendu...
Merci d'avance de vous pencher dessus.