/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
List/Menu filter ??
Fra : Michael


Dato : 25-02-05 08:10

Hej NG

Kan man lave et filter med PHP... ?
Jeg er ved at lave en side med en database, hvor jeg skal bruge et filter,
men jeg kan ikke rigtig finde et script til det...

Det jeg har i tankerne er at man ex. trykker på Musik i menuen.
Så kommer der en lang liste med alle de musiknavne der er i databasen.
Ovenover listen er der så nogle filtre i form af en list/menu.

Man kan så vælge, i den første list/menu, mellem solo, duo trio osv, og når
man har valg (ex solo) skriver den kun solo musikerne i listen.
Vælger man så bagefter Sjælland i nummer 2 list/menu, lister den solo
musikere der spiller på sjælland.
Og tager man så solo filteret fra igen, listen den alle musikere der spiller
på Sjælland...

Altså et filter med flere filtreringer, som man kan vælge u afhængig af
hinanden. ???


Er der nogle der har en ide, eller måske ved hvor man kan finde nogle
scripts til noget der ligner


På forhånd tak
Michael



 
 
Thomas Lindgaard (25-02-2005)
Kommentar
Fra : Thomas Lindgaard


Dato : 25-02-05 10:41

On Fri, 25 Feb 2005 08:10:04 +0100, Michael wrote:

> Er der nogle der har en ide, eller måske ved hvor man kan finde nogle
> scripts til noget der ligner

Det burde ikke være svært at lave, men du kan sikkert ikke finde noget
færdigt, da det afhænger af database-designet.

Vælg al musik:
SELECT * FROM musik;

Filtrer på duo/trio/...:
SELECT * FROM musik WHERE antal_musikere=2;

Filtrer på sjællændere/danskere:
SELECT * FROM musik WHERE antal_musikere=2 AND nationalitet='dk';

osv.

--
Mvh.
/Thomas


T (25-02-2005)
Kommentar
Fra : T


Dato : 25-02-05 12:20


"Thomas Lindgaard" <thomas@it-snedkeren.BLACK_HOLE.dk> skrev i en meddelelse
news:pan.2005.02.25.09.40.36.29355@it-snedkeren.BLACK_HOLE.dk...
> On Fri, 25 Feb 2005 08:10:04 +0100, Michael wrote:
>
> Det burde ikke være svært at lave, men du kan sikkert ikke finde noget
> færdigt, da det afhænger af database-designet.
>
> Vælg al musik:
> SELECT * FROM musik;
>
> Filtrer på duo/trio/...:
> SELECT * FROM musik WHERE antal_musikere=2;
>
> Filtrer på sjællændere/danskere:
> SELECT * FROM musik WHERE antal_musikere=2 AND nationalitet='dk';
>
> osv.
>

Men hvordan får jeg det jeg vælger i list/menu'en til at påvirke WHERE
antal_musikere=2 kommando'en... ?
Og hvis man ikke har valgt noget i nationalitet skal den jo ikke have det
med i WHERE kommandoen, først når man vælger noget... ?



Leonard (25-02-2005)
Kommentar
Fra : Leonard


Dato : 25-02-05 12:29

"T" <m@h.dk> wrote:

>Men hvordan får jeg det jeg vælger i list/menu'en til at påvirke WHERE
>antal_musikere=2 kommando'en... ?

Listen indeholdes i <form> som du passende kan give action til siden
selv.
Så reloades siden med de nye værdier i og i din php-kode bygger du
SELECT-sætningen op udfra hvad der er i $_POST[] (eller $_GET[]).

Skriv et forsøg på noget og læg det online, både i en .php og en .phps
så vi kan se hvad du har lavet, så skal der nok være nogen der vil
hjælpe dig med at rette det til så det virker.

--
mvh Leonard
Har du kigget på: http://dk.php.net/ el. http://www.webcafe.dk/

Michael (26-02-2005)
Kommentar
Fra : Michael


Dato : 26-02-05 10:40


"Leonard" <usenet@leonard.dk> skrev i en meddelelse
news:gn2u1155j5ov00bpvbb54g4mr56lfa77hh@4ax.com...
> "T" <m@h.dk> wrote:
>
> SELECT-sætningen op udfra hvad der er i $_POST[] (eller $_GET[]).
>
> Skriv et forsøg på noget og læg det online, både i en .php og en .phps
> så vi kan se hvad du har lavet, så skal der nok være nogen der vil
> hjælpe dig med at rette det til så det virker.
>


Nu stod jeg vist lidt af...
Jeg har ikke siden det skal ligge på endnu, men jeg kan da ligge koderne i
meget simpel form her.

Jeg har lavet 2 list/menuer og jeg har lavet et meget lille php script som
ikke laver andet end at skrive dataene fra databasen i en lang smøre... Hvis
bare det kan virker, kan jeg sagtens selv lave alt html kodningen.



<form name="Katagori" action="" method="post">
<select name="Katagori">
<option>Solo</option>
<option>Duo</option>
<option>Trio</option>
</select>
</form>

<form name="Lokation" action="" method="post">
<select name="Lokation">
<option>Sjælland</option>
<option>Fyn</option>
<option>Jylland</option>
</select>
</form>

<?php
$conn = mysql_connect("localhost", "brugernavn", "password");
mysql_select_db("database");
$result = mysql_query("select * from Musik WHERE
???????????????????????????????????");
while ($row = mysql_fetch_array($result)) {
echo $row["Navn"], $row["Kategori"], $row["Lokation"];
}
mysql_close($conn);
?>



Spørgsmålet er jo så hvordan jeg for valget fra de 2 forms til at påvirke
min WHERE funktion...
Hvis der er nogle der har et rigtig godt bud er jeg en lykkelig mand.


på forhånd tak
Michael



Thomas Lindgaard (26-02-2005)
Kommentar
Fra : Thomas Lindgaard


Dato : 26-02-05 11:46

On Sat, 26 Feb 2005 10:39:34 +0100, Michael wrote:

> Hvis der er nogle der har et rigtig godt bud er jeg en lykkelig mand.

Her kommer et bud. Jeg ville lave det i een form, for så slipper man for
at skulle huske på, hvad der er postet fra den ene og den anden form:

<form method="post" action="<?=$_SERVER['PHP_SELF'];?>">
<select name="kategori">
<option value="">Ikke valgt</option>
<option value="solo">Solo</option>
...
</select>
<select name="lokalitet">
<option value="">Ikke valgt</option>
<option value="jylland">Jylland</option>
...
</select>
</form>

SQL'en kan så opbygges på følgende måde:

<?php
$sql = "SELECT * FROM musik ";

// Lav et array med filtrene - det kan bruges til lidt forskelligt
// Nøglerne i array'et (det til venstre for =>) SKAL hedde det samme
// som i din tabel (også mht. store og små bogstaver)
$filters = array(
'kategori' => $_POST['kategori'],
'lokalitet' => $_POST['lokalitet']
);

// Da option-value er sat til "" for "Ikke valgt", kan vi tjekke om et
// eller flere filtre er slået til ved at konkatenere disse og tjekke
// mod en tom streng
if ( implode('', $filters) != "" )
{
// Et eller flere filtre er slået til, så der skal være en WHERE
// Løb igennem $filters og tilføj valgte til $where
$where = array();
foreach ($filters as $filter => $value)
{
// $value er "" (dvs. false) for ikke-valgte filtre
if ( $value )
{
$where[] = "$filter='$value'";
}
}

// SQL'en kan nu gøres færdig
$sql .= "WHERE ".implode(" AND ", $where);
}

// Nu skulle SQL'en gerne så nogenlunde rigtig ud...
?>

Det er utestet, så der er sikkert fejl - men jeg håber, at det kan
hjælpe dig på vej.

--
Mvh.
/Thomas


Michael (26-02-2005)
Kommentar
Fra : Michael


Dato : 26-02-05 12:31


"Thomas Lindgaard" <thomas@it-snedkeren.BLACK_HOLE.dk> skrev i en meddelelse
news:pan.2005.02.26.10.46.18.173237@it-snedkeren.BLACK_HOLE.dk...
> On Sat, 26 Feb 2005 10:39:34 +0100, Michael wrote:
>

>
> Det er utestet, så der er sikkert fejl - men jeg håber, at det kan
> hjælpe dig på vej.
>
> --
> Mvh.
> /Thomas
>

Mange mange tusind tak...
Jeg kan sagtens selv få det til at virke, jeg er bare ikke så god til at
komme på det selv...
Men har jeg ideen skal det nok kunne lade sig gøre at få det til at virke..

mange tak..



Michael (27-02-2005)
Kommentar
Fra : Michael


Dato : 27-02-05 17:29


"Thomas Lindgaard" <thomas@it-snedkeren.BLACK_HOLE.dk> skrev i en meddelelse
news:pan.2005.02.26.10.46.18.173237@it-snedkeren.BLACK_HOLE.dk...
> On Sat, 26 Feb 2005 10:39:34 +0100, Michael wrote:
>
> <form method="post" action="<?=$_SERVER['PHP_SELF'];?>">
> <select name="kategori">
> <option value="">Ikke valgt</option>
> <option value="solo">Solo</option>
> ...
> </select>
> <select name="lokalitet">
> <option value="">Ikke valgt</option>
> <option value="jylland">Jylland</option>
> ...
> </select>
> </form>
>
> SQL'en kan så opbygges på følgende måde:
>
> <?php
> $sql = "SELECT * FROM musik ";
> $filters = array(
> 'kategori' => $_POST['kategori'],
> 'lokalitet' => $_POST['lokalitet']
> );
> if ( implode('', $filters) != "" )
> {
> $where = array();
> foreach ($filters as $filter => $value)
> {
> if ( $value )
> {
> $where[] = "$filter='$value'";
> }
> }
>
> $sql .= "WHERE ".implode(" AND ", $where);
> }
>


Jeg var måske lige hurtig nok til at sige hvor dygtig jeg var til at rette
det til så det virkede
Hvis jeg slutter det af med

$result = mysql_query("select * from Musik");
while ($row = mysql_fetch_array($result)) {
echo $row["Navn"], $row["Kategori"], $row["Lokation"];
}
mysql_close($conn);
?>
</body>
</html>


Skriver den
Parse error: parse error, unexpected $ in
/customers/enjoymusic.dk/enjoymusic.dk/httpd.www/Filterform.php on line 49
hvor line 49 er den aller sidste linie </html>

Den linie du har skrevet der hedder

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

skal den efter følges af

$result = mysql_query("select * from Musik");
while ($row = mysql_fetch_array($result))

eller har jeg alligevel misforstået noget.. ??



Michael (27-02-2005)
Kommentar
Fra : Michael


Dato : 27-02-05 18:19


"Michael" <a@a.dk> skrev i en meddelelse
news:4221f4a6$0$922$edfadb0f@dread16.news.tele.dk...
>

>
> Skriver den
> Parse error: parse error, unexpected $ in
> /customers/enjoymusic.dk/enjoymusic.dk/httpd.www/Filterform.php on line 49
> hvor line 49 er den aller sidste linie </html>
>

Never mind...
det var en } der manglede...



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste