| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | 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>  
    <label for="ch_art">Artikler<input id="ch_art" type="checkbox" 
 name="checks[artikler]"/></label>  
    <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!
 > 
 > 
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |