Je suis perdu dans ce script !

cs_pyranhaz Messages postés 236 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 13 décembre 2004 - 18 mars 2004 à 17:53
cs_pyranhaz Messages postés 236 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 13 décembre 2004 - 18 mars 2004 à 21:35
Bonjour,

Comment fait-on pour dire à MySQL si tu trouve l'info dans la table x ne met rien dans la table y et tu ferme la bdd alors que dans le cas contraire tu ajoute l'info requise dans la table y ???

Dans ce cas présent, une première requête MySQL vérifie le user_agent avec la table "rs_robots"

Si cette requête est négative il retourne la page "Forbidden.php" à l'intrus

Dans le cas contraire il prend les identifications demandés de l'intrus et les ajoute à la table "ban"

Par conséquent, si le script fonctionne, je ne suis pas un robot et mon "user_agent" n'est pas dans la liste "rs_robots" donc j'obtiendrai la page "Forbidden.php" et mes infos seront dans la table "ban"

Or, je n'obtiens rien du tout !!!

Je sias qu'il y a une erreur évidente avec ma fonction "if" dans MySQL dont je ne sais pas comment l'appliquer (voir la partie en gras dans le script ci-dessous... Après avoir corrigé cette partie en gras, je pense que le script fonctionnera comme voulu... mais ce serait bien de vérifier tout le script...

Merci pour votre aide

<?php

//parametre de connection a la base de données
$host="sql";
$user="user";
$pass="pass";
$name="base1";
$table="ban";
$table_1="rs_robots";

//recuperation de la date systeme
$date = date("Y/m/d H:i");
//recuperation de l'ip du client
$ip  = $HTTP_SERVER_VARS["REMOTE_ADDR"];
//recuperation du user_agent du client
$hote  = $HTTP_SERVER_VARS["HTTP_USER_AGENT"];

//connection a la base de données
$dbic = mysql_connect($host,$user,$pass);
//selection de la base de données
mysql_select_db($name);

//recherche du robot
mysql_query("SELECT FROM rs_robots WHERE user_agent="$hote"");

//action si pas de robot
if    while(list($hote) = mysql_fetch_row($res))

        //liberation du resultat de la requette
        mysql_free_result($res) or print mysql_error();
        //fermeture de la connection a la base de données
        mysql_close($ic) or print mysql_error();

// on insere l'ip du client dans la table des ip bloqué
mysql_query("INSERT into ban (id, ip, hote, date) values ('', '$ip', '$hote', '$date')");

//envoie de la page Forbidden.php à l'intrus
include ($HTTP_SERVER_VARS["DOCUMENT_ROOT"]."/Forbidden.php");

// on libère les prisonniers d'il ya 24 heures
$timestamp = time() - 86400; // 24 heures
$date_1 = date("Y-m-d H:i:s", $timestamp);
$delete = "DELETE FROM $table WHERE date < '$date_1'";
$query = Mysql_Query($delete);

// on ferme le script sans afficher le reste de la page demander
mysql_close($dbic);
die("");
?>

5 réponses

cs_Bl0tCh Messages postés 74 Date d'inscription dimanche 2 novembre 2003 Statut Membre Dernière intervention 6 septembre 2008
18 mars 2004 à 19:27
essai comme ça
<? $res=mysql_query("SELECT FROM rs_robots WHERE user_agent='$hote'");

while($list=mysql_fetch_array($res)) {
if($hote==$list['user_agent']) {
$deja="1";
}
}

if(deja=="1") {
// on insere l'ip du client dans la table des ip bloqué
mysql_query("INSERT into ban (id, ip, hote, date) values ('', '$ip', '$hote', '$date')");

//envoie de la page Forbidden.php à l'intrus
include ($HTTP_SERVER_VARS["DOCUMENT_ROOT"]."/Forbidden.php");

// on libère les prisonniers d'il ya 24 heures
$timestamp = time() - 86400; // 24 heures
$date_1 = date("Y-m-d H:i:s", $timestamp);
$delete = "DELETE FROM $table WHERE date < '$date_1'";
$query = Mysql_Query($delete);

// on ferme le script sans afficher le reste de la page demander
mysql_close($dbic);
die("");
} ?>
0
cs_pyranhaz Messages postés 236 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 13 décembre 2004
18 mars 2004 à 19:58
Non, j'obtiens une page blanche...

Il doit y avoir une erreur dans le script...

Mais l'idée et l'approche semble bonne...
0
cs_Bl0tCh Messages postés 74 Date d'inscription dimanche 2 novembre 2003 Statut Membre Dernière intervention 6 septembre 2008
18 mars 2004 à 20:20
J'ai modifié un peu :

<? $res=mysql_query("SELECT FROM rs_robots WHERE user_agent='$hote'");

while($list=mysql_fetch_array($res)) {
if($list['user_agent']==$hote) { //m'étais gourrer là
$deja="1";
}
}

if(deja=="1") {
// on insere l'ip du client dans la table des ip bloqué
mysql_query("INSERT into ban (ip, hote, date) values ('$ip', '$hote', '$date')"); //pas besoin de mettre ds id, ça s'icrémente automatiquement

//envoie de la page Forbidden.php à l'intrus
include ($HTTP_SERVER_VARS["DOCUMENT_ROOT"]."/Forbidden.php");

// on libère les prisonniers d'il ya 24 heures
$timestamp = time() - 86400; // 24 heures
$date_1 = date("Y-m-d H:i:s", $timestamp);
$delete = "DELETE FROM $table WHERE date < '$date_1'";
$query = Mysql_Query($delete);

// on ferme le script sans afficher le reste de la page demander
mysql_close($dbic);
die("");
} ?>

et si ça marche pas, après la boucle while, fait un echo sur $deja pour voir
0
cs_pyranhaz Messages postés 236 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 13 décembre 2004
18 mars 2004 à 20:22
Le script ci-dessous semble fonctionner...

je dis "semble" par ce que pour conclure il faudra que les robots passent sur le site et ne se fasse pas prendre au piège...

Je ne vois que un seul hic dans ce script...
Il se pourrait que les robots référencent la page piège et alors tous les visiteurs non-robots tomberont dans le piège...
En espérant que le fichier robots.txt ait un minimum de reconnaissance et de respect de la part des robots...

Je ne vois pas comment faire pour rediriger les robots aur la page index automatiquement dès qu'ils sont ammené au fichier piège... Je réfléchis... cela doit être inclus dans ce script... genre si tu es un robot reconnu, dirige toi sur index.php

voici le script:

<?php

//parametre de connection a la base de données
$host="sql";
$user="user
$pass="pass
$name="base1";
$table="ban";

//recuperation de la date systeme
$date = date("Y/m/d H:i");
//recuperation de l'ip du client
$ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
//recuperation du user_agent du client
$agent = $HTTP_USER_AGENT;
//recuperation de l'hôte du client
$hote = $HTTP_SERVER_VARS["REMOTE_HOST"];

//connection a la base de données
$ic = mysql_connect($host,$user,$pass);
//selection de la base de données
mysql_select_db($name);

$sql="SELECT * FROM `rs_robots` WHERE user_agent='$agent'";
$req=mysql_query($sql) or die ('Erreur SQL !
'.$sql.'
'.mysql_error());
if (mysql_num_rows($req) == 0)
{
// on insere l'ip du client dans la table des ip bloqué
mysql_query("INSERT into `ban` (id, ip, hote, date) values ('', '$ip', '$hote', '$date')");
//envoie de la page Forbidden.php à l'intrus
include ($HTTP_SERVER_VARS["DOCUMENT_ROOT"]."/Forbidden.php");
// on libère les prisonniers d'il ya 24 heures
$timestamp = time() - 86400; // 24 heures
$date_1 = date("Y-m-d H:i:s", $timestamp);
$delete = "DELETE FROM $table WHERE date < '$date_1'";
$query = Mysql_Query($delete);
// on ferme le script sans afficher le reste de la page demander
mysql_close($ic);
exit();
}
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_pyranhaz Messages postés 236 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 13 décembre 2004
18 mars 2004 à 21:35
Le script suivant fait EXACTEMENT ce que je m'attendais de lui:

1) il protège les robots indexeurs
2) il redirige les robots sur la page index quand ammené ici
3) il efface le passage du script de blocage au départ des robots
4) il bloque les intrus
5) il vide la table "ban" après 24h. de blocage

Je ne devrais plus voir de robot tombé dans le piège et le robots.txt ca vaut ce que ca vaut = pas cher

voici le script si il vous intéresse... il manque le fichier "verif.php" qui vérifie si le visiteur est bloqué ou non et bloque l'accès au site ou pas selon la vérification...
Je vous laisse ce bout de travail...

<?php

//parametre de connection a la base de données
$host="sql";
$user="user";
$pass="pass";
$name="base1";
$table="ban";

//récuperation de la date systeme
$date = date("Y/m/d H:i");
//récuperation de l'ip du client
$ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
//récuperation de l'hôte du client
$hote = $HTTP_SERVER_VARS["REMOTE_HOST"];
//récuperation du user_agent du client
$agent = $HTTP_USER_AGENT;

//connection a la base de données
$ic = mysql_connect($host,$user,$pass);
//selection de la base de données
mysql_select_db($name);

$sql="SELECT * FROM `rs_robots` WHERE user_agent='$agent'";
$req=mysql_query($sql) or die ('Erreur SQL !
'.$sql.'
'.mysql_error());
if (mysql_num_rows($req) == '')
{
// on insere l'ip du client dans la table des ip bloqué
mysql_query("INSERT into `ban` (id, ip, hote, date) values ('', '$ip', '$hote', '$date')");
//envoie de la page Forbidden.php à l'intrus
include ($HTTP_SERVER_VARS["DOCUMENT_ROOT"]."/Forbidden.php");
// on libère les prisonniers d'il ya 24 heures
$timestamp = time() - 86400; // 24 heures
$date_1 = date("Y-m-d H:i:s", $timestamp);
$delete = "DELETE FROM $table WHERE date < '$date_1'";
$query = Mysql_Query($delete);
// on ferme le script sans afficher le reste de la page demander
mysql_close($ic);
exit();
}
else
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.zone-international.com');
header('Connection: close');
exit();
?>
0
Rejoignez-nous