Avatar billede dizzim Nybegynder
31. juli 2004 - 00:50 Der er 3 kommentarer og
1 løsning

Søgning i MySQL database

Jeg vil gerne lave en søge funktion, hvor at man kan præcisere søgningen ved at vælge hvilke kolonner man vil søge i.

Men af en eller anden grund kan jeg ikke få variablerne til at virke i sql'query'en...

Indtil vidre ser min kode sådan her ud:

Formen:

<form action="search_02.php" method="POST">
        <p> What do you want to search in/for?</p>
      <div align="center">
          <select class="inputbox" name="search_class" size="10" >
            <option value="all">Search in all categorys </option>
            <option value="name">Name </option>
            <option value="type">Type </option>
            <option value="price_bought">Production price </option>
            <option value="price_sold">Sold price </option>
            <option value="date_added">Date added </option>
            <option value="date_sold">Date sold </option>
            <option value="bought_by">Who bought it </option>
            <option value="bought_from">Who made it </option>
            <option value="comment">Comments </option>
          </select>       
        </div> <br>
        <div align="center"><input class="inputbox" type="text" value="Write search word/name/date/ here" name="type_name" size="35"></div>

Og php'koden på search_02.php-siden:

<?php
$search_word = $_REQUEST["Search_word"];
$search_class = $_REQUEST["search_class"];

$connection = mysql_connect("server.dk", "bruger", "kodeord");
mysql_select_db("database");
$result = mysql_query("SELECT * FROM stock WHERE '$search_class' LIKE '$search_word' ORDER BY id DESC");
while ($row = mysql_fetch_array($result)) {
  extract($row);

BLA BLA BLA BLA

echo " BLA BLA BLA "; 


mysql_close($connection);
?>

Jeg kan sagtens få query'en til at virke hvis jeg ikke bruger variabler. Men så ville det jo ikk lige være verdens bedste søge maskine =P.

Nogen der kan hjælpe?
Avatar billede terrak Nybegynder
31. juli 2004 - 01:01 #1
Når du bruger LIKE skal du huske et % -tegn som indkerer at x antal tegn må stå i stedet for %-tegnet.

"Matches any number of characters, even zero characters"

I dit tilfælde skal du bruge LIKE '%$search_word%'

http://dev.mysql.com/doc/mysql/en/String_comparison_functions.html
Avatar billede jakoba Nybegynder
31. juli 2004 - 01:05 #2
husk også på at kolonnenavnet er et bavn. der skal IKKE '-tegn omkring
$result = mysql_query("SELECT * FROM stock WHERE $search_class LIKE '$search_word' ORDER BY id DESC");
Avatar billede terrak Nybegynder
31. juli 2004 - 01:45 #3
jakoba > Det er jo rigtigt ja - og hvis det skulle være helt korrekt, så skal de erstattes med `-tegn ( shift + | ).

Erstattes de ikke af `, så har du et stort sikkerhedshul, da brugeren selv kan begynde at indtaste den ønskede sql kode($search_class kommer fra en form, dvs. en bruger - og deres input må du >aldrig< stole på). $search_class skal uanset hvad, køres igennem mysql_escape_string(). Køres det først gennem den funktion, kan brugeren ikke "hoppe ud" af ' eller " tegnene.. problemet er så at den ikke tager højde for `-tegnet. Men det burde str_replace("`","",$search_class) gøre kål på.
Avatar billede dizzim Nybegynder
31. juli 2004 - 02:17 #4
takker,
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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