Avatar billede nyst Nybegynder
10. oktober 2003 - 11:44 Der er 6 kommentarer og
1 løsning

søg i kategorier

Hej jeg har en funktionsdygtig søgning, som skal udvides med at man kan vælge kun et enkelt afsnit at søge i.
I databasen har jeg valgt at give hvert afsnit en værdi feks 20, 30 eller 100.

Hvordan får jeg koblet dette sammen?

Min form ser sådan ud:

<form class="formsoeg" method="post"  action="../element/result2.php">
<table border="0" cellpadding="0" cellspacing="0" width="124">
<tr>
<td><b>Udvidet søgning</b><br></td>
</tr>
<tr>
<td>
<select name="afd" style="width:100%" class="formsoeg2">
<option value=" " selected>Vælg afdeling &raquo;</option>
<option value="020">afsnit 2</option>
<option value="030">osv</option>
<option value="040">der</option>
<option value="050">ned</option>
<option value="060">ad</option>
<option value="190"></option>
<option value="070"></option>
<option value="080"></option>
<option value="090"></option>
<option value="100"></option>
<option value="110"></option>
<option value="120"></option>
<option value="130"></option>
<option value="140"></option>
<option value="150"></option>
<option value="160"></option>
<option value="170"></option>
<option value="180"></option>
</select></td>
</tr>
<tr>
<td class="formsoeg">
Søgeord:<br>
<input type="text" name="search" size="11">
<input type="submit" style="font-size : 9px;" value="Søg"></td>
</tr>
</table>
</form>

og min søgning sådan:

<?php
if($search){   
    $db = mysql_connect("xxx.dk", "yyy", "zzz");
    mysql_select_db("xzxz", $db);
    $noResult = "<BR>Deres søgning gav intet resultat.";   
    $query = mysql_query("SELECT * FROM sider WHERE indhold LIKE '%$search%' AND godkendt='ja' ORDER BY afdeling");
    echo mysql_num_rows($query) . " resultater blev fundet og vist efter afdeling.<BR><BR>";
    while($row = mysql_fetch_array($query)){
        $id = $row["id"];
        $afd = $row["afd"];
        $afdeling = $row["afdeling"];
        $overskrift = $row["overskrift"];
        $filnavn = $row["filnavn"];
        $indhold = $row["indhold"];
        $indhold = strip_tags($indhold);
        echo ("$afdeling<BR>");
        echo ("<a href=/$filnavn class=xxx>$overskrift</a><BR>");
        echo strlen($indhold) > 65 ? substr($indhold, 0, 65)."..." : $indhold;
        echo ("<BR><BR>");       
    }
if (!$id){
        print ("$noResult");
    }
}
    mysql_close();
?>

Det er <option value="070"></option> i formen som refererer til $afd = $row["afd"]; i php'en

Kan nogle guide mig på rette vej???
Avatar billede swaxi Nybegynder
10. oktober 2003 - 15:26 #1
$query = mysql_query("SELECT * FROM sider WHERE indhold LIKE '%$search%' AND godkendt='ja' AND afd='$afd' ORDER BY afdeling");
Avatar billede nyst Nybegynder
10. oktober 2003 - 17:44 #2
tak for hjælpen swaxi,
det virkede perfekt

:-) nyst

SLUTTER HER
Avatar billede swaxi Nybegynder
10. oktober 2003 - 17:51 #3
hvis siden er til offentlig brug, ville det være klogt at bruge addslashes() på alle input fra get/post
eg.:
$query = mysql_query("SELECT * FROM sider WHERE indhold LIKE '%".addslashes($search)."%' AND godkendt='ja' AND afd='".addslashes($afd)."' ORDER BY afdeling");
Avatar billede nyst Nybegynder
10. oktober 2003 - 18:04 #4
hvorfor om jeg må spørge

:-) nyst
Avatar billede swaxi Nybegynder
10. oktober 2003 - 18:13 #5
det er for at forhindre folk i at hacke dig, vha den metode, der bliver kaldt for sql-injection. hvis du ikke bruger addslashes, bliver variablen indsat nøjagtig som den kommer fra brugeren. hvis brugeren således indsætter en stump sql-kode, vil dette blive eksekveret i din database. det kan i værste fald betyde at vedkommene kan ødelægge indholdet af din database.

eksempel :

siden loades med :
    $afd="' OR TRUE OR afd='"
    $search = ""

disse indsættes i denne query :
    "SELECT * FROM sider WHERE indhold LIKE '%$search%' AND godkendt='ja' AND afd='$afd' ORDER BY afdeling"

som kommer til at se såddan ud :
    "SELECT * FROM sider WHERE indhold LIKE '%%' AND godkendt='ja' AND afd='' OR TRUE OR afd='' ORDER BY afdeling"

hvilket resulterer i at hackeren får en liste over alle sider.
(det er ikke det store problem lige her, men det var også bare for at illustrere problematikken for dig)
Avatar billede nyst Nybegynder
11. oktober 2003 - 00:24 #6
takker mange gange for din forklaring,
den er ret så brugbar

:-) nyst
Avatar billede nyst Nybegynder
14. oktober 2003 - 14:47 #7
Lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester