Script referer

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 : Script referer

par Invité » 26 févr. 2006, 15:19

Arf je vois pas trop, p-e que d'autres membres pourront t'aider...

par gaet666 » 25 févr. 2006, 19:35

Oups;

C'etait moi :)

par Invité » 25 févr. 2006, 19:29

Salut,

Je reviens avecle script modifier tout frais avec de nouveaux problemes :D

Voici le code:
//on vérifie qu'un referer existe
if(isset($_SERVER['HTTP_REFERER'])){
	//récupe du referer et on protége contre les injections
	$referer = htmlentities($_SERVER['HTTP_REFERER'],ENT_QUOTES);
	//recupération du nom associé;
	$url = parse_url($referer);
	$nom = $url['host'];
	$sql = "SELECT * FROM referer WHERE referer = '$nom'";
	$result = mysql_query($sql,$link);
	//si il y a plusieurs résultats:
	if(mysql_num_rows($result) > 0){
		$sql = "UPDATE referer SET nb_enregistrement = nb_enregistrement + 1 WHERE nom = '$nom'";
	}
	//sinon on créer une nouvelle ligne
	else{
		$sql = "INSERT INTO referer VALUES('','$referer','$nom','1')";
	}
	mysql_query($sql,$link);
}
Maintenant, le script ajoute bien le lien a la Base mais, si le lien provient de la meme adresse, il n'ajoute pas "1" a l'adresse deja créée mais la recrée une 2eme fois.

Vous pouvez voir le probleme a l'adresse suivante:
http://www.humour-web.be/referer.php

Ou est le probleme ???

Ciao, gaet

par gaet666 » 24 févr. 2006, 22:43

voila, maintenant il mets un "pas de referer", mais pk il les ajoute pas alors ?

par HD » 24 févr. 2006, 22:34

impossible qu'il n'affiche rien que le if soit true ou false
essaie ce code stp
<?php
//on vérifie qu'un referer existe 
if(isset($_SERVER['HTTP_REFERER'])){ 
    echo "début condition <br>"; 
    //récupération du referer et on protége contre les injections 
    $referer = htmlentities($_SERVER['HTTP_REFERER'],ENT_QUOTES); 
    echo "Referer = $referer<br>"; 
    //recupération du nom associé 
    preg_match_all("#http:\/\/(www){0,1}\.(.+)\.(.+)#isU",$referer,$matches); 
    $nom = $matches[1]; 
    echo "Nom = $nom <br>"; 
    //on regarde si il existe 
    $sql = "SELECT * FROM referer WHERE referer = '$referer'"; 
    $result = mysql_query($sql, $link) or die(mysql_error()); 
    //si il y a plusieurs résultats: 
    if(mysql_num_rows($result) > 0){ 
        echo "début seconde condition <br>"; 
        $sql = "UPDATE referer SET nb_enregistrement = nb_enregistrement + 1 WHERE nom = '$nom'"; 
    } 
    //sinon on créer une nouvelle ligne 
    else{ 
        $sql = "INSERT INTO referer VALUES('','$referer','$nom','1')"; 
    } 
    $result = mysql_query($sql, $link) or die(mysql_error()); 
else {
     echo "pas de referer ! <br>" ;
}
?>

par gaet666 » 24 févr. 2006, 22:27

Salut,

j'ai tenté avec le 'echo "pas de referer !" ;' et ca n'affiche pas "pas de referer", ca continue a affiche les 3 referers que j'ai entré manuellement...
:?

par HD » 24 févr. 2006, 22:17

si mon code n'a rien affiché alors $_SERVER['HTTP_REFERER' n'existe pas tout simplement
dans ta condition
if(isset($_SERVER['HTTP_REFERER'])){ 
ajoute un else et le code
echo "pas de referer !" ;
ca donne quoi ?

par gaet666 » 24 févr. 2006, 22:02

Ca n'affiche rien!

Fin, si, ca affiche qql chose car j'ai un bout de code en plus qui fait afficher; voici le code de la page complete:
<?php
//connexion mysql
$link = mysql_connect('localhost','','');
//selection de la base de données
mysql_select_db('');
//on vérifie qu'un referer existe
if(isset($_SERVER['HTTP_REFERER'])){
	//récupération du referer et on protége contre les injections
	$referer = htmlentities($_SERVER['HTTP_REFERER'],ENT_QUOTES);
	//recupération du nom associé
	preg_match_all("#http:\/\/(www){0,1}\.(.+)\.(.+)#isU",$referer,$matches);
	$nom = $matches[1];
	//on regarde si il existe
	$sql = "SELECT * FROM referer WHERE referer = '$referer'";
	$result = mysql_query($sql,$link);
    //si il y a plusieurs résultats:
	if(mysql_num_rows($result) > 0){
		$sql = "UPDATE referer SET nb_enregistrement = nb_enregistrement + 1 WHERE nom = '$nom'";
	}
	//sinon on créer une nouvelle ligne
	else{
		$sql = "INSERT INTO referer VALUES('','$referer','$nom','1')";
	}
	mysql_query($sql, $link) or die(mysql_error());
}

$reponse = mysql_query("SELECT * FROM referer");
while ($donnees = mysql_fetch_array($reponse) )
{
?>
<table width="317" border="0" cellpadding="0" cellspacing="0">
  <!--DWLayoutTable-->
  <tr>
    <td width="317" height="97" valign="top"><a href="<? echo $donnees["referer"]; ?>" target="_blank"><? echo $donnees["nom"]; ?></a> <? echo $donnees["nb_enregistrement"]; ?></br>
      <?
}
?>
	</td>
  </tr>

</table>
J'ai essayé avec et sans "$result =" et ca ne change rien.

Mais; a moins que ce soit ce que l'on fait, a mon avis, il faut essayer pour l'instant que des qu'un visiteur arrive, il soit ajouté dans la base... non ???

++

par HD » 24 févr. 2006, 20:05

donne nous ce que ca affiche puis essaie de mettre
$result = mysql_query($sql, $link) or die(mysql_error()); 
dans la derniere ligne au lieu de
mysql_query($sql, $link) or die(mysql_error()); 

par HD » 24 févr. 2006, 20:01

donne nous stp ce qu'affiche ce code :
//on vérifie qu'un referer existe 
if(isset($_SERVER['HTTP_REFERER'])){ 
    echo "début condition <br>";
    //récupération du referer et on protége contre les injections 
    $referer = htmlentities($_SERVER['HTTP_REFERER'],ENT_QUOTES); 
    echo "Referer = $referer<br>";
    //recupération du nom associé 
    preg_match_all("#http:\/\/(www){0,1}\.(.+)\.(.+)#isU",$referer,$matches); 
    $nom = $matches[1]; 
    echo "Nom = $nom <br>";
    //on regarde si il existe 
    $sql = "SELECT * FROM referer WHERE referer = '$referer'"; 
    $result = mysql_query($sql, $link) or die(mysql_error()); 
    //si il y a plusieurs résultats: 
    if(mysql_num_rows($result) > 0){ 
        echo "début seconde condition <br>";
        $sql = "UPDATE referer SET nb_enregistrement = nb_enregistrement + 1 WHERE nom = '$nom'"; 
    } 
    //sinon on créer une nouvelle ligne 
    else{ 
        $sql = "INSERT INTO referer VALUES('','$referer','$nom','1')"; 
    } 
    mysql_query($sql, $link) or die(mysql_error()); 
} 

par gaet666 » 24 févr. 2006, 19:53

salut,

Toujours rien, ca ne rajoute rien dans la bd...

par mario » 24 févr. 2006, 19:28

remplace (2 lignes)
mysql_query($sql,$link);
par
mysql_query($sql, $link) or die(mysql_error());
est ce que dans ton script, tu as bien les connexions MySQL (mysql_connect et mysql_select_db) ?

Script referer

par gaet666 » 24 févr. 2006, 19:02

Salut,

On m'a aidé a mettre au point un script qui a pour but de trier les meilleurs referers en fonction de ceux qui envoient le plus de visiteurs.

Il y a plusieurs problemes dans le code:

Il n'inclus pas automatiquement les sites dans la base de donnée et si je les rajoutes a la main, il n'augmente pas le nombre de visiteurs qu'ils m'ont envoyés...

Voici le code:
//on vérifie qu'un referer existe
if(isset($_SERVER['HTTP_REFERER'])){
	//récupération du referer et on protége contre les injections
	$referer = htmlentities($_SERVER['HTTP_REFERER'],ENT_QUOTES);
	//recupération du nom associé
	preg_match_all("#http:\/\/(www){0,1}\.(.+)\.(.+)#isU",$referer,$matches);
	$nom = $matches[1];
	//on regarde si il existe
	$sql = "SELECT * FROM referer WHERE referer = '$referer'";
	$result = mysql_query($sql,$link);
    //si il y a plusieurs résultats:
	if(mysql_num_rows($result) > 0){
		$sql = "UPDATE referer SET nb_enregistrement = nb_enregistrement + 1 WHERE nom = '$nom'";
	}
	//sinon on créer une nouvelle ligne
	else{
		$sql = "INSERT INTO referer VALUES('','$referer','$nom','1')";
	}
	mysql_query($sql,$link);
}
Que dois-je changer/ rajouter ???

Ciao et merci d'avance,

Gaetan