Avatar billede rarw Nybegynder
20. oktober 2005 - 19:23 Der er 121 kommentarer og
1 løsning

Advanceret bruger søgning

Hey :)

Jeg kunne virkelig godt tænke mig et advanceret bruger søgning. :)

Jeg har felterne i min tabel brugere:

id - Idet af brugeren
kon - Kønnet af brugerden, Dreng eller Pige
born_year - Året bruger blev født eks 1990
born_month - Måneden brugeren blev født eks 09
born_date - Dagen brugeren blev født eks 06
post_nummer - Post nummeret
landsdel - Landsdelen
cevil_status - om man har væreste på osv

Nu vil jeg gerne ha at man skulle kunne søge efter:


Køn: Båbe drenge og pige, men også kun drenge og Kun piger.

Fra alder, til alder: Ved ikke hvordan det laves når jeg har lavet alderen på den måde :o

Fra postNummer til postNummer: eks fra: 4300 Til: 4700.

Landsdel. Man skal kunne vælge landsdel, kan godt selv lave valgmulighederne :D

Cevil status: Man skal kunne vælge evt om de er single, gift, kæreste osv.


Kan i hjælpe med det :D?

Har virkelig brug for det :)
Avatar billede nielle Nybegynder
20. oktober 2005 - 20:16 #1
Hvor meget kan du kode selv?
Avatar billede rarw Nybegynder
20. oktober 2005 - 20:28 #2
Html delen :D

Ej kan godt lave en søge funktion fra bare et felt. men kan ikke en advanceret, der skal den jo også hente fra landsdel cevil_status alder osv :P
Avatar billede nielle Nybegynder
20. oktober 2005 - 20:40 #3
Lad os koncentrer os om HTML-delen først. Der skal laves en form hvori man kan vælge søge-kriterierne. Kan du lave et forslag på hvordan denne kunne se ud?
Avatar billede rarw Nybegynder
20. oktober 2005 - 20:57 #4
Yes sir :)

<form method="post" action="seek.php?NOGET ????">

<b>Køn:</b> Dreng: <input type="checkbox" name="kon" value="Dreng" /> Pige: <input type="checkbox" name="kon" value="pige" />

<b>Alder:</b> Fra: <input type="text" name="age" size="5" maxlength="2" /> Til: <input type="text" name="age2" size="5" maxlength="2" />

<b>Postnummer:</b> Fra: <input type="text" name="postnr" size="5" maxlength="2" /> Til: <input type="text" name="postnr2" size="5" maxlength="2" />

<b>Landsdel:</b> <select name="landsdel" size="1" style="width: 240px;">
<option value="">Ikke angivet</option>
<option  value="Bornholm">Bornholm</option>
<option  value="Esbjerg">Esbjerg</option>
<option  value="Fyn">Fyn</option>
<option  value="Frederiksberg">Frederiksberg</option>
<option  value="F&#230;r&#248;erne">F&#230;r&#248;erne</option>
<option  value="Gr&#248;nland">Gr&#248;nland</option>
<option  value="K&#248;benhavn">K&#248;benhavn</option>
<option  value="Lolland/Falster">Lolland/Falster</option>
<option  value="Midtjylland">Midtjylland</option>
<option  value="Nordjylland">Nordjylland</option>
<option value="Nordsj&#230;lland">Nordsj&#230;lland</option>
<option value="Odense">Odense</option>
<option  value="Sj&#230;lland">Sj&#230;lland</option>
<option  value="Sydsj&#230;lland">Sydsj&#230;lland</option>
<option  value="S&#248;nderjylland">S&#248;nderjylland</option>
<option value="&#197;rhus">&#197;rhus</option>
<option value="Aalborg">Aalborg</option>
<option  value="Udlandet">Udlandet</option>
<option value="&#216;stjylland">&#216;stjylland</option>
<option  value="&#216;stsj&#230;lland">&#216;stsj&#230;lland</option>
<option value="Vestjylland">Vestjylland</option>
<option value="Vestsj&#230;lland">Vestsj&#230;lland</option>
</select>

<b>Cevil status:</b> <select name="status" size="1" style="width: 240px;">
<option value="">Ikke angivet
<option value="Gift">Gift
<option value="Forlovet">Forlovet
<option value="Kæreste">Kæreste
<option value="Netkæreste">Netkæreste
<option  value="Samlever">Samlever
<option value="Single">Single
</select>

<b>Profilbillede/<b>: <input type="checkbox" name="billede" value="yes" />

<input type="submt" name="send" value="Søg nu" />

</form>
Avatar billede nielle Nybegynder
20. oktober 2005 - 21:04 #5
Den er fin, men du burde måske nok have nogle værdier i de select-option's som svarer til "Ikke angivet".
Avatar billede nielle Nybegynder
20. oktober 2005 - 21:07 #6
Desuden er det en god i det at tilføje et [] i dine checkbokse:

<b>Køn:</b> Dreng: <input type="checkbox" name="kon[]" value="Dreng" /> Pige: <input type="checkbox" name="kon[]" value="pige" />

- idet det så bliver til et array over i den modtagende PHP-kode.

Alternativt kan du jo overveje om du ikke burde bruge en radio i stedet for en checkboks?
Avatar billede rarw Nybegynder
20. oktober 2005 - 21:11 #7
Hehe ja,

Yes, har jeg rettet nu :)

Kan du hjælpe mig med resten :)? altså selve søgefunktionen 8)?
Avatar billede nielle Nybegynder
20. oktober 2005 - 21:13 #8
Ja-ja :^)

... men jeg skal lige vide hvordan din form kom til at se ud.

Desuden vil jeg gerne vide om du ønsker en AND- eller en OR-søgning? Ved AND skal alle kriterierne være opfyldt, og ved OR skal bare et af kriterierne opfyldes.
Avatar billede rarw Nybegynder
20. oktober 2005 - 21:16 #9
Tak :D

Det skal være OR :) da det ikke er sikkert de gider at søge under landsdel, postnummer osv :)
Avatar billede nielle Nybegynder
20. oktober 2005 - 21:16 #10
Din form?
Avatar billede rarw Nybegynder
20. oktober 2005 - 21:20 #11
Min form ? :)
Avatar billede nielle Nybegynder
20. oktober 2005 - 21:22 #12
Du har jo rettet i din form; Jeg vil gerne se hvordan den nu ser ud.

Og er dine felter, born_year, born_month, born_date og post_nummer, defineret som tal-felter i databasen (eller som tekst-felter?).
Avatar billede rarw Nybegynder
20. oktober 2005 - 21:26 #13
Born year,date og month er int og postnr er varchar(4)

Her:

<form method="post" action="seek.php?NOGET ????">

<b>Køn:</b> Dreng: <input type="checkbox" name="kon[]" value="Dreng" /> Pige: <input type="checkbox" name="kon[]" value="pige" /><br /><br />

<b>Alder:</b> Fra: <input type="text" name="age" size="5" maxlength="2" /> Til: <input type="text" name="age2" size="5" maxlength="2" /><br /><br />

<b>Postnummer:</b> Fra: <input type="text" name="postnr" size="5" maxlength="2" /> Til: <input type="text" name="postnr2" size="5" maxlength="2" /><br /><br />

<b>Landsdel:</b> <select name="landsdel" size="1" style="width: 240px;">
<option value="">Ikke angivet</option>
<option  value="Bornholm">Bornholm</option>
<option  value="Esbjerg">Esbjerg</option>
<option  value="Fyn">Fyn</option>
<option  value="Frederiksberg">Frederiksberg</option>
<option  value="F&#230;r&#248;erne">F&#230;r&#248;erne</option>
<option  value="Gr&#248;nland">Gr&#248;nland</option>
<option  value="K&#248;benhavn">K&#248;benhavn</option>
<option  value="Lolland/Falster">Lolland/Falster</option>
<option  value="Midtjylland">Midtjylland</option>
<option  value="Nordjylland">Nordjylland</option>
<option value="Nordsj&#230;lland">Nordsj&#230;lland</option>
<option value="Odense">Odense</option>
<option  value="Sj&#230;lland">Sj&#230;lland</option>
<option  value="Sydsj&#230;lland">Sydsj&#230;lland</option>
<option  value="S&#248;nderjylland">S&#248;nderjylland</option>
<option value="&#197;rhus">&#197;rhus</option>
<option value="Aalborg">Aalborg</option>
<option  value="Udlandet">Udlandet</option>
<option value="&#216;stjylland">&#216;stjylland</option>
<option  value="&#216;stsj&#230;lland">&#216;stsj&#230;lland</option>
<option value="Vestjylland">Vestjylland</option>
<option value="Vestsj&#230;lland">Vestsj&#230;lland</option>
</select>

<br /><br />

<b>Cevil status:</b> <select name="status" size="1" style="width: 240px;">
<option value="">Ikke angivet
<option value="Gift">Gift
<option value="Forlovet">Forlovet
<option value="Kæreste">Kæreste
<option value="Netkæreste">Netkæreste
<option  value="Samlever">Samlever
<option value="Single">Single
</select>

<br /><br />

<b>Profilbillede<b>: <input type="checkbox" name="billede" value="yes" />

<br /><br />

<input type="submit" name="send" value="Søg nu" />

</form>
Avatar billede nielle Nybegynder
20. oktober 2005 - 21:28 #14
Har du nogen mulighed for at lave dem om til tal-felter? Det er faktisk jo tal, og en sådan rettelse vil gøre det meget nemmere at lave sådan noget som:

if 2000<=postnummer and postnummer<=3000
Avatar billede rarw Nybegynder
20. oktober 2005 - 21:31 #15
postnummer er blevet lavet om til postnr :)

Hmm, tjah det er bare fordi så står det et 0  postnr feltet når man redigere hvis man intet har skrevet.

Og det er ikke så fedt.
Avatar billede rarw Nybegynder
20. oktober 2005 - 21:34 #16
Men nu er det int(4) :)
Avatar billede nielle Nybegynder
20. oktober 2005 - 21:34 #17
Postnumre er jo kun noget som skal ind i databasen en gang for alle.
Avatar billede rarw Nybegynder
20. oktober 2005 - 21:36 #18
jeg har tabellen postnummer der inde holder feltet postnr og by hvor alle post numre og byer så, så har jeg feltet postnr i user tabellen, int(4) hvor når man poaster tjekker den om det findes i postnummer tabellen :)
Avatar billede nielle Nybegynder
20. oktober 2005 - 21:36 #19
Ok så burde vi kunne gå videre til PHP-delen. Det første vi skal have lavet er selve SQL-kaldet. Et (langt) øjeblik... :^)
Avatar billede rarw Nybegynder
20. oktober 2005 - 21:39 #20
Hehe okey :D
Avatar billede nielle Nybegynder
20. oktober 2005 - 21:44 #21
I din formular... Hvad betyder det hvis man krydser af i både dreng og pige, og hvis man ikke krydser af i nogen af dem? Formentligt det samme, men dine brugere kan nu godt blive forvirrede. Det var derfor at jeg forslog en radio (med 3 muligheder).

I øvrigt er den ene value lig med "Dreng" med stort 'D', mens den anden er "pige" med lille 'p'. Det er lidt sløset (i min bog) men det betyder bare at der skal tages hensyn til dette i PHP-koden.
Avatar billede rarw Nybegynder
20. oktober 2005 - 21:49 #22
Så viser den både piger og drenge :)

Hov sorry, lav pige til Pige :)
Avatar billede nielle Nybegynder
20. oktober 2005 - 21:50 #23
Ok, det gør jeg så :^)
Avatar billede rarw Nybegynder
20. oktober 2005 - 21:55 #24
Tak :)
Avatar billede nielle Nybegynder
20. oktober 2005 - 22:07 #25
I stedet for at skrive hele koden med det samme, vil jeg lige vise grundprincippet:

// Starten på SQL-sætningen:
$sql = "SELECT * FROM dinTabel ";

// Array til at holde WHERE-delen efterhånden som vi bestemmer den:
$where = array();

// Udregn where betingelserne en af gangen:
$where[] = "Betingelse1";
$where[] = "Betingelse2";
$where[] = "Betingelse3";
$where[] = "Betingelse4";

// Hvis der er blot et element i $where skal der en WHERE-del på SQL-kommandoen:
if (count($where) > 0)
{
    $sql .= " WHERE " . implode(" OR ", $where);
}

// Tilsidst en eventuel sortering:
$sql .= " ORDER BY id ASC";

// Og udskriv lige SQL'en sådan at vi kan se det endelige resultat:
echo "DEBUG: " . $sql . "<br>";

Ser der fornuftigt ud? Og hvad hedder din tabel egentlig?
Avatar billede rarw Nybegynder
20. oktober 2005 - 22:12 #26
Min tabel hedder users :)

Hvad gør jeg så nu :D?
Avatar billede nielle Nybegynder
20. oktober 2005 - 22:14 #27
Prøv at lave en side - seek.php - med ovesntående kode (og ret "dinTabel" til "users") og afprøv koden.
Avatar billede nielle Nybegynder
20. oktober 2005 - 22:15 #28
... og din form skal i øvrigt bare se sådan her ud:

<form method="post" action="seek.php">
Avatar billede rarw Nybegynder
20. oktober 2005 - 22:18 #29
DEBUG: SELECT * FROM users WHERE Betingelse1 OR Betingelse2 OR Betingelse3 OR Betingelse4 ORDER BY id ASC

Står der bare :P
Avatar billede nielle Nybegynder
20. oktober 2005 - 22:19 #30
Det er også som det skal være. Sådan vil din SQL-sætning grundlæggende komme til at se ud (læg mærke til at det er OR-søgning).
Avatar billede nielle Nybegynder
20. oktober 2005 - 22:20 #31
Vi kan nu begynde at beregne de forskellige søgebetingelser - først søgning på køn:

Prøv at rette:

// Udregn where betingelserne en af gangen:
$where[] = "Betingelse1";
$where[] = "Betingelse2";
$where[] = "Betingelse3";
$where[] = "Betingelse4";

- til denne kode:

// Søgning på køn:
if (isset($_POST["kon"]))
{
    $dreng = false;
    $pige = false;

    foreach ($_POST["kon"] as $kon)
    {
        if ($kon == "Dreng") $dreng = true;
        if ($kon == "Pige") $pige = true;
    }

    if ($dreng XOR $pige)
    {
        if ($dreng)
            $while[] = "kon='Dreng'";
        else
            $while[] = "kon='Pige'";
    }
}

- og prøv så at lege lidt med din form for at se resultaterne.
Avatar billede rarw Nybegynder
20. oktober 2005 - 22:23 #32
Jeg for det samme:


DEBUG: SELECT * FROM users WHERE Betingelse1 OR Betingelse2 OR Betingelse3 OR Betingelse4 ORDER BY id ASC
Avatar billede nielle Nybegynder
20. oktober 2005 - 22:25 #33
Hvis du har fjernet:

// Udregn where betingelserne en af gangen:
$where[] = "Betingelse1";
$where[] = "Betingelse2";
$where[] = "Betingelse3";
$where[] = "Betingelse4";

- så bør du bestemt ikke få det samme!
Avatar billede rarw Nybegynder
20. oktober 2005 - 22:25 #34
skulle jeg fjerne

$where[] = "Betingelse1";
$where[] = "Betingelse2";
$where[] = "Betingelse3";
$where[] = "Betingelse4";

:D?
Avatar billede rarw Nybegynder
20. oktober 2005 - 22:26 #35
Så for jeg DEBUG: SELECT * FROM users ORDER BY id ASC

Hvor jeg har valg Dreng i formen :P
Avatar billede nielle Nybegynder
20. oktober 2005 - 22:26 #36
Nærlsæ lige 20/10-2005 22:20:52 igen ;^)
Avatar billede rarw Nybegynder
20. oktober 2005 - 22:28 #37
Nåå. :) hehe ja, det gjorder jeg og fik denne kode DEBUG: SELECT * FROM users ORDER BY id ASC :)
Avatar billede nielle Nybegynder
20. oktober 2005 - 22:29 #38
Hmm, mystisk. :^|

Prøv så med denne debug-version af den kode:

// Søgning på køn:
if (isset($_POST["kon"]))
{
    $dreng = false;
    $pige = false;

    foreach ($_POST["kon"] as $kon)
    {
        echo "DEBUG: " . $kon . "<br>";
        if ($kon == "Dreng") $dreng = true;
        if ($kon == "Pige") $pige = true;
    }

    if ($dreng XOR $pige)
    {
        if ($dreng)
            $while[] = "kon='Dreng'";
        else
            $while[] = "kon='Pige'";
    }
}
Avatar billede rarw Nybegynder
20. oktober 2005 - 22:32 #39
For jeg nu:

DEBUG: Dreng
DEBUG: SELECT * FROM users ORDER BY id ASC
Avatar billede nielle Nybegynder
20. oktober 2005 - 22:36 #40
... og hvs du prøver med pige (hus at formen er rettet til value="Pige" med stort 'P')?
Avatar billede rarw Nybegynder
20. oktober 2005 - 22:38 #41
DEBUG: Pige
DEBUG: SELECT * FROM users ORDER BY id ASC

:) er det godt eller dårligt :o?
Avatar billede nielle Nybegynder
20. oktober 2005 - 22:39 #42
Godt med den første linje, dårligt med den anden... Hmm mystiskt..
Avatar billede rarw Nybegynder
20. oktober 2005 - 22:40 #43
hehe :) håber du kan :D
Avatar billede nielle Nybegynder
20. oktober 2005 - 22:42 #44
Prøv lige at vise mig din PHP-kode.
Avatar billede rarw Nybegynder
20. oktober 2005 - 22:44 #45
Poster bare alt sammen hvis du skulle have noget med formen at gøre:

<form method="post" action="seek.php">

<table cellspacing="0" cellpadding="0" style="width: 100%;">
<tr>
<td style="width: 20%;">
<b>Køn:</b>
</td>
<td style="width: 80%;">
Dreng: <input type="checkbox" name="kon[]" value="Dreng" /> Pige: <input type="checkbox" name="kon[]" value="Pige" />
</td>
</tr>

<tr>
<td style="width: 20%;">
<b>Alder:</b>
</td>
<td style="width: 80%;">
Fra: <input type="text" name="age" size="5" maxlength="2" /> Til: <input type="text" name="age2" size="5" maxlength="2" />
</td>
</tr>

<tr>
<td style="width: 20%;">
<b>Postnummer:</b>
</td>
<td style="width: 80%;">
Fra: <input type="text" name="postnr" size="5" maxlength="4" /> Til: <input type="text" name="postnr2" size="5" maxlength="4" />
</td>
</tr>

<tr>
<td style="width: 20%;">
<b>Landsdel:</b>
</td>
<td style="width: 80%;">
<select name="landsdel" size="1" style="width: 240px;">
<option value="">Ikke angivet</option>
<option  value="Bornholm">Bornholm</option>
<option  value="Esbjerg">Esbjerg</option>
<option  value="Fyn">Fyn</option>
<option  value="Frederiksberg">Frederiksberg</option>
<option  value="F&#230;r&#248;erne">F&#230;r&#248;erne</option>
<option  value="Gr&#248;nland">Gr&#248;nland</option>

<option  value="K&#248;benhavn">K&#248;benhavn</option>
<option  value="Lolland/Falster">Lolland/Falster</option>
<option  value="Midtjylland">Midtjylland</option>
<option  value="Nordjylland">Nordjylland</option>
<option value="Nordsj&#230;lland">Nordsj&#230;lland</option>
<option value="Odense">Odense</option>
<option  value="Sj&#230;lland">Sj&#230;lland</option>

<option  value="Sydsj&#230;lland">Sydsj&#230;lland</option>
<option  value="S&#248;nderjylland">S&#248;nderjylland</option>
<option value="&#197;rhus">&#197;rhus</option>
<option value="Aalborg">Aalborg</option>
<option  value="Udlandet">Udlandet</option>
<option value="&#216;stjylland">&#216;stjylland</option>
<option  value="&#216;stsj&#230;lland">&#216;stsj&#230;lland</option>

<option value="Vestjylland">Vestjylland</option>
<option value="Vestsj&#230;lland">Vestsj&#230;lland</option>
</select>
</td>
</tr>

<tr>
<td style="width: 20%;">
<b>Cevil status:</b>
</td>
<td style="width: 80%;">
<select name="status" size="1" style="width: 240px;">
<option value="">Ikke angivet
<option value="Gift">Gift
<option value="Forlovet">Forlovet
<option value="Kæreste">Kæreste
<option value="Netkæreste">Netkæreste

<option  value="Samlever">Samlever
<option value="Single">Single
</select>
</td>
</tr>

<tr>
<td style="width: 20%;">
<b>Profilbillede:</b>
</td>
<td style="width: 80%;">
<input type="checkbox" name="billede" value="yes" />
</td>
</tr>
</table>

<br /><br />

<input type="submit" name="send" value="Søg nu" />

</form>

<br /><br />

<?php

if($_SERVER["REQUEST_METHOD"] == "POST") {

// Starten på SQL-sætningen:
$sql = "SELECT * FROM users ";

// Array til at holde WHERE-delen efterhånden som vi bestemmer den:
$where = array();

if (isset($_POST["kon"]))
{
    $dreng = false;
    $pige = false;

    foreach ($_POST["kon"] as $kon)
    {
        echo "DEBUG: " . $kon . "<br>";
        if ($kon == "Dreng") $dreng = true;
        if ($kon == "Pige") $pige = true;
    }

    if ($dreng XOR $pige)
    {
        if ($dreng)
            $while[] = "kon='Dreng'";
        else
            $while[] = "kon='Pige'";
    }
}

// Hvis der er blot et element i $where skal der en WHERE-del på SQL-kommandoen:
if (count($where) > 0)
{
    $sql .= " WHERE " . implode(" OR ", $where);
}

// Tilsidst en eventuel sortering:
$sql .= " ORDER BY id ASC";

// Og udskriv lige SQL'en sådan at vi kan se det endelige resultat:
echo "DEBUG: " . $sql . "<br>";

}

?>
Avatar billede nielle Nybegynder
20. oktober 2005 - 22:45 #46
Nydeligt :^)

Lige en sidste gang debug:

// Søgning på køn:
if (isset($_POST["kon"]))
{
    $dreng = false;
    $pige = false;

    foreach ($_POST["kon"] as $kon)
    {
        echo "DEBUG: [" . $kon . "]<br>";
        if ($kon == "Dreng") $dreng = true;
        if ($kon == "Pige") $pige = true;
    }

    echo "Dreng" . $dreng . "<br>";
    echo "Pige" . $pige . "<br>";

    if ($dreng XOR $pige)
    {
        if ($dreng)
            $while[] = "kon='Dreng'";
        else
            $while[] = "kon='Pige'";
    }
}
Avatar billede rarw Nybegynder
20. oktober 2005 - 22:47 #47
DEBUG: [Dreng]
Dreng1
Pige
DEBUG: SELECT * FROM users ORDER BY id ASC


For jeg hvis jeg vælger Dreng.
Avatar billede nielle Nybegynder
20. oktober 2005 - 22:50 #48
Prøv lige med:

    if (($dreng XOR $pige) == true)
    {
        if ($dreng == true)
            $while[] = "kon='Dreng'";
        else
            $while[] = "kon='Pige'";
    }
Avatar billede nielle Nybegynder
20. oktober 2005 - 22:51 #49
... og så er jeg ellers ved at måtte smutte for i dag. Regner bestemt med at gøre den færdig i morgen. :^)
Avatar billede rarw Nybegynder
20. oktober 2005 - 22:51 #50
Det samme :/
Avatar billede nielle Nybegynder
20. oktober 2005 - 22:53 #51
Prøv lige at give mig resultatet af 20/10-2005 22:50:30
Avatar billede rarw Nybegynder
20. oktober 2005 - 22:55 #52
DEBUG: [Dreng]
Dreng1
Pige
DEBUG: SELECT * FROM users ORDER BY id ASC
Avatar billede nielle Nybegynder
21. oktober 2005 - 09:43 #53
Hmm... XOR virker ikke rigtigt som jeg forventer det? Pårv med dette i stedet:

if ($dreng ^ $pige)
{
    if ($dreng)
        $while[] = "kon='Dreng'";
    else
        $while[] = "kon='Pige'";
}
Avatar billede rarw Nybegynder
21. oktober 2005 - 11:04 #54
DEBUG: [Dreng]
Dreng1
Pige
DEBUG: SELECT * FROM users ORDER BY id ASC

Kommer der hvis jeg vælger Dreng. :P
Avatar billede nielle Nybegynder
21. oktober 2005 - 11:23 #55
Så prøv ar rette:

if ($dreng ^ $pige)

- til:

if (($dreng && !$pige) || (!$dreng && $pige))
Avatar billede rarw Nybegynder
21. oktober 2005 - 11:39 #56
Det samme :(

DEBUG: [Dreng]
Dreng1
Pige
DEBUG: SELECT * FROM users ORDER BY id ASC
Avatar billede nielle Nybegynder
21. oktober 2005 - 12:45 #57
Nu gider jeg ikke arbejde med den mere ... det er sgu for mystisk.

Her er en helt ny version:

// Søgning på køn:
if (isset($_POST["kon"]))
{
    $antalkon = 0;
    $drengpige = "";

    foreach ($_POST["kon"] as $kon)
    {
        if ($kon == "Dreng" || $kon == "Pige")
        {
            $antalkon++;
            $drengpige = $kon;
        }
    }

    if ($antalkon==0 || $antalkon==2)
    {
        $while[] = "kon='" . $drengpige . "'";
    }
}
Avatar billede nielle Nybegynder
21. oktober 2005 - 12:46 #58
... alternativt denne:

// Søgning på køn:
if (isset($_POST["kon"]))
{
    $antalkon = 0;
    $drengpige = "";

    foreach ($_POST["kon"] as $kon)
    {
        $antalkon++;
        $drengpige = $kon;
    }

    if ($antalkon==0 || $antalkon==2)
    {
        $while[] = "kon='" . $drengpige . "'";
    }
}
Avatar billede rarw Nybegynder
21. oktober 2005 - 12:49 #59
DEBUG: SELECT * FROM users ORDER BY id ASC

For jeg med både den fra

21/10-2005 12:45:27

og den fra

21/10-2005 12:46:31
Avatar billede nielle Nybegynder
21. oktober 2005 - 12:58 #60
DOH! Jeg tåbe!

Ret alle de steder hvor der står $while til $where! Det har sikkert virket korrekt hele tiden. :^|
Avatar billede rarw Nybegynder
21. oktober 2005 - 13:24 #61
Hehe :p

Jeg har gjort, og der var kun et sted : $where[] = "kon='" . $drengpige . "'";

Men der kommer bare når jeg vælger Dreng:

DEBUG: SELECT * FROM users ORDER BY id ASC

Men hvis jeg vælger begge:


DEBUG: SELECT * FROM users WHERE kon='Pige' ORDER BY id ASC
Avatar billede nielle Nybegynder
21. oktober 2005 - 13:36 #62
Ret til:

if ($antalkon==1)
{
    $while[] = "kon='" . $drengpige . "'";
}
Avatar billede rarw Nybegynder
21. oktober 2005 - 13:39 #63
Du glemte det skulle være $where ;p

Men ja det virker :D

Dreng:
DEBUG: SELECT * FROM users WHERE kon='Dreng' ORDER BY id ASC

Pige:
DEBUG: SELECT * FROM users WHERE kon='Pige' ORDER BY id ASC

Men når jeg vælger begge kommer:

DEBUG: SELECT * FROM users ORDER BY id ASC

Men det skal den vel også ikke? fordi så tager den bare ligemeget om det er piger eller drenge :)?
Avatar billede nielle Nybegynder
21. oktober 2005 - 13:41 #64
Korrekt.

Videre til alderen :^)
Avatar billede rarw Nybegynder
21. oktober 2005 - 13:52 #65
:) yep
Avatar billede nielle Nybegynder
21. oktober 2005 - 14:51 #66
Prøv med denne:

// Søgning på alder:
if (isset($_POST["age"]) || isset($_POST["age2"]))
{
    $ageWhere = array();

    if (isset($_POST["age"]))
    {
        $age = $_POST["age"];
        if (isnumber($age))
        {
            $ageWhere[] = $age . "<=time("Y") . "-born_year";
        }
    }

    if (isset($_POST["age2"]))
    {
        $age2 = $_POST["age2"];
        if (isnumber($age2))
        {
            $ageWhere[] = "time("Y") . "-born_year<=" . $age2;
        }
    }

    if (count($ageWhere) > 1)
    {
        $where[] = "(" . implode(" AND ", $ageWhere) . ")";
    }
    elseif (count($ageWhere) == 1)
    {
        $where[] = $ageWhere[0];
    }
}
Avatar billede rarw Nybegynder
21. oktober 2005 - 14:54 #67
Der kommer bare en blank side :o

Det vil sige der er fejl ikke ?
Avatar billede nielle Nybegynder
21. oktober 2005 - 15:55 #68
Uden (nær så mange) fejl:

// Søgning på alder:
if (isset($_POST["age"]) || isset($_POST["age2"]))
{
    $ageWhere = array();

    if (isset($_POST["age"]))
    {
        $age = $_POST["age"];
        if (isnumber($age))
        {
            $ageWhere[] = $age . "<=" . time("Y") . "-born_year";
        }
    }

    if (isset($_POST["age2"]))
    {
        $age2 = $_POST["age2"];
        if (isnumber($age2))
        {
            $ageWhere[] = time("Y") . "-born_year<=" . $age2;
        }
    }

    if (count($ageWhere) > 1)
    {
        $where[] = "(" . implode(" AND ", $ageWhere) . ")";
    }
    elseif (count($ageWhere) == 1)
    {
        $where[] = $ageWhere[0];
    }
}
Avatar billede rarw Nybegynder
21. oktober 2005 - 16:01 #69
Når jeg klikker på søg fjernes bunden af mit design :O
Avatar billede nielle Nybegynder
21. oktober 2005 - 16:12 #70
Du får ikke din debugudskrift fra tidligere?

Prøv evt. at udskifte isnumber() med isnumeric() - selvom jeg nu mener at det er isnumber().
Avatar billede rarw Nybegynder
21. oktober 2005 - 16:19 #71
Nope den for jeg ikke.

Og isnumberic hjalp heller ikke :(
Avatar billede nielle Nybegynder
21. oktober 2005 - 16:34 #72
date() i stedet for time() :

// Søgning på alder:
if (isset($_POST["age"]) || isset($_POST["age2"]))
{
    $ageWhere = array();

    if (isset($_POST["age"]))
    {
        $age = $_POST["age"];
        if (isnumber($age))
        {
            $ageWhere[] = $age . "<=" . date("Y") . "-born_year";
        }
    }

    if (isset($_POST["age2"]))
    {
        $age2 = $_POST["age2"];
        if (isnumber($age2))
        {
            $ageWhere[] = date("Y") . "-born_year<=" . $age2;
        }
    }

    if (count($ageWhere) > 1)
    {
        $where[] = "(" . implode(" AND ", $ageWhere) . ")";
    }
    elseif (count($ageWhere) == 1)
    {
        $where[] = $ageWhere[0];
    }
}
Avatar billede rarw Nybegynder
21. oktober 2005 - 16:39 #73
Det samme, den fjerner bunden, og intet output :o

Skal jeg taget et screenshot ?
Avatar billede rarw Nybegynder
21. oktober 2005 - 17:20 #74
Tænkte på om det ikke var nemmere over msn ?

- og så poste det færdige resultat når det lykkedes :)?
Avatar billede nielle Nybegynder
21. oktober 2005 - 23:11 #75
Jeg bruger desværre ikke MSN - eller andre IM-programmer for den sags skyld :^|
Avatar billede rarw Nybegynder
22. oktober 2005 - 00:31 #76
Nå okey :) så lad os bare komme vidre :)
Avatar billede nielle Nybegynder
22. oktober 2005 - 12:22 #77
Ja, lad os det. Vi har nu heller ikke så langt tilbage.

Grunden til at du får en halv side tilbage er at din PHP installation er sat op til ikek at vise fejlbeskeder. Problemet var at hverken isnumber() eller is numeric() er PHP-funktioner (jeg huskede dem fra andet sted). Prøv dette i stedet:

// Søgning på alder:
if (isset($_POST["age"]) || isset($_POST["age2"]))
{
    $ageWhere = array();

    if (isset($_POST["age"]))
    {
        $age = $_POST["age"];
        if (preg_match("/^\d+$/", $age))
        {
            $ageWhere[] = $age . "<=" . date("Y") . "-born_year";
        }
    }

    if (isset($_POST["age2"]))
    {
        $age2 = $_POST["age2"];
        if (preg_match("/^\d+$/", $age2))
        {
            $ageWhere[] = date("Y") . "-born_year<=" . $age2;
        }
    }

    if (count($ageWhere) > 1)
    {
        $where[] = "(" . implode(" AND ", $ageWhere) . ")";
    }
    elseif (count($ageWhere) == 1)
    {
        $where[] = $ageWhere[0];
    }
}
Avatar billede nielle Nybegynder
22. oktober 2005 - 14:32 #78
Postnummeret:

// Søgning på postnumer:
if (isset($_POST["postnr"]) || isset($_POST["postnr2"]))
{
    $postnrWhere = array();

    if (isset($_POST["postnr"]))
    {
        $postnr = $_POST["postnr"];
        if (preg_match("/^\d+$/", $postnr))
        {
            $postnrWhere[] = $postnr . "<=post_nummer";
        }
    }

    if (isset($_POST["postnr2"]))
    {
        $postnr2 = $_POST["postnr2"];
        if (preg_match("/^\d+$/", $postnr2))
        {
            $postnrWhere[] = "post_nummer<=" . $postnr2;
        }
    }

    if (count($postnrWhere) > 1)
    {
        $where[] = "(" . implode(" AND ", $postnrWhere) . ")";
    }
    elseif (count($postnrWhere) == 1)
    {
        $where[] = $postnrWhere[0];
    }
}
Avatar billede nielle Nybegynder
22. oktober 2005 - 14:37 #79
Landsdelen:

// Søgning på landsdel:
if (isset($_POST["landsdel"]) && $_POST["landsdel"]!="")
{
    $where[] = "landsdel='" . $_POST["landsdel"] . "'";
}
Avatar billede nielle Nybegynder
22. oktober 2005 - 14:40 #80
Civil status (staves med 'i' i stedet for 'e' som i din tabel)

// Søgning på civil status:
if (isset($_POST["status"]) && $_POST["status"]!="")
{
    $where[] = "cevil_status='" . $_POST["status"] . "'";
}
Avatar billede rarw Nybegynder
22. oktober 2005 - 15:04 #81
:) okey, har bare ændret navnet til status i phpmyadmin.

DEBUG: SELECT * FROM users WHERE (12<=2005-born_year AND 2005-born_year<=29) ORDER BY id ASC

Kommer der hvis jeg vælger alder fra 9 til 29 :) er det rigtigt?

DEBUG: SELECT * FROM users WHERE (4100<=post_nummer AND post_nummer<=4300) ORDER BY id ASC Kommer der når jeg eks søger fra 4100 til 4300 :) rigtigt? men feltet hedder postnr i phpmyadmin :)

Og det andet med landsdel og status virker :D

Men det med alder. Har et spørgsmål :) altså, hvis hvis man søger på alderen fra 15 til et eller andet, og man bliver 15 i 2005 men måske først i december, så tager den ikke en med i søgningen vel :)?
Avatar billede nielle Nybegynder
22. oktober 2005 - 15:17 #82
Det var nu dig selv som skrev at dit felt hed post_nummeri det oprindelige spørgsmål. Du skal selvfølgelig bare rette koden sådan at der kommer til at stå postnr.

Den med alderen skal jeg lige arbejde lidte mere på.
Avatar billede rarw Nybegynder
22. oktober 2005 - 15:22 #83
Hehe ja må du undskylde ;).

:) okey, fedt ! tusindetak.

Og den vil ikke tage køn med hvis jeg vælger måde Dreng og Pige :/
Avatar billede nielle Nybegynder
22. oktober 2005 - 15:26 #84
Det skal den jo heller ikke - for hvis du vælger dem begge to så et det jo lige meget om det er en derng eller píge.

Mht. ag´lder så ville det være praktisk hvis du kunne slå de tre felter born_year, born_month og born_date sammen til et enkelt date-felt (f.eks. kaldet born).
Avatar billede rarw Nybegynder
22. oktober 2005 - 15:29 #85
Nåå ja :D heheh.

Så skal jeg til at ændre hele mit system :O, og hvordan gør jeg så nør man er inde og rette i sin profil,. Men hmm, kan da godt prøve :)
Avatar billede nielle Nybegynder
22. oktober 2005 - 15:31 #86
Noget som har med datoer at gør bør altid gemmes som en date-type ... det er kun sjældent en god ide at dele den over tre tal-felter. Det samme gælder for tidspunkter ... disse bør som regel gemmes i time- eller datetime-felter.
Avatar billede rarw Nybegynder
22. oktober 2005 - 15:34 #87
Okey, jeg har oprettet feltet born med Datatype Time :)
Avatar billede nielle Nybegynder
22. oktober 2005 - 15:35 #88
Dar du ikke en Date-type (i stedet for time)?
Avatar billede rarw Nybegynder
22. oktober 2005 - 15:39 #89
Jo okey, men så ryger den også en 00:00:00 tid ting på :o
Avatar billede rarw Nybegynder
22. oktober 2005 - 15:40 #90
Nej sådan.

Så når man retter sin profil har jeg prøvet med:

born = '".$_POST["born_year"]."".$_POST["born_month"]."".$_POST["born_day"]."',

Men den ændre det ikk. :/
Avatar billede rarw Nybegynder
22. oktober 2005 - 15:43 #91
Sådan :) har fundet ud af det :)

Virker , så du kan godt lave det med feltet born nu ;)
Avatar billede nielle Nybegynder
22. oktober 2005 - 15:47 #92
Jeg er i færd :^)
Avatar billede nielle Nybegynder
22. oktober 2005 - 15:54 #93
Sådan:

// Søgning på alder:
if (isset($_POST["age"]) || isset($_POST["age2"]))
{
    $ageWhere = array();

    if (isset($_POST["age"]))
    {
        $age = $_POST["age"];
        if (preg_match("/^\d+$/", $age))
        {
            $ageWhere[] = "born<=DATE_SUB(CURRDATE(), INTERVAL " . $age . " YEAR)";
        }
    }

    if (isset($_POST["age2"]))
    {
        $age2 = $_POST["age2"];
        if (preg_match("/^\d+$/", $age2))
        {
            $ageWhere[] = "DATE_SUB(CURRDATE(), INTERVAL " . $age2 . " YEAR)<=born";
        }
    }

    if (count($ageWhere) > 1)
    {
        $where[] = "(" . implode(" AND ", $ageWhere) . ")";
    }
    elseif (count($ageWhere) == 1)
    {
        $where[] = $ageWhere[0];
    }
}
Avatar billede rarw Nybegynder
22. oktober 2005 - 15:56 #94
DEBUG: SELECT * FROM users WHERE (born<=DATE_SUB(CURRDATE(), INTERVAL 12 YEAR) AND DATE_SUB(CURRDATE(), INTERVAL 15 YEAR)<=born) ORDER BY id ASC

For jeg hvis jeg vælger fra 12 til 15 :) rigtigt :D?
Avatar billede nielle Nybegynder
22. oktober 2005 - 15:56 #95
Det ser rigtigt nok ud. :^)
Avatar billede rarw Nybegynder
22. oktober 2005 - 15:58 #96
:) jamen det var vel så det ? :D

Smid et svar mester :)
Avatar billede nielle Nybegynder
22. oktober 2005 - 16:00 #97
Skal vi ikke lige afprøve den for at vi siger at det var det?

Nu har vi så en SQL, prøv at fyre den af imod databasen i nogle forskellige kombinationer.
Avatar billede rarw Nybegynder
22. oktober 2005 - 16:01 #98
Jo lad os det :)

Yep prøver jeg lige at lege med, 2 min :)
Avatar billede nielle Nybegynder
22. oktober 2005 - 16:38 #99
Problemer?
Avatar billede rarw Nybegynder
22. oktober 2005 - 17:04 #100
Nej :)

JEg skal bare lige opsætte resultaterne rigtigt :D
Avatar billede rarw Nybegynder
22. oktober 2005 - 17:20 #101
Det med alder virker vidst ikke, selv om jeg vælger fra alder 15 til 17 og der er brugere med den alder. :/
Avatar billede nielle Nybegynder
22. oktober 2005 - 17:31 #102
Prøv at fyre denne af via din phpmyadmin:

SELECT * FROM users WHERE (born<=DATE_SUB(CURRDATE(), INTERVAL 15 YEAR) AND DATE_SUB(CURRDATE(), INTERVAL 17 YEAR)<=born) ORDER BY id ASC

Før du slet ikke noget, eller får du måske en fejlmeddelelse.
Avatar billede rarw Nybegynder
22. oktober 2005 - 18:19 #103
SQL-forespørgsel :

SELECT *
FROM users
WHERE (
born <= DATE_SUB( CURRDATE(
), INTERVAL 15 YEAR ) AND DATE_SUB( CURRDATE(
), INTERVAL 17 YEAR ) <= born
)
ORDER BY id ASC
LIMIT 0 , 30

MySQL returnerede:
#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near '(  ),  INTERVAL 15 YEAR )  AND DATE_SUB( CURRDATE(  ),  INTERVA

For jeg :O
Avatar billede nielle Nybegynder
22. oktober 2005 - 20:08 #104
Ret CURRDATE til CURDATE eller til CURR_DATE
Avatar billede rarw Nybegynder
22. oktober 2005 - 20:12 #105
Yepp :) nu kommer de frem,

Men hvis man skriver fra 16 år til 16 år så der kun kommer 16 årige frem, så finder den ingen :/

Kan du lave det :)?

Men ellers Virker det 100% :D
Avatar billede nielle Nybegynder
22. oktober 2005 - 20:40 #106
Prøv med denne:

// Søgning på alder:
if (isset($_POST["age"]) || isset($_POST["age2"]))
{
    $ageWhere = array();

    if (isset($_POST["age"]))
    {
        $age = $_POST["age"];
        if (preg_match("/^\d+$/", $age))
        {
            $ageWhere[] = "born<=DATE_SUB(CURDATE(), INTERVAL " . $age . " YEAR)";
        }
    }

    if (isset($_POST["age2"]))
    {
        $age2 = $_POST["age2"];
        if (preg_match("/^\d+$/", $age2))
        {
            $ageWhere[] = "DATE_SUB(CURDATE(), INTERVAL " . $age2+1 . " YEAR)<born";
        }
    }

    if (count($ageWhere) > 1)
    {
        $where[] = "(" . implode(" AND ", $ageWhere) . ")";
    }
    elseif (count($ageWhere) == 1)
    {
        $where[] = $ageWhere[0];
    }
}
Avatar billede rarw Nybegynder
22. oktober 2005 - 20:52 #107
Nej, nu kommer der slet ikke nogle når man søger på alder.
Avatar billede nielle Nybegynder
22. oktober 2005 - 20:56 #108
Orøv lige at poste den genererede SQL-sætning, og afprøv den også lige i phpmuadmin og se hvad der sker der.
Avatar billede rarw Nybegynder
22. oktober 2005 - 21:27 #109
SELECT * FROM users WHERE (born<=DATE_SUB(CURDATE(), INTERVAL 16 YEAR) AND 1 YEAR)

Den for jeg hvis jeg siger fra 16 til 16

Og dette i phpmyadmin:

SQL-forespørgsel :

SELECT *
FROM users
WHERE (
born <= DATE_SUB( CURDATE( ) , INTERVAL 16 YEAR ) AND 1 YEAR
)
LIMIT 0 , 30

MySQL returnerede:
#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'YEAR ) LIMIT 0, 30' at line 3
Avatar billede nielle Nybegynder
22. oktober 2005 - 21:43 #110
Prøv ar rette:

$age2 = $_POST["age2"];

- til:

$age2 = (int) $_POST["age2"];

- sådan at $age2 bliver til et heltal i stedet for at være en streng.
Avatar billede rarw Nybegynder
22. oktober 2005 - 21:48 #111
SELECT * FROM users WHERE 1 YEAR)

For jeg og ingen resultater.

Lige meget om jeg ikke søger på alder :O
Avatar billede nielle Nybegynder
22. oktober 2005 - 21:54 #112
// Søgning på alder:
if (isset($_POST["age"]) || isset($_POST["age2"]))
{
    $ageWhere = array();

    if (isset($_POST["age2"]))
    {
        $age2 = $_POST["age2"];
        if (preg_match("/^\d+$/", $age2))
        {
            $ageWhere[] = "DATE_SUB(CURRDATE(), INTERVAL " . ($age2+1) . " YEAR)<=born";
        }
    }

    if (isset($_POST["age"]))
    {
        $age = $_POST["age"];
        if (preg_match("/^\d+$/", $age))
        {
            $ageWhere[] = "born<=DATE_SUB(CURRDATE(), INTERVAL " . $age . " YEAR)";
        }
    }

    if (count($ageWhere) > 1)
    {
        $where[] = "(" . implode(" AND ", $ageWhere) . ")";
    }
    elseif (count($ageWhere) == 1)
    {
        $where[] = $ageWhere[0];
    }
}
Avatar billede nielle Nybegynder
22. oktober 2005 - 21:58 #113
En lille finesse; Ret:

$ageWhere[] = "DATE_SUB(CURRDATE(), INTERVAL " . ($age2+1) . " YEAR)<=born";

- til:

$ageWhere[] = "DATE_SUB(CURRDATE(), INTERVAL " . ($age2+1) . " YEAR)<born";
Avatar billede rarw Nybegynder
22. oktober 2005 - 22:46 #114
SELECT * FROM users WHERE (DATE_SUB(CURRDATE(), INTERVAL 17 YEAR)<=DATE_SUB(CURRDATE(), INTERVAL 16 YEAR)) ORDER BY id ASC

For jeg hvis jeg søger fra: 16 til: 16.

Og ingen resultater :O
Avatar billede nielle Nybegynder
22. oktober 2005 - 22:48 #115
CURRDATE -> CURDATE (undskyld)
Avatar billede rarw Nybegynder
22. oktober 2005 - 22:54 #116
PERFEKT ! :D

VIl du have et screenshot :) så du kan se resultatet :)?
Avatar billede nielle Nybegynder
22. oktober 2005 - 22:55 #117
Hvis du siger at det er perfekt så stoler jeg da på det. :^)

... men jo tak det vil jeg da gerne.
Avatar billede rarw Nybegynder
22. oktober 2005 - 22:59 #118
Eller der er vidst noget galt :O

http://ung-net.dk/se.jpg den vælger også drenge med. :O
Avatar billede nielle Nybegynder
22. oktober 2005 - 23:10 #119
Det er jo problemet med den OR-søgning som jeg spurte til i 20/10-2005 21:13:50. Hvis bloe at man opfylder et af kriterierne så kommer man med.

Det lyder til at du heller ville have en AND, så prøv at rette:

$sql .= " WHERE " . implode(" OR ", $where);

- til:

$sql .= " WHERE " . implode(" AND ", $where);
Avatar billede rarw Nybegynder
22. oktober 2005 - 23:15 #120
:) ja sådan, nu virker det 100% er jeg rimlig sikker på :D

Mange mange tak skal du have, :) var sødt af dig !
Avatar billede nielle Nybegynder
22. oktober 2005 - 23:26 #121
Takker for point :^)
Avatar billede rarw Nybegynder
22. oktober 2005 - 23:33 #122
Så lidt ;)
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