PHP problème d'ip
Résolu
crocoscore
Messages postés
165
Date d'inscription
Statut
Membre
Dernière intervention
-
crocoscore Messages postés 165 Date d'inscription Statut Membre Dernière intervention -
crocoscore Messages postés 165 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voila, je souhaite crée un systeme pour bloquée des utilisateurs par leurs IP, ça fonctionne pour les bannies (ils sont redirigés), mais pas pour les pas-bannies (La page s'affiche, mais un message d'erreur apparait...) (Zut...).
J'explique vit' fais le système: J'ai crée une table "IP" avec une Entrée "varchar" 16 caractère, j'y met donc les IPs bannies.
D'autre part, sur les pages où je veux bloquer des utilisateurs par leurs IPs, je colle ce code:
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("coursphp");
$reponse = mysql_query('SELECT * FROM ip');
while ($donnees = mysql_fetch_array($reponse) )
{
$lips = ($donnees['ip']);
}
mysql_close();
if($_SERVER["REMOTE_ADDR"] == "$lips") { echo "<META HTTP-EQUIV='Refresh' CONTENT='0;URL=/fichier/ban.html'>"; exit; }
?>
Voila, je souhaite crée un systeme pour bloquée des utilisateurs par leurs IP, ça fonctionne pour les bannies (ils sont redirigés), mais pas pour les pas-bannies (La page s'affiche, mais un message d'erreur apparait...) (Zut...).
J'explique vit' fais le système: J'ai crée une table "IP" avec une Entrée "varchar" 16 caractère, j'y met donc les IPs bannies.
D'autre part, sur les pages où je veux bloquer des utilisateurs par leurs IPs, je colle ce code:
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("coursphp");
$reponse = mysql_query('SELECT * FROM ip');
while ($donnees = mysql_fetch_array($reponse) )
{
$lips = ($donnees['ip']);
}
mysql_close();
if($_SERVER["REMOTE_ADDR"] == "$lips") { echo "<META HTTP-EQUIV='Refresh' CONTENT='0;URL=/fichier/ban.html'>"; exit; }
?>
A voir également:
- PHP problème d'ip
- Ethernet n'a pas de configuration ip valide - Guide
- Télévision ip - Guide
- Comment connaître son adresse ip - Guide
- IPTV illégal : après les pirates, la justice condamne maintenant les clients… jusqu'à la prison ! - Guide
- Ip local - Guide
4 réponses
Ca marche pas ce truc-là.
IL faut comprendre que ce qu'il y a dans le while {ICI} est une boucle :
L'affectation $lips = ($donnees['ip']); va se faire plusieurs fois tant que $donnees = mysql_fetch_array($reponse) n'est pas nul (c'est à dire tant qu'il y a des entrées dans la table).
Ton code fonctionne bien s'il n'y a qu'une adresse bannie, ou si l'adresse bannie est la dernière renvoyée par MySQL.
Donc while ($donnees = mysql_fetch_array($reponse) )
{
$lips = ($donnees['ip']);
}
ça veut dire : "tant qu'il y a des adresses dans la table, tu fais $lips = ($donnees['ip']);
Ce qu'il faudrait faire pour que ça marche, c'est à l'intérieur de la boucle, vérifier si l'adresse du visiteur est bannie, et le cas échéant sortir de la boucle et afficher le message adhéquat.
Mais il y a beaucoup mieux. Utilise la clause WHERE en SQL pour sélectionner l'adresse du visiteur, si MySQL ne retourne aucun résultat ça veut dire que l'utilisateur n'est pas banni, dans le cas contraire il l'est :
Utilise mysql_num_rows pour voir combien de résultats sont retournés par la requête.
D'autre part plutôt que d'imprimer un meta fais plutôt un include pour rediriger l'utilisateur :
IL faut comprendre que ce qu'il y a dans le while {ICI} est une boucle :
L'affectation $lips = ($donnees['ip']); va se faire plusieurs fois tant que $donnees = mysql_fetch_array($reponse) n'est pas nul (c'est à dire tant qu'il y a des entrées dans la table).
Ton code fonctionne bien s'il n'y a qu'une adresse bannie, ou si l'adresse bannie est la dernière renvoyée par MySQL.
Donc while ($donnees = mysql_fetch_array($reponse) )
{
$lips = ($donnees['ip']);
}
ça veut dire : "tant qu'il y a des adresses dans la table, tu fais $lips = ($donnees['ip']);
Ce qu'il faudrait faire pour que ça marche, c'est à l'intérieur de la boucle, vérifier si l'adresse du visiteur est bannie, et le cas échéant sortir de la boucle et afficher le message adhéquat.
Mais il y a beaucoup mieux. Utilise la clause WHERE en SQL pour sélectionner l'adresse du visiteur, si MySQL ne retourne aucun résultat ça veut dire que l'utilisateur n'est pas banni, dans le cas contraire il l'est :
$ip=$_SERVER["REMOTE_ADDR"]; mysql_query("SELECT * FROM ip WHERE ip='$ip'");
Utilise mysql_num_rows pour voir combien de résultats sont retournés par la requête.
D'autre part plutôt que d'imprimer un meta fais plutôt un include pour rediriger l'utilisateur :
include('./fichier/ban.html'); exit();
<?php mysql_connect("localhost", "root", ""); mysql_select_db("coursphp"); $ip=$_SERVER["REMOTE_ADDR"]; // IP du visiteur courant $reponse = mysql_query("SELECT * FROM ip WHERE ip='$ip'"); if(mysql_num_rows($reponse)!=0) { //cas où la sélection a renvoyé au moins un résultat i.e. cette IP est bannie include('./fichier/ban.html'); exit(); } mysql_close(); ?>