Votre avis sur mon script de tracking de mail

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 : Votre avis sur mon script de tracking de mail

par rider » 17 août 2007, 10:32

j'ai apporté la modif que tu m'as cité

j'ai également rajouté

Code : Tout sélectionner

or die('Erreur de connexion')
lors de la connexion

quoi d'autres à modifier?

Re: Votre avis sur mon script de tracking de mail

par dunbar » 16 août 2007, 23:41

Suite à un petit tuto de RYLEici
Je pense que cette syntaxe est plus correct :?:
<?php
//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."'"); 
                } 
        } 



?>
Mais c'est juste un avis perso :)

Votre avis sur mon script de tracking de mail

par rider » 16 août 2007, 21:53

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:
Image
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.