Avatar billede warberg Juniormester
20. juli 2004 - 11:51 Der er 11 kommentarer og
1 løsning

AND / OR i søgning

Jeg har bøvl med at få en WHERE-sætning til at fungere.

Barberet ned:

<form action="test.php" method="get" name="find">

Brugernavn: <input type="text" name="navn">

Køn:

<select name="kon">

<option value=""></option>
<option value="mand">Mand</option>
<option value="kvinde">Kvinde</option>
<option value="par">Par</option>
</select>


Fra:

<select name="fra">

<option value=""></option>
<option value="København">København</option>
<option value="Storkøbenhavn">Storkøbenhavn</option>
<option value="Nordsjælland">Nordsjælland</option>
<option value="Sydsjælland">Sydsjælland</option>
<option value="Øvrige Sjælland">Øvrige Sjælland</option>
<option value="Lolland/Falster">Lolland/Falster</option>
<option value="Fyn">Fyn</option>
<option value="Nordjylland">Nordjylland</option>
<option value="Østjylland">Østjylland</option>
<option value="Sydjylland">Sydjylland</option>
<option value="Vestjylland">Vestjylland</option>
<option value="Midtjylland">Midtjylland</option>
<option value="Bornholm">Bornholm</option>
<option value="Grønland">Grønland</option>
<option value="Færøerne">Færøerne</option>
<option value="Sverige">Sverige</option>
<option value="Norge">Norge</option>
</select>


Partner status:

<select name="partner">
<option value=""></option>
<option value="Single">Single</option>
<option value="Kæreste">Kæreste</option>
<option value="Gift">Gift</option>
</select>


<input type="submit" name="find" value="S&oslash;g">


<?php

if ($_GET['find']) {
    echo "<hr />";

    include("config.php");

    $navn = $_GET['navn'];
    $kon = $_GET['kon'];
    $fra = $_GET['fra'];
    $partner = $_GET['partner'];

    $query = mysql_query("SELECT * FROM brugere WHERE navn='$navn' AND kon='$kon' AND fra='$fra'");

    if (mysql_num_rows($query) == "0"){
        echo "Ingen resultater af din s&oslash;gning!";
    } else {
        while($r = mysql_fetch_array($query)) {
            echo "Resultat: $r[navn]</a><br />";
           
        }
    }
}

?>


Der skal kun sorteres efter de felter der er udfyldt...

Se prob. på http://www.lystenshule.dk/test.php (se bort fra de andre felter)

Eks. fra db:
Brugernavn: warberg
Køn: Mand
Fra: Sydjylland
Partnerstatus: Kæreste

Udfyldes alle kriterier kommer resultat find frem. Men hvordan skal den se ud hvis kun et eller to kriterier er opfyldt, og den stadig skal give resultat??
Avatar billede warberg Juniormester
20. juli 2004 - 11:52 #1
Udfyldes alle kriterier kommer resultat find frem  = fint frem
Avatar billede dr_chaos Nybegynder
20. juli 2004 - 11:54 #2
måske skal du bruge like i stedet for.
Avatar billede warberg Juniormester
20. juli 2004 - 12:07 #3
Løser ikke problemet. Mit problem er at hverken AND eller OR er passende...
Avatar billede dr_chaos Nybegynder
20. juli 2004 - 13:45 #4
så kan du lave forskellige  sql sætninger som afvikles alt efter hvilke kritier der er opfyldt
Avatar billede warberg Juniormester
20. juli 2004 - 13:54 #5
Ja, har haft tanken, men synes det lyder uoverskueligt, vil det ikke give mange else/if'er? Eller er der en smart måde at gøre det på?
Avatar billede dr_chaos Nybegynder
20. juli 2004 - 14:35 #6
ved ikke om der er en smart måde at gøre det på men en masse if sætninger er en løsning.
Avatar billede jakoba Nybegynder
20. juli 2004 - 17:36 #7
lad os først skrive din query så den er til at læse:

$query = mysql_query("
    SELECT *
    FROM brugere
    WHERE navn='$navn'  -- skal kun med hvis $navn er udfyldt
      AND kon='$kon'    -- skal kun med hvis $kon er udfyldt
      AND fra='$fra'    -- skal kun med hvis $fra er udfyldt
");

og nu kan vi så nemt sktive den om med  ?:  iperatoren:

$query = mysql_query("
    SELECT *
    FROM brugere
    WHERE ". (isset($navn) ? "navn='$navn'" : "true") ."
      AND ". (isset($kon)  ? "kon='$kon'" : "true") ."
      AND ". (isset($fra)  ? "fra='$fra'" : "true") ."
");

mvh JakobA
Avatar billede warberg Juniormester
20. juli 2004 - 19:16 #8
> Jakob

Det ser dejligt overskueligt ud... bortset fra at jeg ikke kan få det til at virke.
Prøv at se på http://www.lystenshule.dk/test.php

Hvis der kun vælges et eller to kriterier får jeg ingen resultater. Er det stadig AND der driller?
Avatar billede jakoba Nybegynder
20. juli 2004 - 19:25 #9
Måske, jeg er ikke spor sikker. Det er måske min bruge af true der giver problemer

prøv dette:

$sql_kommando = "
    SELECT *
    FROM brugere
    WHERE ". (isset($navn) ? "navn='$navn'" : "1=1") ."
      AND ". (isset($kon)  ? "kon='$kon'" : "1=1") ."
      AND ". (isset($fra)  ? "fra='$fra'" : "true") ."
";
echo "<br>" .$sql_kommando ."<br>";  // DEBUG LINIE (fjernes igen når det duer)
$query = mysql_query( $sql_kommando ) or die( mysql_error() );
                // or die fortælle hvad der går galt hvis det går galt

prøv nu, i forskellige forsøg, at udelade  navn, kon og fra. og se hvilke der virker og hvad for en sql_kommando der bliver skrevet ud for hver af dem.

mvh JakobA
Avatar billede jakoba Nybegynder
20. juli 2004 - 19:33 #10
Ups. der er også en klar fejl i det jeg har skrevet.

$navn, $kon og $fra har jo ALTID en værdi. hvis brugeren ikke skriver eller vælger noget er værdien "" (tom streng).  Så det skal være:

    WHERE ". ( ($navn!="") ? "navn='$navn'" : "1=1") ."
      AND ". ( ($kon!="")  ? "kon='$kon'" : "1=1") ."
      AND ". ( ($fra!="")  ? "fra='$fra'" : "true") ."

mvh JakobA
Avatar billede warberg Juniormester
20. juli 2004 - 19:45 #11
Det virker perfekt! Nu kan jeg sove igen.... Tak for forenklingen.
Smid et svar.
Avatar billede jakoba Nybegynder
20. juli 2004 - 19:48 #12
ok
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