Avatar billede tif12345 Nybegynder
08. november 2005 - 19:59 Der er 8 kommentarer og
1 løsning

Smart omskrivning af url - kan det lade sig gøre?

Jeg har følgende url som jeg gerne vil have omskrivet (via mod_rewrite). Jeg er ikke sikker på at dette kan lade sig gøre, så spørgsmålet går vel også lidt på det.

urls'ne viser 3 forskellige hints til titel "doom4"

urls:

viewtitle.php?platform=ps2&title=doom4&type=hints&id=23405

viewtitle.php?platform=ps2&title=doom4&type=hints&id=22788

viewtitle.php?platform=ps2&title=doom4&type=hints&id=13120

Jeg ønsker at omskrive disse urls så de ikke fylder så meget. Mit problem ligger især i at jeg ikke vil have de lange id tal med i omskrivningen, men derimod omskrive id tallene til at de definerers på følgende måde:

www.domæne.com/ps2/doom4/hints-1.html - har nummer 1 fordi det er det første (altså laveste id) hint der er tilføjet.- Id "13120"
www.domæne.com/ps2/doom4/hints-2.html - Id "22788"
www.domæne.com/ps2/doom4/hints-3.html - Id "23405"

Jeg har intet problem med at omskrive urls'ne hvis der bruges id , feks;

www.domæne.com/ps2/doom4/hints-13120.html
www.domæne.com/ps2/doom4/hints-22788.html
www.domæne.com/ps2/doom4/hints-23405.html

MEN jeg ønsker den øverste løsning (hvis den kan lade sig gøre)..

På forhånd tak - håber at min uddybning af problemet kan forstås, eller må jeg jo prøve at forklare nærmere :)
Avatar billede bufferzone Praktikant
08. november 2005 - 20:03 #1
prøv at kikke på denne artikel der giver nogle muligheder, dog ikke detaljeret beskrevet

http://www.eksperten.dk/artikler/136
Avatar billede pidgeot Nybegynder
08. november 2005 - 20:06 #2
For den nederste løsning burde dette kunne gøre det:

RewriteEngine on
RewriteRule ^/(.*)/(.*)/(.*)-(.*).html /viewtitle.php?platform=$1&title=$2&type=$3&id=$4

Den første KAN godt lade sig gøre, men den vil kræve at du bygger noget kontrol ind i viewtitle.php der finder ud af hvilket id der er det rigtige. Udover dette er det dog det samme
Avatar billede tif12345 Nybegynder
08. november 2005 - 20:15 #3
bufferzone > tak, men gav mig ikke nogen umiddelbart løsning..

pidgeot > Jeg har ingen problemer med nederste løsning, det er nu mere den første løsning jeg er interesseret i :) Men du siger at det godt kan lade sig gøre, kan du eventuelt uddybe hvilken slags kontrol det er du omtaler?
Avatar billede pidgeot Nybegynder
08. november 2005 - 20:26 #4
Den går ud på at du i viewtitle.php foretager et opslag i din database, hvor du finder ud af hvilken post du skal have fat i.

Dette kunne gøres med en query som følgende (hvis vi bruger dit eksempel):

SELECT * FROM tabel WHERE platform='ps2' AND title='doom4' AND type='hints' ORDER BY id ASC LIMIT 2, 1

eller mere generelt:

SELECT * FROM tabel WHERE platform=$platform AND title=$title AND type=$type ORDER BY id ASC LIMIT ($id-1), 1

Denne foretages så i stedet for den query du normalt bruger til at hente data ud. (Husk dog at tilpasse til dine data, og kontroller for fejl hvis brugeren prøver at skrive et negativt id...)

Vær opmærksom på at du i din query skal trække X fra $id, hvor X er den laveste værdi $id må have - i dette tilfælde 1.
Avatar billede tif12345 Nybegynder
08. november 2005 - 20:33 #5
Ok, det lyder egentligt smart nok. $id er vel antallet af fundne hints. Kan jeg få antallet af fundne hints i samme sql sætning, så jeg slipper for at lave en query der først finder antallet af hints?
Avatar billede pidgeot Nybegynder
08. november 2005 - 20:39 #6
Du behøver ikke checke på antallet af hints så længe du kontrollerer at du får en række tilbage. Skulle der komme til at stå et id der er for stort, får du blot et tomt sæt, og hvis det er for småt (dvs. 0 eller under), vil MySQL smide en fejl.

Hvis du mente at det var til en optælling senere på siden, så vil det være pænest/mest praktisk at bruge en seperat query, da du ikke vil få et resultat hvis nu der er indtastet noget ugyldigt. Men ellers ville det kunne gøres sådan her:

SELECT (query ovenfor) UNION SELECT COUNT(*) FROM tabel WHERE (blablabla)

hvor den sidste række så vil indeholde antallet af fundne hints i $row[0] (her skal du så bruge mysql_fetch_array, og ikke mysql_fetch_assoc).
Avatar billede tif12345 Nybegynder
08. november 2005 - 21:33 #7
Ok, jeg prøver lige at undersøge og teste :) ved ikke om jeg når det hele idag, men stol på at jeg vender tilbage ;)

Tak for hjælpen, so far..
Avatar billede tif12345 Nybegynder
10. november 2005 - 19:02 #8
Hey, fik skidtet til at virke som jeg ønskede, bla ved hjælp af den funktion som du skrev.. Smid nogle points... og tak for hjælpen :)
Avatar billede pidgeot Nybegynder
10. november 2005 - 20:21 #9
Værsgo :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester