[ Lord_Nenad @ 23.12.2009. 10:43 ] @
PozZ

Zna li neko kako se moze proveriti koji je domen u pitanju u zadatoj url od mogucih domena koji se nalaze u bazi podataka.

Npr.
url: http://www.elitesecurity.org/p...354353535436?nesto=nesto+nesto

Podaci u bazi:

1 http://*.elitesecurity.org/*/*
2 http://*.elitesecurity.com/*
3 http://www.elitesecurity.net/*
4 http://*.google.*/*
5 http://*.domen.com/*



Ja izdvojim domen iz url, pretrazim bazu i svedem na 10tak odgovarajucih,
ali problem nastaje kod provere koji od njih u potpunosti odgovara.

Da li se o ovom slucaju treba koristiti preg_match(url, podatak_u_bazi) ili nesto drugo?
Pokusao sam sa preg_match ali stalno prijavljuje gresku da uneseni podaci nisu odgovarajuci...

Jel moze neko napisati kako se pravilno trebaju obraditi/napisati podaci za preg_match ili napisati neki drugi nacin za ovu proveru?


Hvala...
[ vatri @ 23.12.2009. 12:39 ] @
A zasto cuvas u bazi tako: http://*.elitesecurity.org/*/*, zar nije lakse samo elitesecurity.org i kasnije samo provjeriti sa preg_match() ili strpos()? Jel se da to prepravit ili mora ovako kao sto je sad?
[ batika @ 23.12.2009. 12:55 ] @
Ako cuvas u bazi ovako kako si napisao, mozes da uradis sledecu stvar:

Radis sa regularnim izrazima. E sad.

* zamenis sa .+ - mozda ces trebati da dodas ? da ne bi bio alav

Dakle regex bi izgledao ovako:

~http://.+\.elitesecurity.org/.+/.+~ - mozdra treba nesto escape-ovati napamet sam pisao i modza treba upitnik

i radis naredbu
Code:

if (preg_match(REGEX, URL) == 1)
{
    // to je taj domen
}
else
{
  // nije taj domen
}


[ Lord_Nenad @ 23.12.2009. 13:08 ] @
@vatri
Mora bas ovako kao sto sam napisao... Da nema toga moglo bi samo LIKE u mysql query-ju... Ali mora ovako...

@phpandjelko
E bas to sto treba da se uradi pre te IF ne znam lepo da uradim... :/
Zbog toga izbaci gresku sa preg_match... Valjda mu smetaju "/"...

A jel moze to bez napamet, da lepo napises? :) :) :) Ako nije problem... :)
[ batika @ 23.12.2009. 13:35 ] @
Pozdrav

evo ovako

Code:



// za ovaj tvoj red iz baze pisem regex   http://*.elitesecurity.org/*

// ovo je regularni izraz
$regex = "~http://.+\.elitesecurity\.org/.+~";

// ovo je url koji proveravamo
$url = 'http://www.elitesecurity.org/p...354353535436?nesto=nesto+nesto';

// ovo je provera
if (preg_match($regex, $url) == 1)
{
    echo 'OK';    
}
else
{
    echo 'NIJE OK';    
}




iz ovog regularnog izraza zakljuci kako se pise, ali moras potraziti tutorijale na netu.
Sa njima mozes svasta da radis...

Pozdrav
[ Man-Wolf @ 23.12.2009. 19:45 ] @
Mislim da ti je lakse da ubacis Regexp. u upit, nego da proveravas sve rezultate iz baze kroz PHP :-)

Hint:

http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html
[ Aleksandar Ružičić @ 23.12.2009. 21:49 ] @
Code:

function check_url($url, $pattern) {
  return !!preg_match('`' . str_replace('\\*', '.+?', preg_quote($pattern, '`')) . '`i', $pattern);
}


if (check_url('http://www.elitesecurity.org/p...354353535436?nesto=nesto+nesto', 'http://*.elitesecurity.org/*')) {
  // OK
} else {
  // ERROR
}


nisam proverio, ali bi trebalo da radi...
[ Nikola Poša @ 23.12.2009. 22:04 ] @
Ako se porede samo domeni, zar nije nekako najsigurnije da se to odradi sa parse_url(), ovako nešto:
Code:
if (parse_url('http://www.elitesecurity.org/p...354353535436?nesto=nesto+nesto', PHP_URL_HOST) == parse_url('http://www.elitesecurity.org', PHP_URL_HOST)) {
    echo 'Oba url-a pripadaju istom domenu.';
}
else {
    echo 'Url-ovi su sa razlicitih domena.';
}

Mada, parse_url() nekad zna da vrati neočekivane rezultate za nestandardne URL-ove, pa ako hoćeš sigurnu stvar, koristi neku gotovu klasu specijalizovanu za tu namenu, npr. Zend_Uri.