Php + mysql. Besoin d'une aide

Résolu/Fermé
Edouard73 Messages postés 139 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 2 avril 2013 - 21 oct. 2008 à 17:02
Edouard73 Messages postés 139 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 2 avril 2013 - 22 oct. 2008 à 12:14
Bonjour,

Voila je crée un script php / mysql por bannir des ip. bon tous marche cependant. mysql autorise le ban que de la première IP. et pas les autres. Pouvez vous regarder mes codes et me dire se que je dois changer ?

merci

<?
mysql_connect("localhost", "loggin", "password");
mysql_select_db("usbf_usbfrance");
$reponse = mysql_query('SELECT * FROM banni_fr');

while($donnees = mysql_fetch_array($reponse))
{
$banni = $donnees['ip'];
}
mysql_close();

$comA = addslashes ($_POST['comA']);
$nom = addslashes ($_POST['nom']);
$url = addslashes ($_POST['url']);
$mail = addslashes ($_POST['mail']);
$ip = $_SERVER['REMOTE_ADDR'];
$contenu = stripslashes ($_POST['contenu']);

if ($banni == $ip)
{
echo "VOUS ETES BANNI DES COMMANTAIRES... ";
echo "<script language='Javascript'>
function redirect()
{
document.location='http://www.usbfrance.com/
}
setTimeout( 'redirect();', 3000 )
</script>";
}
else
{
echo "MESSAGE AJOUTé, REDIRECTION DANS 3 SECONDES ... ";
echo "<script language='Javascript'>
function redirect()
{
document.location='http://www.usbfrance.com/news/commentaires.php?comA=$comA'
}
setTimeout( 'redirect();', 3000 )
</script>";
}

?>
A voir également:

1 réponse

macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
21 oct. 2008 à 17:32
Bonjour.
while($donnees = mysql_fetch_array($reponse))
{
$banni = $donnees['ip'];
}

Le problème vient de là :
TANT QUE j'ai un enregistrement
   je mets la valeur de IP dans $banni
FIN TANT QUE

$banni contient la valeur de l'IP du dernier enregistrement regardé.
Du coup, quand tu fais ton test IF, tu ne compares l'IP courante ($ip) qu'à la dernière valeur de $banni...

Solutions :
- Mettre le test dans le while. Utilise une variable qui vaut 0 au départ, et que tu mes à 1 si l'IP est reconnue comme une IP bannie.
$banni = 0;
while($donnees = mysql_fetch_array($reponse)) {
   if ($ip == $donnees['ip']) {
      $banni = 1;
   }
}

Après, tu testes la valeur de $banni.

- Mettre les IP bannies dans un tableau,
while($donnees = mysql_fetch_array($reponse)) {
      $bannis[] = $donnees['ip'];
   }
}

puis regarder si l'IP étudiée se retrouve dans le tableau
if (in_array($ip, $bannis) {
...
}
1
Edouard73 Messages postés 139 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 2 avril 2013 11
22 oct. 2008 à 12:10
coucou

merci pour le code. il m'a permis d'avancer un peu. d'ailleurs il arrive à différencier tous les ip dans le tableau. Ainsi il ne reste pas bloquer au premier. par contre j'ai un soucie d'affichage. Bon j'essaye de corriger mais si en parallèle quelqu'un pourrait m'aider ça serait cool.

Warning: Cannot use a scalar value as an array in /home/usbf/public_html/news/commentairesAjouter.php on line 19

<?
$comA = addslashes ($_POST['comA']);
$nom = addslashes ($_POST['nom']);
$url = addslashes ($_POST['url']);
$mail = addslashes ($_POST['mail']);
$ip = $_SERVER['REMOTE_ADDR'];
$contenu = stripslashes ($_POST['contenu']);

mysql_connect("localhost", "user", "password");
mysql_select_db("usbf_usbfrance");
$reponse = mysql_query('SELECT * FROM banni_fr');
$banni = 0;
while($donnees = mysql_fetch_array($reponse))
{
if ($nom == $donnees['ip'])
{
$banni = 1;
}
$banni[] = $donnees['ip']; //le probleme reside ICI
}
mysql_close();

if ($banni == 1)
{
echo "VOUS ETES BANNI DES COMMANTAIRES... ";
echo "<script language='Javascript'>
function redirect()
{
document.location='http://www.....com/
}
setTimeout( 'redirect();', 3000 )
</script>";
}
else
{
echo "MESSAGE AJOUTé, REDIRECTION DANS 3 SECONDES ... ";
echo "<script language='Javascript'>
function redirect()
{
document.location='http://www.....com/news/commentaires.php?comA=$comA'
}
setTimeout( 'redirect();', 3000 )
</script>";
}

?>
0
Edouard73 Messages postés 139 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 2 avril 2013 11 > Edouard73 Messages postés 139 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 2 avril 2013
22 oct. 2008 à 12:14
Bon bha j'y suis arriver ^^ si ça peux servir à d'autre voici le code complet :

<?
$comA = addslashes ($_POST['comA']);
$nom = addslashes ($_POST['nom']);
$url = addslashes ($_POST['url']);
$mail = addslashes ($_POST['mail']);
$ip = $_SERVER['REMOTE_ADDR'];
$contenu = stripslashes ($_POST['contenu']);

mysql_connect("localhost", "user", "password");
mysql_select_db("database");
$reponse = mysql_query('SELECT * FROM banni_fr');
$banni = 0;
while($donnees = mysql_fetch_array($reponse))
{
if ($ip== $donnees['ip'])
{
$banni = 1;
}
}
while($donnees = mysql_fetch_array($reponse))
{
$banni[] = $donnees['ip'];
}
mysql_close();

if ($banni == 1)
{
echo "VOUS ETES BANNI DES COMMANTAIRES... ";
echo "<script language='Javascript'>
function redirect()
{
document.location='http://www.....com/
}
setTimeout( 'redirect();', 3000 )
</script>";
}
else
{
echo "MESSAGE AJOUTé, REDIRECTION DANS 3 SECONDES ... ";
echo "<script language='Javascript'>
function redirect()
{
document.location='http://www.....com/news/commentaires.php?comA=$comA'
}
setTimeout( 'redirect();', 3000 )
</script>";
}

?>
0