Convert id til name

Tags:    php

Hej udviklere.

Jeg sidder og vil gerne ændre kunde/?id=30 til f.eks. kunde/kundens-navn.

Men lige hvordan man gør det, har jeg ikke nogen idé om selv.

Altså jeg laver ikke nogen mappe til hver projekt, men de bliver lavet på en enkelt side index.php, og får så et ID, men vil rigtig gerne have det til at være NAME istedet for ID.

Er det muligt, eller findes der en smart og hurtig løsning på det.?



8 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
=name=namet_her?
istedet for $_GET['id'] så tjek $_GET med name/navn?.
navn = '". $_GET['navn'] ."'

Eks.



Det har jeg prøvet, og der går bare ged i den.

Prøver lige at beskriver det på en mere uddybende måde.

Jeg har en reference side referencer, der er en liste over projekter.
Trykker jeg på et af dem går den ind på referencer/kunde/index.php?id=30
Men vil istedet have den til at gå ind på referencer/kunde/projekt-navn.

Den må gerne finde siden via ID, men skal bare ændre adressen til ovennævnte.


Det er alt sammen kodet i php, så det er ikke bare at gå ind og ændre permalink, som man kan i wordpress.

Her er koden, hvis den er nødvendig, for linket til projektet, og for siden den lander på:

Linket:
Fold kodeboks ind/udPHP kode 


Siden den lander på:
Fold kodeboks ind/udPHP kode 




Opret en .htaccess fil og brug følgende regel til at omskrive URL'en.

Fold kodeboks ind/udKode 






Indlæg senest redigeret d. 18.04.2014 14:45 af Bruger #18836
Jeg er stadig lidt i tvivl.
- hvorfor står der 30$ og hvad skal jeg skrive istedet for "projekt-navn", kan jo ikke skrive et navn til alle projekterne, de har jo hvert deres navn.

Men fedt, at det bare er det jeg skal bruge, men mangler lidt uddybende information ;)
Mener bare, for som du har skrevet, så virker det nemlig ikke.



Indlæg senest redigeret d. 18.04.2014 14:13 af Bruger #16906
Jeg bruger selv denne til at oprette "rene" URL'er med:
Fold kodeboks ind/udKode 

Det er måden jeg gør det på og så har jeg en række funktioner der bruger denne information til at hente data med. Hele hemligheden er at du i din URL skriver http://example.com/kunder/microsoft og dette omdannes så til $_GET['q'] = 'kunder/microsoft'. Denne laver du et opslag på i din database i tabellen der hører til dine kunder. Her finder du kundens ID baseret på deres navn. Herfra kan du så hente alle projekter der hører til kunden.
Du kan også skrive projekter/microsoft/windows-live-messenger og så hente id til projektet windows-live-messenger og derfra hente indhold.

Jeg gør følgende i mit system. http://example.com/my-custom-page-url og denne søger jeg efter i min tabel med indhold. Her matcher den til f.eks. page/135. Denne skiller jeg ad med php funktionen explode og kan derfra hente alle andre ting der har med den pågældende side at gøre.
Jeg bruger som udgangspunkt den .htaccess der følger med herfra: http://www.initializr.com/
Den har mange rigtige gode indstilinger og er fyldt med forklaringer af hvad de forskellige ting gør.



Indlæg senest redigeret d. 18.04.2014 14:28 af Bruger #17072
Beklager, men .htaccess er slet ikke min side, det eneste jeg har kunne lave med det var 404 siden., simpelt ja.

Så hva siger du helt præcis, jeg vil rigtig gerne have en mere uddybende forklaring, gerne med lidt kode osv., som passer til mine sider.

Jeg skriver igen:


Trykker jeg på et af dem går den ind på referencer/kunde/index.php?id=30
Men vil istedet have den til at gå ind på referencer/kunde/projekt-navn.

30 = $id for siden, men skal laves om til projekt-navn
projekt-navn = hvad som helst, f.eks. Microsoft, osv osv.
projekt navnet skal bare passe til id'en, og i url'en skal den skrive det istedet for index.php?id=30($id)

Jeg kan ikke rigtig forklare det meget bedre.

Ved jeg måske har misforstået de her opslag jeg har fået tilbage, men jeg kan ikke lige helt finde rundt i, hvad jeg skal skrive, i forhold til, hvad der bliver skrevet fra jer andre.



.htaccess er ikke særlig svært så længe det kun omhandler RewriteEngine. Det som .htaccess gør er at den tilretter serverindstillingerne for en række filer og mapper.

Lad os antage at du gør brug af mit eksempel og så gør vi det helt simpelt.
http://example.com/referencer/index.php?id=30 er den adresse som du gerne vil frem til
Dette bygger vi om så det herefter bliver http://example.com/referencer/windows-live-messenger
Når du har styr på den simple metode så kan du begynde at køre med flere dimensioner så du kan bruge http://example.com/referencer/microsoft/windows-live-messenger

Vi starter med at oprette vores .htaccess fil i roden af vores website. Filen skal indeholde følgende kode:
Fold kodeboks ind/udKode 

Nu har vi defineret en regel for hvordan vi gerne vil have vores URL-adresser.
Det vi så gør er at vi laver en PHP-funktion der tager sig af at "oversætte" adressen.
Da mysql_query og de andre mysql funktioner i PHP er udfaset så bruger jeg her PDO i stedet. Resultatet vil i sidste ende være det samme
Fold kodeboks ind/udPHP kode 

Nu er mit eksempel meget simpelt og du får white-screen-of-death hvis der er noget som ikke passer sammen. For at undgå dette skal du lave error-handling vha. try-catch statements.

Koden er skrevet ud af hovedet uden nogen form for syntaks-tjek så det kan godt være at der er et par småfejl hist og her, men hvis der er nogen så burde de være nemme at finde.

I realiteten skal der noget mere til for at adresserne kommer til fungere, men som udgangspunkt kan du starte med dette.



Indlæg senest redigeret d. 18.04.2014 17:21 af Bruger #17072
Hvis du alligevel trækker kundens navn fra din database, kan du vel bare lave et "shortlink" til kundens navn såfremt store bogstaver, øæå og eksempelvis bindestreger og mellemrum bliver ændret.

Nedenstående funktion bruger du når du opretter kunden i kartoteket og indsætter resultatet i en ny række kaldet .. eksempelvis kundeurl.
Fold kodeboks ind/udPHP kode 

F.eks

id: 2
kunde: Hans Jørgen Hansen
kundeurl: hans-joergen-hansen (efter kørsel af ovenstående funktion)

= referencer/kunde/index.php?id=2&kundeurl=hans-joergen-hansen

Så laver du naturligvis et mod_rewrite som matcher ovenstående til id=? og kundeurl=?

Fold kodeboks ind/udKode 

Bliver til..

referencer/kunde/2-hans-joergen-hansen

Grunden til at jeg tager ID med, er fordi du formodentligt benytter auto increment og tænk nu hvis du får 2 kunder som hedder det samme?

Ligesom her på UDV .. Ville være noget skidt hvis ID ikke var med i request, for 2 tråde kan jo sagtens have samme navn..

Nu ved jeg af gode grunde ikke hvad du har gang i, men et ID på kunden kunne jo sagtens være et kundenummer - og med autoID behøver man jo nødvendigvis ikke starte ved 1.

Håber du kan følge ovenstående, min forklaring har det med at blive ret rodet.. Ellers spørg bare.

Edit: Har forsøgt at skære det så meget ud i pap, som jeg nu kan..


En lille tilføjelse, bedre send end aldrig.

Hvis du tilføjer igennem $_POST .. Så benytter du bare funktionen niceurl foran.

Eksempel.

$kunde = $_POST['kundenavn'];
$kundeurl = niceurl($_POST['kundenavn']);

Det giver jo, som jeg beskriver ovenover;

Fold kodeboks ind/udPHP kode 

Håber du kan hitte ud af det, ellers spørg bare. Man lærer jo ikke særlig meget hvis man aldrig spørger om det man er i tvivl om..

Sådan har jeg bla. lært meget af det.

Udvikleren: Der er ikke meget fornuft i at ændre et flere dages gammelt indlæg, bare fordi den står som sidst i spørgsmålet så må jeg ikke lave et nyt indlæg. Det giver ingen meningen at tråden ikke må komme op som "ny"?
Lav da hellere noget, hvis nu indlægget er x dage gammelt så må man gerne skrive et nyt?




Indlæg senest redigeret d. 22.04.2014 20:04 af Bruger #17610
t