Link til forrige og næste id

Tags:    php

<< < 12 > >>
Hej udviklere.

Jeg vil gerne have lavet sådan i mine projekter, at man kan trykke videre til det næste, og det forrige, men det kræver den ved hvad id den skal gå til, hvilket den skal finde i databasen.

Men hvordan får man lige lavet sådan et link.?

Har 2 knapper en til næste side, og en til forrige side.
- Forrige side, skal gå til en ID mindre end den nuværende.
- Næste side, skal gå til en ID større end den nuværende.

Og hvis der ikke er flere ID'er når man kommer til den første eller sidste.
- Så skal den ikke blive vist.

Nogen som kan hjælpe mig med det her ??
- Så ville det være konge!



18 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Jo næsten.
Her er lige den nemmeste tilretning af koden:
Fold kodeboks ind/udPHP kode 

Jeg har blot rettet $project_id til $id så det passer med de ting du har rettet inde i funktionen.



Indlæg senest redigeret d. 17.04.2014 16:34 af Bruger #17072
Du kender dit nuværende id: NU_ID som ligger mellem ... < FØR_ID < NU_ID < EFTER_ID < .... (...) er det før og efter.

Så for at finde ID'et før (FØR_ID) skal vi bruge det største ID som er mindre end NU_ID. Ligeledes for at finde EFTER_ID skal vi bruge det mindste ID som er større end NU_ID.

Hvis vi nu fjerner alt større eller lig med NU_ID er vi nede på:
... < FØR_ID. Hvis vi så sorterer efter faldende ID i stedet for vendes rækkefølgende:
FØR_ID, NÆSTE_FØRSTE_ID, ...

Så tager vi blot det første ID der er tilbage. Hvis du vil have de forrige 5 ID'er vælges de første 5 osv..

Så kan vi formulere noget psedo-SQL der gør dette:

Udtræk FØR_ID
Fold kodeboks ind/udSQL kode 


Hvis databasen ikke svarer med 0 rækker er der ikke nogen før og du behøver ikke lavet linket.




Indlæg senest redigeret d. 17.04.2014 14:00 af Bruger #14645
Som Søren skriver så er det ikke specielt kompliceret at lave det du ønsker. Nedenstående kode er blot lavet med mysql_query, men husk at bruge MySQLi eller PDO i stedet, da denne funktion er udfaset.
Fold kodeboks ind/udPHP kode 


Det er blot et pseudo eksempel og der er ikke taget hensyn til nogen forhold omkring generel sikkerhed når du arbejder med databaser og php. Koden er ikke tiltænkt som brug på et reelt website og det skal opdateres kraftigt før det kan bruges.

Men en lille smule skal du jo også selv have lov at lave :)



Sådan her eller:
Fold kodeboks ind/udHTML kode 




Den er der næsten, men lad os lige prøve at indsætte et tal i denne linje for at se hvad der sker:
Fold kodeboks ind/udSQL kode 


Lad os sige at $_GET['id'] er 37, så ville strengen komme til at se sådan her ud:
Fold kodeboks ind/udSQL kode 


Så kan vi se at det udtryk ser ikke helt rigtigt ud: id='37' < id='37', vi vil sådan set bare gerne have: id < '37' (hvor '37' selvfølgelig kan være et andet tal).



Indlæg senest redigeret d. 17.04.2014 14:12 af Bruger #14645
Hvordan gør vi så det ??
- Jeg har ikke lige arbejdet med det her før, så aner ikke lige, hvordan det skal laves.



Hvorfor er der ingen der vil bruge Union? :o)

Fold kodeboks ind/udSQL kode 


Så slipper man også for et SQL kald.
Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 17.04.2014 14:38 af Bruger #10216
Hvorfor er der ingen der vil bruge Union? :o)

Fold kodeboks ind/udSQL kode 


Så slipper man også for et SQL kald.
Fold kodeboks ind/udPHP kode 


Kan du ikke lige uddybe den der lidt mere, da den også ser ud til at være en mulig løsning.



Jeg vidste der var en smart måde at trække begge på samtidig kunne bare ikke huske dem :).

Det Michael gør er sådan set det samme jeg skrev, han vælger bare begge på en gang og sparer et databasekald. Udover at udtrække selve ID'et 'laver' han en ny kolonne til resultatrækkerne (kaldet 'pos') som han giver en streng, enten 'Prev' eller 'Next' så man ved hvilken ID der er hvad. Man kunne selvfølgelig bare sammenligne talværdierne men det her er mere praktisk (og læsbart IMO).

Hvis det nuværende id f.eks. ar 42 kan det er det første delresultat måske:

Fold kodeboks ind/udKode 


Det andet måske:

Fold kodeboks ind/udKode 


Union ligger dem sammen til en tabel:

Fold kodeboks ind/udKode 


$row['pos'] er så enten 'Prev' eller 'Next', og $row['IdField'] er enten 41 eller 44, i det her eksempel.

Men for at komme tilbage til fejlet i dit udtryk:

Fold kodeboks ind/udSQL kode 

Gav noget lignende: id='X' < id='X' hvor X er det nuværende id.
Men vi vil have: id < 'X'
Så vi går tilbage retter i WHERE-udtrykket:
Fold kodeboks ind/udSQL kode 


Når den så er rettet kan du lave den "modsatte" sql-query, og så sætte dem sammen til en query som Michael har vist.



Indlæg senest redigeret d. 17.04.2014 14:54 af Bruger #14645
Okay, men hvordan kommer jeg lige videre.
- Jeg har prøvet en masse, fra andre steder på nettet.

Men synes ikke rigtig noget af det virker.
- Så hvis en eller anden kunne lave et færdigt for mig, ville det være perfekt.

Brug evt det her:

Fold kodeboks ind/udHTML kode 




<< < 12 > >>
t