/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
auto-search ud fra post-variabler...
Fra : Christoffer \(Guide\~


Dato : 25-07-06 23:05

Kryptisk overskrift, men måske den lokker nogle kloge hoveder til..

Jeg er ude i at jeg skal lave et søge-system hvor jeg gerne vil give
brugeren mulighed for at markere hvilke emner der skal søges i..
eks.
Der bliver søgt på følgende:<br>
<input type="checkbox" name="check1" value="valgt" checked="checked">
Sourcecodes
<br>
<input type="checkbox" name="check2" value="valgt" checked="checked"> Filer
<br>
<input type="checkbox" name="check3" value="valgt" checked="checked">
Artikler
<br>
<input type="checkbox" name="check4" value="valgt" checked="checked"> Indlæg
<br>
<input type="submit" name="submit" class='submit' value="Søg">

Men da der med tiden vil komme flere emner til vil det blive endnu mere
besværligt end det er nu at få den til at søge på de valgte emner.. Den
eneste løsning jeg ser på problemet pt er en lang og besværlig if/else
sætning i form af hvis check1-til-check3 er taget, eller hvis
check1+check2+check4 er taget og alle mulige kombinationer.. kan det ikke
gøres nemmere?

Har tænkt lidt på hvis jeg nu kaldte check-boksene for tabelnavnene fra
databasen.. ville det hjælpe mig på nogen måde??

Alle råd modtages med kyshånd!



 
 
Bertel Lund Hansen (26-07-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 26-07-06 09:20

Christoffer (Guide) skrev:

> Jeg er ude i at jeg skal lave et søge-system hvor jeg gerne vil give
> brugeren mulighed for at markere hvilke emner der skal søges i..

[Klip]

> Men da der med tiden vil komme flere emner til vil det blive endnu mere
> besværligt end det er nu at få den til at søge på de valgte emner.. Den
> eneste løsning jeg ser på problemet pt er en lang og besværlig if/else
> sætning i form af hvis check1-til-check3 er taget, eller hvis
> check1+check2+check4 er taget og alle mulige kombinationer.. kan det ikke
> gøres nemmere?

Hvad med

if (check1) søg_1();
if (check2) søg_2();
if (check3) søg_3();
osv.

> Har tænkt lidt på hvis jeg nu kaldte check-boksene for tabelnavnene fra
> databasen.. ville det hjælpe mig på nogen måde?

Hvis du har meningsfulde navne, vil det gøre koden mere
overskuelig, men det løser ikke noget kodeproblem. Jeg ville
netop anbefale dig at droppe navnet check1 og kalde det noget med
source i stedet. Så er det nemmere at hitte ud af 2000 linjer
længere nede hvad det har med at gøre.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Christoffer \(Guide\~ (27-07-2006)
Kommentar
Fra : Christoffer \(Guide\~


Dato : 27-07-06 21:56


"Bertel Lund Hansen" <nospamfilius@lundhansen.dk> skrev i en meddelelse
news:44c72573$0$3478$ba624c82@nntp02.dk.telia.net...
> Christoffer (Guide) skrev:
>
> > Jeg er ude i at jeg skal lave et søge-system hvor jeg gerne vil give
> > brugeren mulighed for at markere hvilke emner der skal søges i..
> Hvad med
>
> if (check1) søg_1();
> if (check2) søg_2();
> if (check3) søg_3();
> osv.
Jeg har ladet mig inspirere og er gået igang med noget lignende, men jeg kom
undervejs i tanke om noget jeg fuldstændig havde glemt alt om.. (kommer
længere nede i indlægget)

> > Har tænkt lidt på hvis jeg nu kaldte check-boksene for tabelnavnene fra
> > databasen.. ville det hjælpe mig på nogen måde?
> Hvis du har meningsfulde navne, vil det gøre koden mere
> overskuelig, men det løser ikke noget kodeproblem. Jeg ville
> netop anbefale dig at droppe navnet check1 og kalde det noget med
> source i stedet. Så er det nemmere at hitte ud af 2000 linjer
> længere nede hvad det har med at gøre.
Det bliver selvfølgelig også tilrettet senere hen men nu hvor jeg blot
tilrettelægger koderne ind jeg bruger dem i større stil er det ikke noget
jeg går så meget op..

Mit spørgsmål er når jeg nu har fundet den tekst jeg vil finde er der så en
måde at "highlighte" ordet på, og tage de f.eks 20 omkring liggende ord for
og bag ordet? tænkte først på highlight-string, men det dur så vidt jeg kan
se kun til allerede definerede kode-sprog.



Bertel Lund Hansen (27-07-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 27-07-06 22:13

Christoffer (Guide) skrev:

> Mit spørgsmål er når jeg nu har fundet den tekst jeg vil finde er der så en
> måde at "highlighte" ordet på

CSS:
..highlight {
   color:red;
   background: inherit;
}

HTML:
<span class='highlight'>søgeord</span>

Så skal du bare styre HTML'en med noget PHP og evt. vælge en
anden farve end "red".

> og tage de f.eks 20 omkring liggende ord for og bag ordet?

Det bliver noget komplekst noget fordi man skal tage højde for at
der måske ikke er 20 ord. Desuden er det standard på f.eks.
Google at man kun highlighter ordet selv så det ville jeg nøjes
med.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Christoffer \(Guide\~ (27-07-2006)
Kommentar
Fra : Christoffer \(Guide\~


Dato : 27-07-06 22:17


"Bertel Lund Hansen" <nospamfilius@lundhansen.dk> skrev i en meddelelse
news:44c92c23$0$3476$ba624c82@nntp02.dk.telia.net...
> Christoffer (Guide) skrev:
>
> > Mit spørgsmål er når jeg nu har fundet den tekst jeg vil finde er der så
en
> > måde at "highlighte" ordet på
> CSS:
> .highlight {
> color:red;
> background: inherit;
> }
> HTML:
> <span class='highlight'>søgeord</span>
> Så skal du bare styre HTML'en med noget PHP og evt. vælge en
> anden farve end "red".
Selvfølgelig...er blevet så optaget af php at jeg glemmer det basale..

> > og tage de f.eks 20 omkring liggende ord for og bag ordet?
> Det bliver noget komplekst noget fordi man skal tage højde for at
> der måske ikke er 20 ord. Desuden er det standard på f.eks.
> Google at man kun highlighter ordet selv så det ville jeg nøjes
> med.
måske jeg ikke fik udtrykt mig ordentligt..
Når man søger skal den selvfølgelig finde det valgte ord, men den skal også
vise den kontekst som ordet er fundet i ... det er heller ikke nødvendigt
med 20 for og bag, men blot en stump af den tekst hvori at ordet indgår.



Bertel Lund Hansen (27-07-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 27-07-06 22:32

Christoffer (Guide) skrev:

>> Det bliver noget komplekst noget fordi man skal tage højde for at
>> der måske ikke er 20 ord. Desuden er det standard på f.eks.
>> Google at man kun highlighter ordet selv så det ville jeg nøjes
>> med.

> måske jeg ikke fik udtrykt mig ordentligt..

Jo, jeg forstod udmærket hvad du mente, men det involverer
tekstbehandling, og det er noget drilagtigt noget.

Hvis du har et stykke tekst hvori ordet findes, kan du forsøge
dig med at eksplodere det med mellemrum som skilletegn, finde
nummeret på søgeordet i arrayet, og så implodere en ny
tekststreng hvor du medtager et antal ord før og efter nummeret.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Christoffer \(Guide\~ (27-07-2006)
Kommentar
Fra : Christoffer \(Guide\~


Dato : 27-07-06 22:49


"Bertel Lund Hansen" <nospamfilius@lundhansen.dk> skrev i en meddelelse
news:44c930c0$0$3479$ba624c82@nntp02.dk.telia.net...
> Christoffer (Guide) skrev:
>
> >> Det bliver noget komplekst noget fordi man skal tage højde for at
> >> der måske ikke er 20 ord. Desuden er det standard på f.eks.
> >> Google at man kun highlighter ordet selv så det ville jeg nøjes
> >> med.
>
> > måske jeg ikke fik udtrykt mig ordentligt..
>
> Jo, jeg forstod udmærket hvad du mente, men det involverer
> tekstbehandling, og det er noget drilagtigt noget.
>
> Hvis du har et stykke tekst hvori ordet findes, kan du forsøge
> dig med at eksplodere det med mellemrum som skilletegn, finde
> nummeret på søgeordet i arrayet, og så implodere en ny
> tekststreng hvor du medtager et antal ord før og efter nummeret.
hmm.. det giver jo fin mening det du skriver, men jeg havde nok forventet
der var noget mere simpelt end det..
Tror jeg gemmer det projekt til imorgen formiddag. tak for hjælpen!!



Jesper Brunholm (28-07-2006)
Kommentar
Fra : Jesper Brunholm


Dato : 28-07-06 08:06

Christoffer (Guide) skrev:
>>> Mit spørgsmål er når jeg nu har fundet den tekst jeg vil finde er der så
> en
>>> måde at "highlighte" ordet på...

>>> og tage de f.eks 20 omkring liggende ord for og bag ordet?

Hvis du bruger strpos() til at finde begyndelsen af din søgestreng, så
kan du med substr() hive tekststumpen fx 150 tegn før og efter ud.
Derefter er det bare at lave replace-opmærkning af dit søgehit og sætte
"..." for og bag, så er der ingen der har det skidt med brudte ord.

Overvej om du skal køre strip_tags på, eller om du vil reparere på
eventuelle "afklippede" html-koder.

mvh

Jesper Brunholm (som kun er en anelse fornærmet over at du ikke brød dig
om mit forslag med arrays )

Jesper Brunholm (26-07-2006)
Kommentar
Fra : Jesper Brunholm


Dato : 26-07-06 12:00

Christoffer (Guide) skrev:
> Men da der med tiden vil komme flere emner til vil det blive endnu mere
> besværligt end det er nu at få den til at søge på de valgte emner.. Den
> eneste løsning jeg ser på problemet pt er en lang og besværlig if/else
> sætning i form af hvis check1-til-check3 er taget, eller hvis
> check1+check2+check4 er taget og alle mulige kombinationer.. kan det ikke
> gøres nemmere?
>
> Har tænkt lidt på hvis jeg nu kaldte check-boksene for tabelnavnene fra
> databasen.. ville det hjælpe mig på nogen måde??

Smid variablerne i et array fra starten, og gennemløb dette i
formularhåndteringen:

$kolonner='';
if(isset($_GET['checks'])){#skal kun køres hvis formularen er submitted
   $checks=$_GET['checks'];
   foreach($checks as $kolnavn => $onOff){# Gennemkør arrayet af tilsendte
variabler uanset hvor langt det er
      if($onOff=='on'){#hvis boksen med dette kolonnenavn var afkrydset,
tilføjer vi kolonnenavnet til en liste. Man kunne også tilføje til et
array eller andet...
         $kolonner .= "$kolnavn, ";
      }
   }
}

echo "Denne gang var <strong>$kolonner</strong> valgte";

?>

<form action="test.php" method="get">
   <p>Søg i:</p>
   <label for="ch_fil">Filer<input id="ch_fil" type="checkbox"
name="checks[filer]"/></label> &nbsp;
   <label for="ch_art">Artikler<input id="ch_art" type="checkbox"
name="checks[artikler]"/></label> &nbsp;
   <label for="ch_scr" >Scripts<input id="ch_scr" type="checkbox"
name="checks[scripts]"/></label>
   <input type="submit" />
</form>

Bemærk at du laver array i stedet for variabel ved at bruge [] i
formularen (det er ikke helt ukendt i forhold til php)

Jeg bruger defaultvalue=on/off på checkbox, du kan selvfølgelig sætte en
anden værdi.

mvh

Jesper Brunholm

Martin (26-07-2006)
Kommentar
Fra : Martin


Dato : 26-07-06 12:10

Christoffer (Guide) wrote:
> Kryptisk overskrift, men måske den lokker nogle kloge hoveder til..
>
> Jeg er ude i at jeg skal lave et søge-system hvor jeg gerne vil give
> brugeren mulighed for at markere hvilke emner der skal søges i..
> eks.
> Der bliver søgt på følgende:<br>
> <input type="checkbox" name="check1" value="valgt" checked="checked">
> Sourcecodes
> <br>
> <input type="checkbox" name="check2" value="valgt" checked="checked"> Filer
> <br>
> <input type="checkbox" name="check3" value="valgt" checked="checked">
> Artikler
> <br>
> <input type="checkbox" name="check4" value="valgt" checked="checked"> Indlæg
> <br>
> <input type="submit" name="submit" class='submit' value="Søg">

Start med at lave dine checkbokse om til følgende
<input type='checkbox' name='valgt[]' value='SØGETYPE'>
SØGETYPE skal du så ændre til tabelnavnet i databasen

Så kan du lave en where i din mysql sætning der lyder noget ala

$sql = "
SELECT ...
FROM ...
WHERE ".implode(" OR ",$_POST["valgt"] = '".$_POST["search"]."');

echo $sql;

Så kan du lige tjekke om det ser korrekt ud - Det er inkl. diverse
stavefejl :P

>
> Har tænkt lidt på hvis jeg nu kaldte check-boksene for tabelnavnene fra
> databasen.. ville det hjælpe mig på nogen måde??

Hvis min løsning skal virke, så SKAL det være tabelnavnene :)

>
> Alle råd modtages med kyshånd!
>
>

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste