Gå til innhold

Anbefalte innlegg

Hei.

Jeg jobber med og lage en nettside. Men jeg har noen problemer med søkefunksjonen. Jeg har kommet så langt at jeg får resultater. Problemet er at søkresultatene blir alt for lange. (Den viser hele innlegget). Så jeg vill prøve og lage noe ala google's søk bare på nettisden. Med forkortede innlegg i søket.

 

Hvis dere også kan hjelpe meg med hvordan jeg kan legge søkene i side (<forje 1 2 3 4 5 neste>) Hadde dette vært fint.

 

Håper noen har svar på dette.

 

Jeg vet at det er mye som fortsatt mangler. :p

search.php

Endret av adre
Lenke til kommentar
Videoannonse
Annonse

For å korte ned søkeresultatet (hvis jeg forstår deg riktig), kan du bruke noe alá LEFT(post, 50) i spørringen din. Da vises kun de 50 første tegnene i artiklene på resultatsiden din. Hva mener du med google-søk?

 

Til det andre spørsmålet ditt, så les deg opp på paginering. Google det :)

 

Ja det er alltid noe som mangler. For sikkerhetsskyld bør du kjøre mysql_real_escape_string() på $searchw.

Endret av MikkelRev
Lenke til kommentar
  • 4 uker senere...

php.net/substr:

//  L:24
echo substr($row ['post'],0,155);

Dette vil resultere i at kun de første 155 tegna (inkl. mellomrom, punktum etc.) vil bli vist i resultatet...

Blir ikke det å hoppe over bekken for å hente vann når du kan bruke LEFT() i spørringen direkte?
  • Liker 1
Lenke til kommentar

php.net/substr:

//  L:24
echo substr($row ['post'],0,155);

Dette vil resultere i at kun de første 155 tegna (inkl. mellomrom, punktum etc.) vil bli vist i resultatet...

Blir ikke det å hoppe over bekken for å hente vann når du kan bruke LEFT() i spørringen direkte?

Jo, i tillegg blir det å kreve mer ressurser da det betyr at

1: SQL spørringen må hente ut hele teksten, noe som kan bety lesing av flere datablocks og flere IO-operasjoner

2: Hele tekst-strengen må sendes til PHP-serveren

3: PHP må lagre hele strengen i minne.

 

Med andre ord bruker det mer tid og ressurser på å gjøre det samme. Så ville helt klart gått for å bruke metoden din.

Lenke til kommentar

sant det, men kom med det som et alternativ siden LEFT() begrenser hva som sendes tilbake fra databasen mens substr() manipulerer resultatet i etterkant så begge deler er tilgjenglig om nødvendig...

 

Men akkurat i dette tilfellet ville jeg gått for LEFT()

Lenke til kommentar

php.net/substr:

//  L:24
echo substr($row ['post'],0,155);

Dette vil resultere i at kun de første 155 tegna (inkl. mellomrom, punktum etc.) vil bli vist i resultatet...

Blir ikke det å hoppe over bekken for å hente vann når du kan bruke LEFT() i spørringen direkte?

Jo, i tillegg blir det å kreve mer ressurser da det betyr at

1: SQL spørringen må hente ut hele teksten, noe som kan bety lesing av flere datablocks og flere IO-operasjoner

2: Hele tekst-strengen må sendes til PHP-serveren

3: PHP må lagre hele strengen i minne.

 

Med andre ord bruker det mer tid og ressurser på å gjøre det samme. Så ville helt klart gått for å bruke metoden din.

… pluss at med tanke på all direkte latskapen som flyter rundt Unicode og UTF-8, er det langt større sjanse for at LEFT er multibyte-aware og ikke bryter av midt i et multibyte-tegn. Substr med familie vil veldig enkelt kunne gjøre det så lenge man bare teller bytes (noe «alle» gjør).

Lenke til kommentar

Det jeg mener er at en tekststreng med UTF-8-enkoding kan ha tegn som fordeler seg over flere byte-er. Typiske eksempler på dette er æ, ø og å, hvor f.eks. å er enkodet som 0xC3 0xA5. Hvis man f.eks har 'testå-abc' og ønsker bare de 4 første tegnene får man 'test0xC3' (0xC3 illusterer her en enkeltbyte) hvilket ikke er en gyldig UTF-8-streng og derfor vises som 'test�' (det siste tegnet er U+FFFD som er et erstatningstegn for gyldige kodepunkter. Det ser normalt sett ut som en svart diamant med et hvit spørsmålstegn inni). Det man i stedet ønsket seg er 'testå'.

 

For å få det trenger man noe som veit hva UTF-8 er, og det har en standard installasjon av PHP ingen som helst anelse om. Man kan bruke mbstring, men det er sist jeg sjekket en implementasjon med enkelte særs grove feil, dog allikevel den best og mest utbredte. Har man derimot en database er det betraktelig mye større sjanse for at den veit hva UTF-8 er og LEFT vil dermed helt automatisk vite hvor man faktisk skal bryte av.

 

Et mer komplisert eksempel:

echo substr('Iñtërnâtiônàlizætiøn', 0, 12);

gir 'Iñtërnâti'. Det er gyldig UTF-8, men er ikke 'Iñtërnâtiônà' som er det man forventer.

 

Redigering: Jeg ser ut fra mailen som ble sendt ut ifm. innlegget ditt at du mener å vs. & aring;. Mitt svar til det er at HTML-entiteter er en styggdom man aldri bør bruke (XML-entiteter er noe helt annet).

Endret av Ernie
  • Liker 1
Lenke til kommentar

Jeg har ikke vert borte i noe problemer rundt å bruke substr(), men igjen så har det vert svært sjeldent at tegn som "ñëâôà" har forekommet hos meg da.

Så alikevel viktig å ta høyde for. Nyttig info å ta med seg videre...

Lenke til kommentar
  • 2 uker senere...

Ja, så det :) Jeg tenkte på selve innlegget hans. Siden din er full av sikkerhetshull! Greit å komme med noen tips om hva han kan gjøre.

 

Men som du sier, virker ikke som trådstarter leser noe av det som blir skrevet!

Lenke til kommentar
  • 2 måneder senere...

Jeg mistet nettet når jeg var på ferie. Så glemte jeg at jeg hadde postet dette inlegget. Sorry :blush:

Men jeg er helt ny i PHP så jeg kjenner ikke noe om sikkerhet. Så ønsker alle sikkerhets tips.

 

Men hvor og hvorden bruker jeg LEFT()???

Endret av adre
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...