Php, recherche bdd marche pas :°

dededede4 Messages postés 235 Date d'inscription   Statut Membre Dernière intervention   -  
dededede4 Messages postés 235 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Donc, je mets se script, qui est sansé dire qu'une IP est acépter ou pas, si elle est refusée, elle est dans la BDD.
Au début, c'est OK, mon IP est acépter.
Ensuite, je mais mon IP dans la BDD, mais sa m'affiche quelle est acépter >.<
Quesqui ne vas pas ?

<?php

mysql_connect("***", "***", "***"); // Connexion à MySQL
mysql_select_db("i154325"); // Sélection de la base

$plageIP = mysql_query("SELECT * FROM plageIP");

$plageIP=array("deb"=>"127.0.0.0","fin"=>"127.254.254.254");
//$plageIP="192.168.0.180";
$yourIP=$_SERVER['REMOTE_ADDR'];
//$yourIP="192.168.0.180";
echo "Votre IP est : ".$yourIP;
if(verifPlageIP($yourIP,$plageIP))
{
	echo "<p>Votre adresse IP n'appartient pas à la plage réseau autorisé!";
}
else
{
	echo "<p> Votre adresse IP est valide!";
}
// et le code permetaant la vérifcation
function verifPlageIP($IP,$PlageIP)
{
	$result=TRUE;
	$tabIP=explode(".",$IP);
	/*echo "<p>tabIP:<br><pre>";
	print_r($tabIP);
	echo "</pre>";*/	if(is_array($PlageIP))
	{
		/*echo "<p>PlageIP:<br><pre>";
		print_r($PlageIP);
		echo "</pre>";*/		foreach($PlageIP as $valeur)
		{
			$tabPlageIP[]=explode(".",$valeur);
		}
		for($i=0;$i<4;$i++)
		{
			if(($tabIP[$i]<$tabPlageIP[0][$i]) || ($tabIP[$i]>$tabPlageIP[1][$i]))
			{
				$result=FALSE;
			}
		}
	}
	else
	{
		$tabPlageIP=explode(".",$PlageIP);
		/*echo "<p>tabPlageIP:<br><pre>";
		print_r($tabPlageIP);
		echo "</pre>";*/		for($i=0;$i<4;$i++)
		{
			if(($tabIP[$i]!=$tabPlageIP[$i]))
			{
				$result=FALSE;
			}
		}
	}
	return ($result);		
}

mysql_close(); // Déconnexion de MySQL
?>
A voir également:

6 réponses

macgawel Messages postés 664 Date d'inscription   Statut Membre Dernière intervention   89
 
Bonjour.

Premier point : tu n'utilises pas ta BDD, donc forcément ça ne sert à rien de rajouter une adresse dedans pour la bloquer !

Deuxième point : comment est organisée ta table ? Quels sont les champs ?
Parce que ton système d'explode etc. me semble un peu lourd...

Avec ton code, si mon adresse est du type 127.*.*.* , elle est considérée comme bloquée, sinon elle est OK. C'est bien ce que tu veux ?

Une fonction qui pourrait te servir, si tu travailles sur des "blocs" d'adresses, c'est ip2long($AdresseIP), qui renvoie l'entier correspondant.
0
dededede4 Messages postés 235 Date d'inscription   Statut Membre Dernière intervention   9
 
Merci ;)

Fait fait des recherche avec se que tu ma dit, et j'ai trouver beaucoup plus simple :

$ips_bannies = array('xxx.xxx.xxx.xxx', 'yyy.yyy.yyy.yyy'); 
if(in_array($_SERVER['REMOTE_ADDR'], $ip_bannies)) { 
    header('Location:banni.php'); 
    exit(); 
}  



Je voudrait savoir si sa marcherais :
$ips_bannies = array($ip_ban);

$ip_ban contient les IP venant de la bdd.

Merci ;)
0
dededede4 Messages postés 235 Date d'inscription   Statut Membre Dernière intervention   9
 
>.<

Warning: in_array() [function.in-array]: Wrong datatype for second argument in /data/www/sites/1/idoo.com/d/e/dex4/site/index.php on line 9
0
macgawel Messages postés 664 Date d'inscription   Statut Membre Dernière intervention   89
 
$ips_bannies = array('xxx.xxx.xxx.xxx', 'yyy.yyy.yyy.yyy');
if(in_array($_SERVER['REMOTE_ADDR'], $ip_bannies))

Attention au nom de ta variable !!!
0
dededede4 Messages postés 235 Date d'inscription   Statut Membre Dernière intervention   9
 
<?php

mysql_connect("***", "***", "***"); // Connexion à MySQL
mysql_select_db("***"); // Sélection de la base

$plageIP = mysql_query("SELECT * FROM plageIP");

$ips_bannies = array('$plageIP');
if(in_array($_SERVER['REMOTE_ADDR'], $ips_bannies)) {
header('Location:banni.php');
exit();
}

mysql_close(); // Déconnexion de MySQL
?>

<H1> Bravo !!! T'est pas banni ;) <H1>


Mon IP est dans la bdd mais sa marche pas ; Jsuis sur que je suis noob >.< :D
0

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

Posez votre question
macgawel Messages postés 664 Date d'inscription   Statut Membre Dernière intervention   89
 
$plageIP = mysql_query("SELECT * FROM plageIP");
$ips_bannies = array('$plageIP');

Où as-tu vu ce code ? Effectivement, ça ne risque pas de fonctionner !
Tu définis $ips_bannies comme un tableau qui contient la chaîne de caractères '$plageIP'.
Le code générique pour interroger une BDD en php :
mysql_connect($serveur, $user, $password) or die ('Erreur de connexion au serveur: '.mysql_error()); // Connexion à MySQL
mysql_select_db($db) or die ('Erreur de connexion sur la base : '.mysql_error()); // Sélection de la base
$requete = mysql_query($marequete) or die ('Erreur de requête : '.mysql_error());
while ($ligne = mysql_fetch_array($requete) { // Pour chaque enregistrement renvoyé par la requête
   <traitement>
}

Dans ton cas, tu peux encore simplifier le code, en faisant une requête qui va chercher les enregistrements dans lesquels il y a l'adresse ip que tu cherches. Ensuite, il suffit de compter le nombre de lignes retournées avec mysql_num_rows($requete). S'il n'y en a pas, c'est que l'adresse n'est pas bannie...
Par contre, ça nécessite de faire une ligne par adresse (et pas par plage).
Voici une possibilité (j'en ai profité pour rajouter des or die, comme ça si la fonction plante, tu affiche un message d'erreur parlant...)
mysql_connect("***", "***", "***") or die ('Erreur de connexion à la base : '.mysql_error()); // Connexion à MySQL
mysql_select_db("***") or die ('Erreur sur la base : '.mysql_error()); // Sélection de la base

$plageIP = mysql_query("SELECT IP FROM plageIP WHERE IP='".$_SERVER['REMOTE_ADDR']."'")  or die ('Erreur de requête : '.mysql_error());
if (mysql_num_rows($plageIP) > 0) {
header('Location:banni.php');
exit(); 
}
else {
echo "<H1> Bravo !!! T'est pas banni ;) <H1>";
}

Si tu veux gérer des plages d'adresses bannies (genre de 132.0.0.1 à 132.10.0.240), je te conseille de modifier ta table :
CREATE TABLE `plagesIP` (
`id` TINYINT NOT NULL AUTO_INCREMENT ,
`debut_ip` INT NOT NULL ,
`fin_ip` INT NOT NULL ,
PRIMARY KEY ( `id` )
);

Ensuite tu insère les IP en format numérique avec ip2long($ip).

Pour ta requête, il suffira de faire
$ip = ip2long($_SERVER['REMOTE_ADDR']);
$requete = mysql_query("SELECT * from plagesIP WHERE debut_ip <= ".$ip." AND fin_ip >= '.$ip);
0
dededede4 Messages postés 235 Date d'inscription   Statut Membre Dernière intervention   9
 
O.O

Jver faire dodo puis je m'y remet, mais merci bcp de ton aide, jteste demain ^^
0