Php + mysql. Besoin d'une aide

Résolu
Edouard73 Messages postés 150 Statut Membre -  
Edouard73 Messages postés 150 Statut Membre -
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>";
}

?>
Configuration: Windows XP
Firefox 3.0.1

1 réponse

  1. macgawel Messages postés 676 Statut Membre 89
     
    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
    1. Edouard73 Messages postés 150 Statut Membre 11
       
      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
      1. Edouard73 Messages postés 150 Statut Membre 11 > Edouard73 Messages postés 150 Statut Membre
         
        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