Un vrai casse-tête MySQL
Fermé
pyranhaz
Messages postés
38
Date d'inscription
dimanche 19 octobre 2003
Statut
Membre
Dernière intervention
2 février 2008
-
18 mars 2004 à 18:20
pyranhaz Messages postés 38 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 2 février 2008 - 20 mars 2004 à 20:05
pyranhaz Messages postés 38 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 2 février 2008 - 20 mars 2004 à 20:05
A voir également:
- Un vrai casse-tête MySQL
- Casse-tête avec des allumettes - Télécharger - Jeux vidéo
- Mysql community server - Télécharger - Bases de données
- Écran tv cassé réparation prix ✓ - Forum Ecran
- Remplacer tete sur photo - Guide
- Whatsapp telephone cassé ✓ - Forum WhatsApp
8 réponses
grandmoug
Messages postés
621
Date d'inscription
jeudi 2 mai 2002
Statut
Contributeur
Dernière intervention
21 juillet 2004
26
18 mars 2004 à 19:01
18 mars 2004 à 19:01
Salut,
j'avoue que j'ai pas compris cette partie
//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))
En effet : si $hote correspond à un robot alors ta requête sql aura un résultat et si $hote!= de robot=> ta requete sql sera vide.
Donc pourquoi ne pas faire juste un test sur le nombre de résultat de la requête sql.
Voilà c'est mon avis et j'espère que c'est pas une connerie ;)
Bon courage
j'avoue que j'ai pas compris cette partie
//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))
En effet : si $hote correspond à un robot alors ta requête sql aura un résultat et si $hote!= de robot=> ta requete sql sera vide.
Donc pourquoi ne pas faire juste un test sur le nombre de résultat de la requête sql.
Voilà c'est mon avis et j'espère que c'est pas une connerie ;)
Bon courage
pyranhaz
Messages postés
38
Date d'inscription
dimanche 19 octobre 2003
Statut
Membre
Dernière intervention
2 février 2008
3
18 mars 2004 à 19:47
18 mars 2004 à 19:47
non, ca ne change rien les `
je cherche l'erreur...
je fais des requêtes dans phpMyAdmin jusqu'à ce que ca marche
je cherche l'erreur...
je fais des requêtes dans phpMyAdmin jusqu'à ce que ca marche
pyranhaz
Messages postés
38
Date d'inscription
dimanche 19 octobre 2003
Statut
Membre
Dernière intervention
2 février 2008
3
18 mars 2004 à 19:57
18 mars 2004 à 19:57
Il semble que ce soit un succès !
reste à faire quelques tests et surtout attendre le passage des robots pour conclure...
l'ERREUR SQL était ceci:
SELECT * FROM `rs_robots` WHERE user_agent="google"
Oui il y avait les ` mais également le * après select
J'ai obtenu la page "Forbidden.php" puisque mon "user_agent" n'est pas un robot...
Mais je n'ai pas été ajouté dans la table "ban"
ce détail est impotant...
reste à faire quelques tests et surtout attendre le passage des robots pour conclure...
l'ERREUR SQL était ceci:
SELECT * FROM `rs_robots` WHERE user_agent="google"
Oui il y avait les ` mais également le * après select
J'ai obtenu la page "Forbidden.php" puisque mon "user_agent" n'est pas un robot...
Mais je n'ai pas été ajouté dans la table "ban"
ce détail est impotant...
flokocha
Messages postés
1510
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
10 octobre 2015
281
18 mars 2004 à 19:59
18 mars 2004 à 19:59
C'est juste que SELECT FROM... n'existe pas.
Si tu veux récupérer les données de toutes les colonnes il faut mettre SELECT * FROM...
Si tu veux récupérer les données de toutes les colonnes il faut mettre SELECT * FROM...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Jean-François Pillou
Messages postés
18301
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
63 274
18 mars 2004 à 20:00
18 mars 2004 à 20:00
mysql_query("INSERT into ban (ip, hote, date) values (\"$ip\", \"$hote\", \"$date\")");
Vérifie que ton champ id est bien en auto-increment
Vérifie que ton champ id est bien en auto-increment
Jeff --WM@CCM--
pyranhaz
Messages postés
38
Date d'inscription
dimanche 19 octobre 2003
Statut
Membre
Dernière intervention
2 février 2008
3
18 mars 2004 à 20:46
18 mars 2004 à 20:46
Oui, il est bien auto-increment
pyranhaz
Messages postés
38
Date d'inscription
dimanche 19 octobre 2003
Statut
Membre
Dernière intervention
2 février 2008
3
18 mars 2004 à 20:43
18 mars 2004 à 20:43
Échec !
Malheureusement, les robots se font prendre :-(
le script ne fonctionne pas...
Le user_agent même si il est trouvé par MySQL, bloque l'accès
je ne comprends pas
Malheureusement, les robots se font prendre :-(
le script ne fonctionne pas...
Le user_agent même si il est trouvé par MySQL, bloque l'accès
je ne comprends pas
pyranhaz
Messages postés
38
Date d'inscription
dimanche 19 octobre 2003
Statut
Membre
Dernière intervention
2 février 2008
3
18 mars 2004 à 23:35
18 mars 2004 à 23:35
Problème finalement réglé définitivement !
tous semble avoir été "patché" et le résultat est satisfaisant après un test effectué avec mon "user_agent" la réponse est exactement celle attendue...
La question en suspend est qu'il est p-e tardif avant de fermer la base de donnée, mais bon c'est relatif en frais de question...
voici le code final, si vous avez des améliorations à me noter, gênez-vous pas...
Merci à ceux qui ont contribué à sa réalisation ! :-)
<?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 de l'hôte du client
$hote = $HTTP_SERVER_VARS["REMOTE_HOST"];
//recuperation 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 !<br>'.$sql.'<br>'.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();
?>
tous semble avoir été "patché" et le résultat est satisfaisant après un test effectué avec mon "user_agent" la réponse est exactement celle attendue...
La question en suspend est qu'il est p-e tardif avant de fermer la base de donnée, mais bon c'est relatif en frais de question...
voici le code final, si vous avez des améliorations à me noter, gênez-vous pas...
Merci à ceux qui ont contribué à sa réalisation ! :-)
<?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 de l'hôte du client
$hote = $HTTP_SERVER_VARS["REMOTE_HOST"];
//recuperation 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 !<br>'.$sql.'<br>'.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();
?>
pyranhaz
Messages postés
38
Date d'inscription
dimanche 19 octobre 2003
Statut
Membre
Dernière intervention
2 février 2008
3
20 mars 2004 à 20:05
20 mars 2004 à 20:05
Enfin !
C'est fonctionnel !
Les pages blanches étaient causés par la fonction "die('')" et/ou "exit()"
La façon inverse recherché (si pas dans la liste MySQL) a été trouvé avec le code suivant:
$sql="SELECT * FROM `rs_robots` WHERE agent='$agent'";
$req=mysql_query($sql) or die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
if (mysql_num_rows($req) == '')
{
et SANS rien d'autre en dessous que ceci:
//envoie de la page Hack.php à l'intrus
include ($HTTP_SERVER_VARS["DOCUMENT_ROOT"]."/Hack.php");
// on ferme le script
mysql_close($ic);
}
Ainsi si ce n'est PAS un robot, le fichier "Hack.php" entrera en action
Au contraire, si c'est UN robot, le fichier sera ignoré et la visite tranparente (sans arrêt ni page blanche)
Il y a cependant des visiteurs qui ont le "REMOTE_HOST == '' et qui ne sont pas bloqué par le système...
Je ne comprends pas pourquoi, même si c'est une minorité...
Comment peut-on contourner du php ???
C'est fonctionnel !
Les pages blanches étaient causés par la fonction "die('')" et/ou "exit()"
La façon inverse recherché (si pas dans la liste MySQL) a été trouvé avec le code suivant:
$sql="SELECT * FROM `rs_robots` WHERE agent='$agent'";
$req=mysql_query($sql) or die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
if (mysql_num_rows($req) == '')
{
et SANS rien d'autre en dessous que ceci:
//envoie de la page Hack.php à l'intrus
include ($HTTP_SERVER_VARS["DOCUMENT_ROOT"]."/Hack.php");
// on ferme le script
mysql_close($ic);
}
Ainsi si ce n'est PAS un robot, le fichier "Hack.php" entrera en action
Au contraire, si c'est UN robot, le fichier sera ignoré et la visite tranparente (sans arrêt ni page blanche)
Il y a cependant des visiteurs qui ont le "REMOTE_HOST == '' et qui ne sont pas bloqué par le système...
Je ne comprends pas pourquoi, même si c'est une minorité...
Comment peut-on contourner du php ???
18 mars 2004 à 19:10
le nombre n'a pas d'importance...
ce que je veux est que si le "user_agent" est trouvé, la base se ferme et ne fait aucune action autre
dans le cas où aucun robot n'est trouvé (requête sql vide) que la page "Forbidden.php" soit immédiatement affiché en + d'ajouter les infos de l'intrus dans la table "ban"
mon problème est qu'en ce moment le script affiche une page blanche quand je le test...
Comme mon "user_agent" n'est pas celui d'un robot je devrais voir la page "Forbidden.php" et dans ma base MySQL et la table "ban" je devrais voir mon IP et la date + heure auquel cela est arrivé...
Rien du tout...
18 mars 2004 à 19:19
Bon ok je suis borné mais pourquoi ne pas tester si la requete est vide ou pas.
je m'explique
Non ;) ?
18 mars 2004 à 19:32
néanmoins on se rapproche du but semble-t-il
J'ai une ERRUER MYSQL qui dit ceci:
Erreur SQL !
SELECT FROM rs_robots WHERE user_agent='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)'
You have an error in your SQL syntax near 'FROM rs_robots WHERE user_agent='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5' at line 1
C'est quoi, je ne comprends pas... il veut des '' entre rs_robots ???
comme ceci: 'rs_robots' ???
18 mars 2004 à 19:38
18 mars 2004 à 19:58
Il faut que tu mettes :
ou mieux
Jeff --WM@CCM--