Kde je chyba ???????

Pokusil jsem se udělat IPzákaz ale ono to nefahčí :o(,všechno sem zkontroloval ale nevim kde je chyba.


Tady kód:

<?
$ip1 = $REMOTE_ADDR; //IP adresa náv?těvníka
$ip2 = "i.p.a.d.r.e.s.a"; //Zakázaná IP adresa
$ip3 = "$ip1=$ip2"; //$ip1 a $ip2 se schodují

if($ip3)
{
echo("<body background='#4E6CAA'><center><b>
Nesmíte prohlí?et tuto stránku!!</b></center>
</body>");
} //Napí?e se kdy? se schodují proměnné $ip1 a $ip2

esle:
{
echo("<head><META HTTP-EQUIV='Refresh' CONTENT='0; URL=normalni_index'>
</head>");
} //Přesměrování na normální stránku pokud se $ip1 a $ip2 neschodují
?>

No a tady chyba:

Parse error: parse error in /3w/web2001.cz/p/php/ipzakaz.php3 on line 13

No a toť vše :o)
tak zaprve tam mas spatnou syntaxi napr if($ip3)
syntaxe podminky je
if ( "vyraz" logický operátor(vetsi mensi rovno atd.. "vyraz2"){prikaz jestlize tvrzeni dosahne logicke pravdy}else{ nebo prikazy, ktere se provedou jestlize vyrazy v podmince nabydou hodnoty logicke nepravdy}

priklad

$a=2

if ( $a >=0) { echo " cislo je kladne nebo nula";}else{ echo "cislo je zporne"}

tvuj problem bych resil pro zacatek tkhle :
<?

$ip1 = "i.p.a.d.r.e.s.a"; //Zakázaná IP adresa
$ip2= "i.p.a.d.r.e.s.a2"; // další zakázaná IP adresa
.... //atd.

if($REMOTE_ADDR == $ip1 || $REMOTE_ADDR == $ip2 ||.... atd. ) // bud je adresa rovna zakazane adr 1 || (nebo) zakazane adr 2
{
echo("<body background='#4E6CAA'><center><b>
Nesmíte prohlí?et tuto stránku!!</b></center>
</body>");
} //Napí?e se kdy? se schodují proměnné $ip1 a $ip2

esle:
{
echo("<head><META HTTP-EQUIV='Refresh' CONTENT='0; URL=normalni_index'>
</head>");
} //Přesměrování na normální stránku pokud se $ip1 a $ip2 neschodují
?>

jestli nevis jak napsat znak "|" tak je to levy alt a na numericke klavesnici hodnota 124


pri vetsim poctu zakazanych ip by se vyplatilo mozna stanovit naopak povolene ip nebo hodnoty zakazanych ip umistit do databaze nebo aspon do pole
ps nevim proc chces zakazovat pristup urcite ip, kdyz vetsina pouziva pripojeni pres telefon a tudiz ma pokazde inou ip
Dalsi chyba, ktery jsem si vsimnul ...

$ip3 = "$ip1=$ip2"; //$ip1 a $ip2 se schodují

if($ip3) ...

... co to jako ma byt ??? ... $ip3 je po takovym prirazeni textovy retezec ... a pokud ho pouzijes v podmince, tak bude nejspis (je-li neprazdny) vyhodnocen jako TRUE ... tj. ... ANO!!! - podminka splnena.

Nejspis si chtel napsat neco takovyho ...

$ip3 = ($ip1==$ip2); //$ip1 a $ip2 se schodují

if($ip3) {
...
} else {
...
}

Dulezity jsou ty dve rovnitka '==' ... '=' totiz neni porovnani, ale prirazeni!!!

Dal ta konstrukce if je taky volaka cudna :)

Pokud jde o testovani vice IP, tak asi nejlepsi je pouzit funkci strstr() - hledani retezce v retezci ... nebo pro dumyslnejsi podminky ereg(), ale vzhledem ke kodu, ktery si napsal, bych ti to ZATIM nedoporucoval :)

$zakazane_ip = "zakazama.ip.addr.1 | zakazama.ip.addr.2 | zakazama.ip.addr.3 | ... ";

if(strstr($zakazane_ip,$REMOTE_ADDR)) {

... ZAKAZANA ...

} else {

... ne-zakazaba ...

}
radku mas pravdu
toto je dalsi reseni... i kdyz by se to dalo vyresit dalsimi deseti zpusoby

i kdyz nevim k cemu mu to bude, kdyz vetsina lidi pouziva jeste telefon
( i kdyz novy spusob uctovani poplatku se mi vubec nelibi) pro to bych si u kazdeho uzivatele vytvoril cookies s jedinecnim identifikatorem a pokud mne tento user nastve tak zakazat pristup
if ($ip) je taky spravny zapis s tim rozdilem ze bude vzdy TRUE ...
> if ($ip) je taky spravny zapis s tim rozdilem ze bude vzdy TRUE ...

Nevim, jaks to presne myslel, ale pro upresneni ...

pokud $ip = false, tak vysledek podminky bude FALSE!!! :o) Stejne tak zafungujou standardni konverze na bool.

When converting to boolean, the following values are considered FALSE:

the boolean FALSE
the integer 0 (zero)
the float 0.0 (zero)
the empty string, and the string "0"
an array with zero elements
an object with zero elements
the special type NULL (including unset variables)

Radek