PHP problème d'ip

Résolu/Fermé
crocoscore Messages postés 165 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 3 février 2015 - 28 juin 2009 à 17:34
crocoscore Messages postés 165 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 3 février 2015 - 28 juin 2009 à 18:27
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; }

?>

4 réponses

Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 330
28 juin 2009 à 17:55
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 :
$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();
1
Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 330
28 juin 2009 à 18:20
<?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();

?> 
1
crocoscore Messages postés 165 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 3 février 2015 5
28 juin 2009 à 18:11
Peux tu me montrer stp? C'est pas que je sois flemmare, mais je ne gère pas très bien de PHP

Merci
0
crocoscore Messages postés 165 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 3 février 2015 5
28 juin 2009 à 18:27
Merci beaucoup de ta réponse rapide est surtout: Très efficace!
Bonne soirée, je boucle de topic.
0