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 :)
Annonceindlæg fra HP
20. oktober 2005 - 20:16
#1
Hvor meget kan du kode selv?
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
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?
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ærøerne">Færøerne</option> <option value="Grønland">Grønland</option> <option value="København">København</option> <option value="Lolland/Falster">Lolland/Falster</option> <option value="Midtjylland">Midtjylland</option> <option value="Nordjylland">Nordjylland</option> <option value="Nordsjælland">Nordsjælland</option> <option value="Odense">Odense</option> <option value="Sjælland">Sjælland</option> <option value="Sydsjælland">Sydsjælland</option> <option value="Sønderjylland">Sønderjylland</option> <option value="Århus">Århus</option> <option value="Aalborg">Aalborg</option> <option value="Udlandet">Udlandet</option> <option value="Østjylland">Østjylland</option> <option value="Østsjælland">Østsjælland</option> <option value="Vestjylland">Vestjylland</option> <option value="Vestsjælland">Vestsjæ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>
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".
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?
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)?
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.
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 :)
20. oktober 2005 - 21:16
#10
Din form?
20. oktober 2005 - 21:20
#11
Min form ? :)
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?).
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ærøerne">Færøerne</option> <option value="Grønland">Grønland</option> <option value="København">København</option> <option value="Lolland/Falster">Lolland/Falster</option> <option value="Midtjylland">Midtjylland</option> <option value="Nordjylland">Nordjylland</option> <option value="Nordsjælland">Nordsjælland</option> <option value="Odense">Odense</option> <option value="Sjælland">Sjælland</option> <option value="Sydsjælland">Sydsjælland</option> <option value="Sønderjylland">Sønderjylland</option> <option value="Århus">Århus</option> <option value="Aalborg">Aalborg</option> <option value="Udlandet">Udlandet</option> <option value="Østjylland">Østjylland</option> <option value="Østsjælland">Østsjælland</option> <option value="Vestjylland">Vestjylland</option> <option value="Vestsjælland">Vestsjæ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>
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
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.
20. oktober 2005 - 21:34
#16
Men nu er det int(4) :)
20. oktober 2005 - 21:34
#17
Postnumre er jo kun noget som skal ind i databasen en gang for alle.
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 :)
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... :^)
20. oktober 2005 - 21:39
#20
Hehe okey :D
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.
20. oktober 2005 - 21:49
#22
Så viser den både piger og drenge :) Hov sorry, lav pige til Pige :)
20. oktober 2005 - 21:50
#23
Ok, det gør jeg så :^)
20. oktober 2005 - 21:55
#24
Tak :)
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?
20. oktober 2005 - 22:12
#26
Min tabel hedder users :) Hvad gør jeg så nu :D?
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.
20. oktober 2005 - 22:15
#28
... og din form skal i øvrigt bare se sådan her ud: <form method="post" action="seek.php">
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
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).
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.
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
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!
20. oktober 2005 - 22:25
#34
skulle jeg fjerne $where[] = "Betingelse1"; $where[] = "Betingelse2"; $where[] = "Betingelse3"; $where[] = "Betingelse4"; :D?
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
20. oktober 2005 - 22:26
#36
Nærlsæ lige 20/10-2005 22:20:52 igen ;^)
20. oktober 2005 - 22:28
#37
Nåå. :) hehe ja, det gjorder jeg og fik denne kode DEBUG: SELECT * FROM users ORDER BY id ASC :)
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'"; } }
20. oktober 2005 - 22:32
#39
For jeg nu: DEBUG: Dreng DEBUG: SELECT * FROM users ORDER BY id ASC
20. oktober 2005 - 22:36
#40
... og hvs du prøver med pige (hus at formen er rettet til value="Pige" med stort 'P')?
20. oktober 2005 - 22:38
#41
DEBUG: Pige DEBUG: SELECT * FROM users ORDER BY id ASC :) er det godt eller dårligt :o?
20. oktober 2005 - 22:39
#42
Godt med den første linje, dårligt med den anden... Hmm mystiskt..
20. oktober 2005 - 22:40
#43
hehe :) håber du kan :D
20. oktober 2005 - 22:42
#44
Prøv lige at vise mig din PHP-kode.
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ærøerne">Færøerne</option> <option value="Grønland">Grønland</option> <option value="København">København</option> <option value="Lolland/Falster">Lolland/Falster</option> <option value="Midtjylland">Midtjylland</option> <option value="Nordjylland">Nordjylland</option> <option value="Nordsjælland">Nordsjælland</option> <option value="Odense">Odense</option> <option value="Sjælland">Sjælland</option> <option value="Sydsjælland">Sydsjælland</option> <option value="Sønderjylland">Sønderjylland</option> <option value="Århus">Århus</option> <option value="Aalborg">Aalborg</option> <option value="Udlandet">Udlandet</option> <option value="Østjylland">Østjylland</option> <option value="Østsjælland">Østsjælland</option> <option value="Vestjylland">Vestjylland</option> <option value="Vestsjælland">Vestsjæ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>"; } ?>
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'"; } }
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.
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'"; }
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. :^)
20. oktober 2005 - 22:51
#50
Det samme :/
20. oktober 2005 - 22:53
#51
Prøv lige at give mig resultatet af 20/10-2005 22:50:30
20. oktober 2005 - 22:55
#52
DEBUG: [Dreng] Dreng1 Pige DEBUG: SELECT * FROM users ORDER BY id ASC
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'"; }
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
21. oktober 2005 - 11:23
#55
Så prøv ar rette: if ($dreng ^ $pige) - til: if (($dreng && !$pige) || (!$dreng && $pige))
21. oktober 2005 - 11:39
#56
Det samme :( DEBUG: [Dreng] Dreng1 Pige DEBUG: SELECT * FROM users ORDER BY id ASC
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 . "'"; } }
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 . "'"; } }
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
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. :^|
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
21. oktober 2005 - 13:36
#62
Ret til: if ($antalkon==1) { $while[] = "kon='" . $drengpige . "'"; }
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 :)?
21. oktober 2005 - 13:41
#64
Korrekt. Videre til alderen :^)
21. oktober 2005 - 13:52
#65
:) yep
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]; } }
21. oktober 2005 - 14:54
#67
Der kommer bare en blank side :o Det vil sige der er fejl ikke ?
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]; } }
21. oktober 2005 - 16:01
#69
Når jeg klikker på søg fjernes bunden af mit design :O
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().
21. oktober 2005 - 16:19
#71
Nope den for jeg ikke. Og isnumberic hjalp heller ikke :(
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]; } }
21. oktober 2005 - 16:39
#73
Det samme, den fjerner bunden, og intet output :o Skal jeg taget et screenshot ?
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 :)?
21. oktober 2005 - 23:11
#75
Jeg bruger desværre ikke MSN - eller andre IM-programmer for den sags skyld :^|
22. oktober 2005 - 00:31
#76
Nå okey :) så lad os bare komme vidre :)
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]; } }
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]; } }
22. oktober 2005 - 14:37
#79
Landsdelen: // Søgning på landsdel: if (isset($_POST["landsdel"]) && $_POST["landsdel"]!="") { $where[] = "landsdel='" . $_POST["landsdel"] . "'"; }
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"] . "'"; }
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 :)?
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å.
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 :/
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).
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 :)
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.
22. oktober 2005 - 15:34
#87
Okey, jeg har oprettet feltet born med Datatype Time :)
22. oktober 2005 - 15:35
#88
Dar du ikke en Date-type (i stedet for time)?
22. oktober 2005 - 15:39
#89
Jo okey, men så ryger den også en 00:00:00 tid ting på :o
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. :/
22. oktober 2005 - 15:43
#91
Sådan :) har fundet ud af det :) Virker , så du kan godt lave det med feltet born nu ;)
22. oktober 2005 - 15:47
#92
Jeg er i færd :^)
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]; } }
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?
22. oktober 2005 - 15:56
#95
Det ser rigtigt nok ud. :^)
22. oktober 2005 - 15:58
#96
:) jamen det var vel så det ? :D Smid et svar mester :)
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.
22. oktober 2005 - 16:01
#98
Jo lad os det :) Yep prøver jeg lige at lege med, 2 min :)
22. oktober 2005 - 16:38
#99
Problemer?
22. oktober 2005 - 17:04
#100
Nej :) JEg skal bare lige opsætte resultaterne rigtigt :D
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. :/
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.
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
22. oktober 2005 - 20:08
#104
Ret CURRDATE til CURDATE eller til CURR_DATE
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
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]; } }
22. oktober 2005 - 20:52
#107
Nej, nu kommer der slet ikke nogle når man søger på alder.
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.
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
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.
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
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]; } }
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";
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
22. oktober 2005 - 22:48
#115
CURRDATE -> CURDATE (undskyld)
22. oktober 2005 - 22:54
#116
PERFEKT ! :D VIl du have et screenshot :) så du kan se resultatet :)?
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.
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);
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 !
22. oktober 2005 - 23:26
#121
Takker for point :^)
22. oktober 2005 - 23:33
#122
Så lidt ;)
Vi tilbyder markedets bedste kurser inden for webudvikling