Autor Zpráva
Akali
Profil
Ahoj, jak mám udělat blokování ip adres, které mám uložené v databázi?

<?php 
$db_spojeni = mysqli_connect
          ('udaje'); 
          
$objekt_vysledku = mysqli_query($db_spojeni, "SET NAMES 'UTF8'");

$objekt_vysledku = mysqli_query($db_spojeni, 
  'SELECT * FROM ip_ban');

while ($radek = mysqli_fetch_array($objekt_vysledku))
{
$ban = $radek['ip_adresa'];  
}

mysqli_free_result($objekt_vysledku);
 
if ($db_spojeni)
  mysqli_close($db_spojeni);
 

$ip = $_SERVER['REMOTE_ADDR'];
if ($ip == $ban) {
include ("ban.php");
}
else
{
?>
php, html
<?
}
?> 


Vím, že to dělám blbě. Protože do proměnné $ban vkládám všechny ip_adresy z DB a ty se pak nemůžou rovna jedné IP (návštěvníka).. Jak se tohle prosímvás řeší?
Radek9
Profil
Akali:
…
$ban[] = $radek['ip_adresa'];
…
if(in_array($ip, $ban)){
…
Akali
Profil
<?php 
$db_spojeni = mysqli_connect
          ('udaje'); 
          
$objekt_vysledku = mysqli_query($db_spojeni, "SET NAMES 'UTF8'");

$objekt_vysledku = mysqli_query($db_spojeni, 
  'SELECT * FROM ip_ban');

while ($radek = mysqli_fetch_array($objekt_vysledku))
{
$ban[] = $radek['ip_adresa'];  
}

mysqli_free_result($objekt_vysledku);
 
if ($db_spojeni)
  mysqli_close($db_spojeni);
 

$ip = $_SERVER['REMOTE_ADDR'];
if(in_array($ip, $ban)){
include ("ban.php");
}
else
{
?>
php, html
<?
}
?> 

Pokud jsem tě správně pochopoil tka to nefunguje.. IP_adresy mám uložený v jednom řádku v DB zrovna teď tam mám tohle (88.100.64.89, 23.158.155.12).. První je moje IPadresa a druhá vymyšlená
Danqo
Profil
Akali:
v tom tvojom prvom kode v tom while hod if($ban == $_SERVER['REMOTE_ADDR']) { echo "Mas BAN"; exit(); (popripade to tvoje BAN.php ale neviem co v nom mas)}
Akali
Profil
Jenže proměnná $ban obsahuje dvě ip adresy a to 88.100.64.89, 23.158.155.12 a ty se nikdy nebudou rovant jedné IP adrese a to třeba té mojí 88.100.64.89
čili podmínka if(in_array($ip, $ban)) nebude nikdy pravdivá, pokud se tam bude nacházet více ip adres
pokud mám 2 ip - 88.100.64.89, 23.158.155.12 se nerovná 88.100.64.89 a tím pádem mě to tam vždy pustí..
Radek9
Profil
Akali:
Takže to je řetězec, ve kterém jsou IP adresy oddělené čárkou a mezerou? Kdyžtak sem hoď schéme té tabulky.
Akali
Profil
Je to insert, ale to je úplně jedno
INSERT INTO `ip_ban`
(`id`, `ip_adresa`, `komentar`) VALUES 
(1, '88.100.64.89, 23.158.155.12', 'blbeček');

Já právě nevím, zda je lepší ukládat do jednoho řádku, nebo do 2
Radek9
Profil
Akali:
Do dvou, potom můžeš použít ten můj způsob. A možná by bylo lepší to dát rovnou do query:
if(mysqli_fetch_assoc(mysqli_query("SELECT * FROM ip_ban WHERE ip_adresa = '".$_SERVER["REMOTE_ADDR"]."' LIMIT 1"))){
  //BAN
  exit;
}
//Stránka
Akali
Profil
Díky všem pánové. Použil jsem ten způsob od radka a uložil to do 2 řádků takže to teď funguje..
mattyZEM
Profil
Podmínka, jestli nění IP zabanována by měla být určitě na každé podstránce, pokud tedy není nutný i komentář, pro toto bych použil asi fileDB. Pokud stránky načítáš v indexu a pak includuješ, je to jen jedna podmínka na všechny podstránky.

bany.txt
123.456.789.012
256.256.256.256
1.2.3.4
127.0.0.1


if(!in_array($_SERVER['REMOTE_ADDR'], explode("\n", file_get_contents("bany.txt")))){
// Načítání stránky podle $_GET[]-u
}else {
@include "stranky/zabanovana.php";
}
Akali
Profil
Já jsem potřeboval kontrolovat bany jenom asi na 3 stránkách..
curdto
Profil
Já používám tento kód a zdá se mi jednodušší než ty uvedené, tak ho sem hodím, kdyby ho někdo potřeboval :-)

$ipadresaktualni = $_SERVER["REMOTE_ADDR"];
$kontrola=mysql_num_rows(mysql_query("select id from blokovane_ip where ip='".$ipadresaktualni."'")); 
if($kontrola==1){
echo("Tvoje IP adresa je blokována.");
exit;
}else{
}
Akali
Profil
Pěkné řešení.. Kdyby si ho sem dal dřív tak ho rád použiju

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0