Avatar billede mazey Praktikant
13. juli 2005 - 23:02 Der er 2 kommentarer og
1 løsning

En søgefunktion (repost)

Hej eksperter...

Jeg har tidligere postet dette indlæg, men fik ikke så mange svar, så jeg prøver lige igen. :-)

Jeg er igang med at lave en søgeside. Jeg har tidligere lavet sådan en, men kun med 1 enkelt input felt.
Nu er det så sådan at jeg nu har 5 søgefelter, hvoraf de 4 af dem er dropdown boxe (list-menu hedder de vidst også), hvor der hentes data fra databasen.

Det skal selvfølgelig være muligt for brugeren kun at søge ved at bruge et enkelt af disse felter... hvordan gør jeg lige det?
Jeg har forsøgt mig lidt frem... Dog tror jeg ikke jeg har fundet den helt rigtige løsning, da det tætteste jeg ku komme på var at lave sql sætningen i en if/else, hvor der så for hver mulighed blev ændret i sql sætningen...

Sådan ser min form ud:

<form method="POST" action="?mainkategori=1&show=seek"  name="test">

<input type="hidden" name="action" value="seek">
<input type="hidden" name="mainkategori" value="<?=$mainkategori?>">

<table >
<tr>
        <td width="138" align="left"><span class="style2">Buy / Sell</span></td>
        <td width="162" align="left"><select name="userpost_sell" class="style2">
        <option value="">--Select--</option>
          <option value="1">Buy</option>
          <option value="2">Sell</option>
        </select></td>
    </tr>
    <tr>
        <td width="138" align="left"><span class="style2">Product Group:</span></td>
        <td width="162" align="left"><select name="userpost_group" class="style2" onChange="subgroup();">
        <option value="0">---- SELECT ----</option>
        <option value="1">Wood</option>
        <option value="2">Steel/Iron</option>
        <option value="3">Textiles</option>
        <option value="4">Food/Agriculture</option>
        <option value="5">Vehicles</option>
        <option value="6">Investment</option>
        </select></td>
    </tr>
   
    <tr>
        <td align="left"><span class="style2">Product Subgroup</span></td>
        <td align="left"><select name="userpost_sub" class="style2">
        <option value="0">---- SELECT ----</option>
       
        </select></td>
    </tr>
    <tr span class="style2">
      <td align="left">Country:</td>
      <td align="left"><span class="style2"><select name="land" class="style2">
        <option value="0">---- SELECT ----</option>
        <?
        $res = mysql_query("SELECT * FROM lande ORDER BY navn");
        while( $land = mysql_fetch_row($res) )
        {
            echo"<option value=\"$land[1]\">$land[1]</option>";
        }
        ?>
        </select></span></td>
  </tr>
    <tr class="style2">
      <td align="left">Search text:</td>
      <td align="left"><input name="searchtext" type="text" class="style2" size="30"></td>
  </tr>
    <tr>
            <td align="left"><input type="submit" name="submit" value=" Submit " class="style2"></td>
        <td></td>
    </tr>
    </table>
      </form>


Selve seek.php ser sådan her ud:

<?        //variabler fra search.php
            $sell = $_POST[userpost_sell];
            $userpost_group = $_POST[userpost_group];
            $userpost_sub = $_POST[userpost_sub];
            $land = $_POST[land];
            $searchtext = $_POST[searchtext];

//sql

            $foresp = mysql_query("SELECT * FROM userpost INNER JOIN brugere ON userpost.userpost_bruger = brugere.id WHERE userpost_sell LIKE '%".$sell."%' AND userpost_group LIKE '%".$userpost_group."%' AND userpost_sub LIKE '%".$userpost_sub."%' AND land LIKE '%".$land."%'  AND userpost_over LIKE '%".$searchtext."%' OR userpost_text LIKE '%".$searchtext."%' ");


Så var det at hvis så '$sell' ikke var sat af brugeren ville jeg lave den sådan:
if($sell == ""){
            $foresp = mysql_query("SELECT * FROM userpost INNER JOIN brugere ON userpost.userpost_bruger = brugere.id WHERE userpost_group LIKE '%".$userpost_group."%' AND userpost_sub LIKE '%".$userpost_sub."%' AND land LIKE '%".$land."%' AND userpost_over LIKE '%".$searchtext."%' AND userpost_text LIKE '%".$searchtext."%' ");
            }elseif($userpost_group == ""){
osv...

Men det kan nok laves mere dynamisk end det... ik?
:)

Takker på forhånd!
Avatar billede wuggawugga Nybegynder
14. juli 2005 - 09:27 #1
Noget i den stil? Det er ikke testet, men det er sådan jeg plejer at gøre det


<?
    //variabler fra search.php
    $sell = $_POST[userpost_sell];
    $userpost_group = $_POST[userpost_group];
    $userpost_sub = $_POST[userpost_sub];
    $land = $_POST[land];
    $searchtext = $_POST[searchtext];

           
    $query = 'SELECT * FROM userpost INNER JOIN brugere ON userpost.userpost_bruger = brugere.id';
    $conditions = array();
    if($sell) {
        $conditions[] = 'userpost_sell LIKE \'%".$sell."%\'';
    }
    if($userpost_group) {
        $conditions[] = 'userpost_group LIKE \'%".$userpost_group."%\'';
    }
    if($userpost_sub) {
        $conditions[] = 'userpost_sub LIKE \'%".$userpost_sub."%\'';
    }
    if($land) {
        $conditions[] = 'land LIKE \'%".$land."%\'';
    }
    if($searchtext) {
        $conditions[] = 'userpost_over LIKE \'%".$searchtext."%\' OR userpost_text LIKE \'%".$searchtext."%\'';
    }
   
    if(!empty($conditions)) {
        $query .= ' WHERE '.implode(' AND ', $conditions);
    }

    $foresp = mysql_query($query);
   
    ...
Avatar billede mazey Praktikant
26. juli 2005 - 21:55 #2
Undskyld den lange tid uden svar...
Jeg forstår ikke helt måden du laver det på...
Jeg har testet det og den viser alle resultaterne hvis man ikke vælger noget specifikt i søgefunktionen, men vælger man f.eks. at den skal søge på annoncer med "buy" (og der er sådan nogle i db'en) siger den at der intet er...
Avatar billede wuggawugga Nybegynder
28. juli 2005 - 15:51 #3
Ideen er, at du starter med 'SELECT * FROM tabel1'

Derefter tilføjer du betingelser efter behov.
Altså hvis du har en variabel f.eks. $_GET['felt1'] = '10' tilføjer du f.eks. 'WHERE felt1 = 10'.

Jeg bruger et array til betingelserne, hvorefter jeg imploder dem med AND, så ingen, en eller flere betingelser kan godtages.

Fejlen skyldes sikkert at mit eksempel ovenfor ikke er helt som det skal være. Prøv at skrive $query ud og se hvordan det ser ud i forhold til det du skal bruge.
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