Autor Zpráva
svet121
Profil *
Ahoj, chtěl bych se zeptat, jak lze získat poslední číslo v odkazu.
Napřílad

www.neco.cz/neco-11 - získat číslo 11
zároveň při jiné variantě:
www.neco.cz/neco-111 - získat číslo 111

moc dík, jsem amatér :-)
svet121
Profil *
diskuse stará 10 minut, taky se vám na google zobrazuje jako první?

http://www.google.cz/#sclient=psy-ab&hl=cs&site=&source=hp&q=z%C3%ADskat+%C4%8D%C3%ADslo+z+url&pbx=1&oq=z%C3%ADskat+%C4%8D%C3%ADslo+z+url&aq=f&aqi=&aql=1&gs_sm=e&gs_upl=463l3189l0l3622l18l13l0l0l0l0l959l6678l3-4.3.2.3l12l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=44e0a8e70b9ad81c&biw=1366&bih=586
Dav
Profil
pokud by ti stačilo neco.cz/?neco=11
tak ti
$_GET['neco']
vrátí 11
svet121
Profil *
chtěl bych www.neco.cz/neco-1 bez otazníků a rovná se.
__construct
Profil
svet121:
Do .htaccessu si daj:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]

Zobraz si dáta v poľa $_SERVER. Vyber si z nejakú položku — napr. QUERY_STRING a pomocou regulárneho výrazu si vytiahni to číslo.

diskuse stará 10 minut, taky se vám na google zobrazuje jako první?
Áno — a prečo porušuješ pravidlá ?
↓Prečítaj si ten odkaz.
svet121
Profil *
Jak to porušuju pravidla?
svet121
Profil *
_connstruct: tak pravidla jsem porušit nechtěl, jen si myslím, že být první v googlu za 10 minut je zajímavé
svet121
Profil *
Našel jsem toto:
$_SERVER['REQUEST_URI']
Joker
Profil
__construct:
Možná opravdu nechtěl porušit pravidla, jen mu přišlo zvláštní, že ta diskuse je po 10 minutách první v Google.

Holt Google to tu má rád ;-)

svet121:
Přesto, není slušné posílat více příspěvků za sebou. Tohle je diskuse a ne chat, takže nejdřív si rozmyslet o čem příspěvek bude a potom psát.

Jestli to potřebuje ta samotná stránka na serveru, tak předpokládám že ta adresa vede na nějaký přepis (mod_rewrite), který to uloží do GET proměnné, kterou si pak stačí přečíst.

Jestli to je jen adresa třeba nějakého odkazu (nebo obecně prostě nějaký text), bude to chtít trochu rozvést, jak se vlastně pozná to číslo.
Číslo za poslední pomlčkou by šlo získat poměrně jednoduše přes strpos + substr
Str4wberry
Profil
Také můžeš funkcí strrpos najít poslední spojovník a tuto posici použít pro funkci substr k získání posledního čísla za spojovníkem.

Pokud se jedná o vlastní adresy, tak když změníš formát na www.neco.cz/1-neco, stačí na 1-neco použít intval.
svet121
Profil *
Substr nemůžu, protože číslo může být 2 místné nebo 8 místné.
svet121
Profil *
A pokud použiju toto: $_SERVER['QUERY_STRING'];, pak je výsledek id=333.php
svet121
Profil *
Vyřešil jsem to takto:

$cislo = $_SERVER['REQUEST_URI'];

echo $cislo['9'] . $cislo['10'] . $cislo['11'] . $cislo['12'];

$cislo má vždy stejnou cestu. Pak jsem vytvořil pole. Když je pole neexistující, tak nevrátí nic.

Kontrola

$p = $cislo['9'] . $cislo['10'] . $cislo['11'] . $cislo['12'];

if ($p == 371) { echo 'ano'; }
__construct
Profil
svet121:
Stačí použiť ten .htaccess[#5] a v index.php toto:
preg_match("/\d+/",$_SERVER["QUERY_STRING"],$zhody);
var_export($zhody);
svet121
Profil *
vrací se mi toto: array ( 0 => '372', )Array
svet121
Profil *
Už to je: takže:

.htaccess
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]

index.php
preg_match("/\d+/",$_SERVER["QUERY_STRING"],$zhody);
echo $zhody['0'];

tak nějak...
Str4wberry
Profil
svet121: „Substr nemůžu, protože číslo může být 2 místné nebo 8 místné.

Není pravda.

Řešení, které jsi uvedl, zřejmě nebude fungovat, až někoho napadne umístit číslo do adresy i někam jinam než za poslední spojovník. Proto bych volil již zmíněné:
$adresa = 'www.neco.cz/neco-se-spojovniky-a-cislem2-1141511';
echo substr($adresa, strrpos($adresa, '-') + 1); // 1141511
svet121
Profil *
Str4wberry: moc dík za úplnou odpověď k ménu požadavku. Použiju i tvou volbu. Každopádně je teď web tvořený, aby v url bylo jen jedno číslo a pokud tam někdo něco vloži, tak je to samé jako by místo www.neco.cz nepsal www.necco.cz... to už je jeho chyba. Do adresy se nic nevpisuje. Stejně jako toto fórum http://diskuse.jakpsatweb.cz/?action=vthread&forum=9&topic=131793, rozhodně nepřepíšu 131793 za číslo jiné.
svet121
Profil *
Jinak nevím jak získat celou adresu i s www, zatím jen /bez domény a nebo kontrétní url k danému listu.
Petr__
Profil *
svet121:
Jinak nevím jak získat celou adresu i s www, zatím jen /bez domény a nebo kontrétní url k danému listu.
Tak se podívek co obsahují jednotlivé prvky pole $_SERVER:
print_r($_SERVER);

Minimálně 2 z nich si už dříve použil. Poskládat z nich celou URL by neměl být problém.
dalsivec
Profil *
print_r($_SERVER); - to je hustý, to vypíše vše co se dá. Jsem dneska nějak zmoudřel :-), dík Petr___
Davex
Profil
dalsivec:
Nepoužívej prosím víc přezdívek. Ostatní neví, že jsi zároveň svet121.
dalsivec
Profil *
Dobře, dnes jsem se taky naučil pravidla a slušné chování na diskuse.jakpsatweb.cz. Myslel jsem, že nick je nepodstatný. Má nová přezdívka tedy bude "nietzsche".
Str4wberry
Profil
Myslel jsem to jinak, jde mi o to, že může dost reálně nastat situace, kdy bude příhodné mít číslici i ve slugu, potom je tedy správné řešení brát v úvahu číslo za posledním spojovníkem a ne obecně první číslo.


Co se týče tvé interakce s touto diskusí, doporučil bych ještě registraci (pro možnost upravovat své příspěvky), nebo se před odesláním zamyslet, zda jsi napsal všechno, abys nám sem neposílal dvojnásobné či dokonce trojnásobné příspěvky.
Ugo
Profil
jenom bych doplnil, že řešení se substr je mnohem rychlejší, co sem testoval tak mi vychází jednoduchý pravidlo, když můžeš vyhni se reguláru a dělej se stringem :-)

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