Page 1 sur 1

Aide sur Banissement Ip

Posté : 26 mai 2012, 17:26
par Asynof
Bonjour,

Je viens vous voir afin d'avoir une petite aide en php. Je m'explique, j'ai refais un site avec un panel Admin. J'ai mis en place un systeme de bannissement d'Ip. J'ai donc créé une page html qui prévient l'user que son ip est banni. Cette page l empêche donc de rejoindre le site. Le soucis qui se pose c est que, lorsque j active ce systeme, cette page html me bloque aussi. ( elle bloque tout le monde ) au lieu de bloquer que les ip qui se trouvent dans ma db. ( page html : interdiction.html )


$ip_blacklist = mysql_query('SELECT * FROM CMS_ban');

const HOMEPAGE="http://www.monsite.fr/";
// lecture de l'ip en cours
$ip = isset($_SERVER['REMOTE_ADDR']) ? trim($_SERVER['REMOTE_ADDR']) : '';

// test si l'ip est blacklisté
if ( array_search($ip, $ip_blacklist) !== FALSE )
{
Header("Location: interdiction.html");
exit;

// stop le script

} else {

header("Location:".self::HOMEPAGE);
}
mysql_close();

?>

Pourriez vous m'aider SVP. JE vous remercie d'avance.

Re: Aide sur Banissement Ip

Posté : 26 mai 2012, 19:32
par Ryle
Si tu es redirigé vers ta page html, c'est que le test ( array_search($ip, $ip_blacklist) !== FALSE ) est toujours "vrai". Il faut donc vérifier la valeur de $ip (qui à priori est correctement récupérée) et du tableau $ip_blacklist... qui visiblement n'est pas un tableau d'adresse ip, mais le résultat -non traité- de l'exécution d'une requête sql... peut être qu'en creusant de ce côté là ;)

Re: Aide sur Banissement Ip

Posté : 26 mai 2012, 22:56
par Asynof
Bonsoir et merci du conseil.
Après quelques recherches, j'ai modifié mon code. Enfin, ça fonctionne. Voici la correction :

$ip_blacklist = mysql_query('SELECT ip FROM CMS_ban');
$req = mysql_fetch_assoc($ip_blacklist);

// lecture de l'ip en cours
$ip = isset($_SERVER['REMOTE_ADDR']) ? trim($_SERVER['REMOTE_ADDR']) : '';

// test si l'ip est blacklisté
if ( $req != 0 )
{
Header("Location: interdiction.html");
exit;
// stop le script

} else {

return (true);
}
mysql_close();

Je te réitère mes remerciements Ryle ( d'avoir répondu )

Re: Aide sur Banissement Ip

Posté : 27 mai 2012, 00:55
par Ryle
Euh ouip, sauf que du coup tu as supprimé ton contrôle qui vérifies si l'ip est bannie ou pas ;)

Ps : pense à utiliser les balises
 quand tu postes du code :)

Re: Aide sur Banissement Ip

Posté : 27 mai 2012, 23:03
par Asynof
Hello,

Je me suis avancé un peu trop vite. Ca ne fonctionne toujours pas. ( j'ai testé en bannissant un Ip, on ne peut plus accéder au site ).

Je désespère.

Ps: Désolé pour les balises j'y penserai dorénavant.

Re: Aide sur Banissement Ip

Posté : 28 mai 2012, 01:13
par Ryle
C'est ce que je te disais plus haut, tu as perdu une partie de ton test, celui-ci ne fonctionne donc plus comme tu le souhaites :)

Il faut vérifier :
- que ta requête retourne des résultats (donc qu'il y a au moins une ip bannie)
ET
- que l'ip de l'utilisateur connecté n'est pas contenue dans ces résultats.

En gros, ton if redirigeant vers la page de bannissement devrait être :
if ( $req != 0 && array_search($ip, $ip_blacklist) !== FALSE)

Re: Aide sur Banissement Ip

Posté : 28 mai 2012, 11:24
par moogli
mysql_fetch_assoc ne peux pas retourner zéro mais false ;)

if ( $req !== false && array_search($ip, $ip_blacklist) !== FALSE)

sinon pourquoi ne pas simplement demander à mysql de faire le taf ? (c'est le sien après tout les recherches sur un base de donnée, plutot qu'a php).

docn un select count(*) as nbIp from laTableDesIp where ip='lIpRecuperéAvecPhp';

ensuite tu regarde le le retour (nbIp) est différent de zéro :)

@+

Re: Aide sur Banissement Ip

Posté : 28 mai 2012, 21:12
par Xartrick
Personnellement, j'aurais fait beaucoup plus simple, une simple requête et un appel à la fonction mysql_num_rows suffit !
<?php
    // Pas besoin de filtrer $_SERVER['REMOTE_ADDR'], elle n'est pas défini par le client.
    $oQuery = mysql_query("SELECT * FROM CMS_ban WHERE `ip` = '" . $_SERVER['REMOTE_ADDR'] . "' LIMIT 1;");
    // On admet que la requête c'est bien passé.
    
    if (mysql_num_rows($oQuery) == 1) {
        // L'IP du client est banni.
    }
?>

Re: Aide sur Banissement Ip

Posté : 11 juin 2012, 18:57
par Asynof
Bonjour, Bonsoir,

Désolé de répondre tardivement ( travail oblige :) ). Je vais rectifier donc mon script avec vos réponses.

Merci beaucoup.

Re: Aide sur Banissement Ip

Posté : 19 juin 2012, 21:35
par Asynof
Bonsoir,

Merci à Xartrick pour son aide. Tout fonctionne correctement.

AsynOf