Oprettet man. d. 22. februar 2010 kl. 18:22:47

discotk
discotk (10.732 point. Point ude: 0)

mod_rewrite, doorway hallway og url simplificering

Hej eksperter!

Jeg har siddet og læst en masse artikler om hvordan man søge optimere ordentligt og doorway/hallway kommer op igen og igen..

Derfor er jeg nu gået igang med at ændre mine links så det bliver simplificeret.

Jeg har startet med at ændre min .htaccess fil så jeg nu kan skrive:

domain.com/read/15

istedet for

domain.com/read.php?id=15

Men jeg vil gerne gøre så det bliver til

domain.com/read/navn-paa-id

Det vil altså sige at istedet for at bruge id'et i tabellen, så bruge navnet istedet, i url'en...

Nogen der ved hvordan man gør dette på den rigtige måde?

Skrevet man. d. 22. februar 2010 kl. 20:19:44| #1

danco
danco (11.278 point)
Jeg tillader mig at smide en ubrugelig kommentar udelukkende for at overvåge.
Jeg sidder selv med samme problemstilling.

Skrevet man. d. 22. februar 2010 kl. 21:48:58| #2

Jeg forstår ikke problematikken?
Er det fordi du ikke kan finde ud af at lave domain.com/read.php?id=15 om til domain.com/read.php?name=navn-paa_id?

Skrevet man. d. 22. februar 2010 kl. 22:38:02| #3

exp
exp (44.030 point)
michaelkjeldsen.com
I din tabel laver (finder) du en unik værdi, som du fx kalder "url". Bemærk, at den skal være unik for hver enkelt række i tabellen.

Herefter kalder du den i scriptet (index.php?url=unik-url), og bruger den i sql-udtrækket:
select * from `tabel` where `url` = $unik-url LIMIT 1

And you're up and running.

(Husk at have behørig sikkerhed koblet på, så du ikke risikerer sql-injections)

Skrevet tir. d. 23. februar 2010 kl. 12:41:27| #4

discotk
discotk (10.732 point)
#3, nu skriver du "Bemærk, at den skal være unik for hver enkelt række i tabellen."
- Jeg ved godt hvorfor, men hvordan får jeg den til at auto-generere dette?

EKS: Jeg har to af de samme sider (af en eller anden grund) - Skal jeg så lave en løkke der går alle mine sider igennem i databasen for at se at der er et match, og hvis der er, lave en if/else-funktion, for at den derfor kan kalde siden "side-navn2" eller lign?.

- det ville nemlig være smart hvis jeg bare kunne skrive følgende:

Navn: Side 1
Tekst: Lorem bla bla bla...
-> Submit

og så blev url'en automatisk til "domain.com/read/side-1", uden at man skal side selv og huske hvad man har kaldt sin url førhen.

Skrevet ons. d. 24. februar 2010 kl. 09:21:46| #5

skelboe
skelboe (12.647 point)
www.skelboe.dk
er det så ikke bare noget at lave en

$uniq_url = strtolower( str_replace(' ', '-', $name) );

Det kan godt være du lave en preg_replace og fjerne uønskede karaktere

Skrevet ons. d. 24. februar 2010 kl. 18:01:05| #6

discotk
discotk (10.732 point)
Jo, det var ihvertfald det jeg havde tænkt mig... Men det løser vel ikke mit problem hvis jeg har en side jeg kalder samme navn.

altså...
Side 1 (nr 1) = domain.com/side-1

Side 1 (nr 2) = domain.com/side-1

skal istedet være f.eks...
Side 1 (nr 1) = domain.com/side-1

Side 1 (nr 2) = domain.com/side-1_2

Skrevet ons. d. 24. februar 2010 kl. 18:17:34| #7

skelboe
skelboe (12.647 point)
www.skelboe.dk
Kunne man mån ikke gøre noget ala.

$uniq_url = 'side-1';

// checke om der er andre url der matcher
SELECT COUNT(*) AS url_count FROM table WHERE url REGEXP '$newurl[_0-9]' OR url = $uniq_url;

Jeg er ikke lige helt inde i REGEXP men ovenstående linie skulle gerne tælle hvis "side-1" eksistere, og hvis "side-1_1" osv. eksistere, og så er det bare at lægge til,

Hvis det giver mening

Skrevet ons. d. 24. februar 2010 kl. 18:19:14| #8

skelboe
skelboe (12.647 point)
www.skelboe.dk
REGEXP '$newurl[_0-9]' skal vidst være REGEXP '$newurl[_0-9]+'

Skrevet fre. d. 26. februar 2010 kl. 16:05:35| #9

discotk
discotk (10.732 point)
Undskyld den sene tilbagemelding...

Jeg har kigget lidt på det og har lavet en lille "alpha kode"

<?php
// Bearbejd specielle tegn
function CleanFileName( $Raw ){
    $Raw = trim($Raw);
    $RemoveChars  = array( "([\40])" , "([^a-zæøåÅÀàÁáÂâÃãÄä&#256;&#257;&#258;&#259;&#260;&#261;&#506;&#507;&#508;&#509;&#262;&#263;Çç&#268;&#269;&#264;&#265;&#266;&#267;&#270;&#271;&#272;&#273;ÐðÈèÉé&#282;&#283;ÊêËë&#274;&#275;&#276;&#277;&#280;&#281;&#278;&#279;ƒ&#64258;&#290;&#291;&#284;&#285;&#286;&#287;&#288;&#289;ÌìÍíÎî&#296;&#297;Ïï&#298;&#299;&#300;&#301;&#302;&#303;&#304;&#305;&#306;&#307;&#308;&#309;&#310;&#311;&#312;&#313;&#314;&#315;&#316;&#317;&#318;&#319;&#320;&#321;&#322;&#323;&#324;&#325;&#326;&#327;&#328;Ññ&#329;&#330;&#331;ÒòÓóÔôÕõÖö&#332;&#333;&#334;&#335;&#336;&#337;&#510;&#511;Œœ&#340;&#341;&#342;&#343;&#344;&#345;&#346;&#347;&#350;&#351;Šš&#348;&#349;&#383;ß&#354;&#355;&#356;&#357;&#358;&#359;ÞþÙùÚúÛû&#360;&#361;Üü&#366;&#367;&#362;&#363;&#364;&#365;&#370;&#371;&#368;&#369;&#7808;&#7809;&#7810;&#7811;&#372;&#373;&#7812;&#7813;&#7922;&#7923;Ýý&#374;&#375;Ÿÿ&#377;&#378;Žž&#379;&#380;A-ZÆØÅ0-9-])", "(-{2,})", "/æ|Æ/", "/ø|Ø/", "/å|Å/", "/À|à|Á|á|Â|â|Ã|ã|Ä|ä|&#256;|&#257;|&#258;|&#259;|&#260;|&#261;|&#506;|&#507;|&#508;|&#509;/", "/&#262;|&#263;|Ç|ç|&#268;|&#269;|&#264;|&#265;|&#266;|&#267;/", "/&#270;|&#271;|&#272;|&#273;|Ð|ð/", "/È|è|É|é|&#282;|&#283;|Ê|ê|Ë|ë|&#274;|&#275;|&#276;|&#277;|&#280;|&#281;|&#278;|&#279;/", "/ƒ|&#64258;/", "/&#290;|&#291;|&#284;|&#285;|&#286;|&#287;|&#288;|&#289;/", "/Ì|ì|Í|í|Î|î|&#296;|&#297;|Ï|ï|&#298;|&#299;|&#300;|&#301;|&#302;|&#303;|&#304;|&#305;|&#306;|&#307;/", "/&#308;|&#309;/", "/&#310;|&#311;|&#312;/", "/&#313;|&#314;|&#315;|&#316;|&#317;|&#318;|&#319;|&#320;|&#321;|&#322;/", "/&#323;|&#324;|&#325;|&#326;|&#327;|&#328;|Ñ|ñ|&#329;|&#330;|&#331;/", "/Ò|ò|Ó|ó|Ô|ô|Õ|õ|Ö|ö|&#332;|&#333;|&#334;|&#335;|&#336;|&#337;|&#510;|&#511;|Œ|œ/", "/&#340;|&#341;|&#342;|&#343;|&#344;|&#345;/", "/&#346;|&#347;|&#350;|&#351;|Š|š|&#348;|&#349;|&#383;|ß/", "/&#354;|&#355;|&#356;|&#357;|&#358;|&#359;|Þ|þ/", "/Ù|ù|Ú|ú|Û|û|&#360;|&#361;|Ü|ü|&#366;|&#367;|&#362;|&#363;|&#364;|&#365;|&#370;|&#371;|&#368;|&#369;/", "/&#7808;|&#7809;|&#7810;|&#7811;|&#372;|&#373;|&#7812;|&#7813;/", "/&#7922;|&#7923;|Ý|ý|&#374;|&#375;|Ÿ|ÿ/", "/&#377;|&#378;|Ž|ž|&#379;|&#380;/");
    $ReplaceWith = array("-", "", "-", "ae", "oe", "aa", "a", "c", "d", "e", "f", "g", "i", "j", "k", "l", "n", "o", "r", "s", "t", "u", "w", "y", "z");
    return strtolower(preg_replace($RemoveChars, $ReplaceWith, $Raw));
}

$uniq_url = CleanFileName('!"@#$%&/{([)]=}? abcdefghijklmnopqrstuvwxyzæøå ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ ÀàÁáÂâÃãÄä&#256;&#257;&#258;&#259;&#260;&#261;&#506;&#507;&#508;&#509; &#262;&#263;Çç&#268;&#269;&#264;&#265;&#266;&#267; &#270;&#271;&#272;&#273;Ðð ÈèÉé&#282;&#283;ÊêËë&#274;&#275;&#276;&#277;&#280;&#281;&#278;&#279; ƒ&#64258; &#290;&#291;&#284;&#285;&#286;&#287;&#288;&#289; ÌìÍíÎî&#296;&#297;Ïï&#298;&#299;&#300;&#301;&#302;&#303;&#304;&#305;&#306;&#307; &#308;&#309; &#310;&#311;&#312; &#313;&#314;&#315;&#316;&#317;&#318;&#319;&#320;&#321;&#322; &#323;&#324;&#325;&#326;&#327;&#328;Ññ&#329;&#330;&#331; ÒòÓóÔôÕõÖö&#332;&#333;&#334;&#335;&#336;&#337;&#510;&#511;Œœ &#340;&#341;&#342;&#343;&#344;&#345; &#346;&#347;&#350;&#351;Šš&#348;&#349;&#383;ß &#354;&#355;&#356;&#357;&#358;&#359;Þþ ÙùÚúÛû&#360;&#361;Üü&#366;&#367;&#362;&#363;&#364;&#365;&#370;&#371;&#368;&#369; &#7808;&#7809;&#7810;&#7811;&#372;&#373;&#7812;&#7813; &#7922;&#7923;Ýý&#374;&#375;Ÿÿ &#377;&#378;Žž&#379;&#380;');

// Se om url matcher andre eksisterende
mysql_select_db($database_cms, $cms);
$query_rsUrl = "SELECT COUNT(*) AS url_count FROM sideindhold WHERE url REGEXP '($uniq_url)(_)([0-9]+)' OR url REGEXP '$uniq_url'";
$rsUrl = mysql_query($query_rsUrl, $cms) or die(mysql_error());
$row_rsUrl = mysql_fetch_array($rsUrl);

// Find højeste url
$query_rsUrl_highest = "SELECT * FROM sideindhold WHERE url REGEXP '($uniq_url)(_)([0-9]+)' ORDER BY url DESC LIMIT 1";
$rsUrl_highest = mysql_query($query_rsUrl_highest, $cms) or die(mysql_error());
$row_rsUrl_highest = mysql_fetch_array($rsUrl_highest);

// Hent kun nummeret på siden og læg en til
$uniq_number = trim($row_rsUrl_highest['url'], $uniq_url . "_")+1;
$var = ($row_rsUrl['url_count'] > 0) ? "INSERT INTO tabel url VALUES " . $uniq_url . "_" . $uniq_number:"INSERT INTO tabel url VALUES " . $uniq_url;
echo $var;

mysql_close($cms);
?>


Ændrer selvfølgelig så det passer ind i en form, ved at lave noget ala:

...
  $insertSQL = sprintf("INSERT INTO tabel(url) VALUES (%s)",
...

for at undgå injections

Tak for hjælpen.

exp og skelboe smid et svar

Skrevet fre. d. 26. februar 2010 kl. 16:49:24| #10


Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Brugerliste med link til profil

Oprettet den 26. maj 2012 kl. 14.29
sayn giver 30 point for svar | Giv et svar »

php curl driller

Oprettet den 26. maj 2012 kl. 08.31
PHPnQrd giver 200 point for svar | Giv et svar »

Array i array

Oprettet den 25. maj 2012 kl. 08.32
sebster giver 60 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger