Avatar billede kennith Nybegynder
24. juni 2004 - 13:29 Der er 41 kommentarer og
2 løsninger

dynamiske dropdown menuer

Jeg vil gerne have lavet et par dynamiske dropdown menuer. Jeg har en Tabel der hedder varegrupper og den indeholder gruppe,undergrupe,fabrikant,model.

nu vil jeg så med php lave en dropdownmenu der hvorfra jeg kan vælge mellem posterne i gruppe. Når jeg vælger denne skal den næse dropdown menu vise de undergrupper der er for denne vare.

Jeg har fundet et par eksempler men de er vidt forskellige og indeholder en masse variabler jeg ikke skal bruge da de er dele af større scripts. Jeg er ret ny i PHP og har svært ved at overskue præsist hvad jeg skal brug af det.

Kennith
Avatar billede kennith Nybegynder
24. juni 2004 - 13:30 #1
det er selvfølgelig i MySQL jeg har lavet min tabel
Avatar billede jaw Nybegynder
24. juni 2004 - 13:34 #2
Det her kan måske bruges:

$q = mysql_query("SELECT * FROM table") or die(mysql_error());
    echo"<select name='varegruppe'>";
  while($row = mysql_fetch_array($q)) {
      echo"<option value='$row[varegruppe]>$row[varegruppe]</option>";
  }
    echo"</select>";

Men hvis du skal have alle dropdown-menuerne på samme side (den send/opdater knap), og at de skal ændre sig afhængig af hvad der bliver valgt, skal du ud i javascript...
Avatar billede kennith Nybegynder
24. juni 2004 - 13:39 #3
min tanke var at ligge 1. valg i en variabel og så ligge indholdet af den ind som en betingelse i den forespørgelse der bliver lavet for at genere nummer to osv.

jeg prøver lige din af hvis den bare laver en dropdown på baggrund af indholdet af en kolonne så skulle resten kunne løses
Avatar billede jaw Nybegynder
24. juni 2004 - 13:46 #4
Det kan du sagtens... Det jeg bare mener, er at du ikke kan have det på samme side, medmindre siden bliver opdateret...
Avatar billede kennith Nybegynder
24. juni 2004 - 13:51 #5
Hmmm jeg har skrevet rettet det til så nu ser det sådan ud:

$q = mysql_query("SELECT DISTINCT gruppe FROM varegrupper") or die(mysql_error());
    echo"<select name='gruppe'>";
  while($row = mysql_fetch_array($q)) {
      echo"<option value='$row[gruppe]>$row[gruppe]</option>";
  }
    echo"</select>";

Den laver godt nok dropdown menu men den tager kun en varegruppe med ??

Kan jeg definere bredden i dropdownmenuen og i hvilken variabel ligger mit valg?
Avatar billede jaw Nybegynder
24. juni 2004 - 13:52 #6
Bredden af den, kan du vælge herfra: echo"<select name='gruppe' size='25'>";
Avatar billede kennith Nybegynder
24. juni 2004 - 13:56 #7
ok nogen bud på hvorfor den kun viser den ene gruppe? SELECT DISTINCT gruppe FROM varegrupper retunerer godt nok alle grupper når jeg bruger den men jeg skal have dem ind i menuen.
Avatar billede dejbjerg Nybegynder
24. juni 2004 - 14:02 #8
$q = mysql_query("SELECT * FROM varegrupper") or die(mysql_error());
    echo"<select name='varegruppe' onChange='Load_id()'>";
  while($row = mysql_fetch_array($q)) {
      echo"<option value='$row[varegruppe]>$row[varegruppe]</option>";
  }
    echo"</select>";

$id = $_GET['id'];
$q = mysql_query("SELECT * FROM varer WHERE varegruppe_id = $id") or die(mysql_error());
    echo"<select name='vare'>";
  while($row = mysql_fetch_array($q)) {
      echo"<option value='$row[varegruppe]>$row[varegruppe]</option>";
  }
    echo"</select>";

<script type="text/javascript">
function Load_id()
{
var id = document.formnavn.varegruppe.options[document.formnavn.varegruppe.selectedIndex].value
var id_txt = "?id="
var url = <? php echo '"'.$_SERVER['PHP_SELF'].'"'; ?> ;
location = url + id_txt + id
}
</script>

(ikke testet)
Avatar billede jaw Nybegynder
24. juni 2004 - 14:02 #9
Ja, har jeg en løsning på :)

value='$row[varegruppe]  <-- der mangler en afsluttende: '
Avatar billede kennith Nybegynder
24. juni 2004 - 14:16 #10
jaw> Det hjalp *S* tak. Size komandoen virkede desværre på både højden og breden det er kun breden der skulle tilpasses? og i hvilken variabel ligger valget $row[gruppe]?
Avatar billede jaw Nybegynder
24. juni 2004 - 14:19 #11
Hvad mener du med hvilken variabel det ligger i ?
Avatar billede jaw Nybegynder
24. juni 2004 - 14:21 #12
Den her vil ændre bredden af den, den anden ved jeg ikke lige hvor jeg fik fra :)

echo"<select name='gruppe' style='WIDTH: 150px'>";
Avatar billede kennith Nybegynder
24. juni 2004 - 14:23 #13
Når jeg klikker på en varegruppe i dropdown menuen skal den jo kunne huske hvad jeg har valgt så jeg kan skifte til en anden side eller arbejde vidre med valget
Avatar billede kennith Nybegynder
24. juni 2004 - 14:24 #14
ok nu er det sq lige før det virker som jeg gerne vil have det til *S*
Avatar billede jaw Nybegynder
24. juni 2004 - 14:25 #15
$q = mysql_query("SELECT DISTINCT gruppe FROM varegrupper") or die(mysql_error());
    echo"<form method='post' action='nyside.php'>
        <select name='gruppe'>";
  while($row = mysql_fetch_array($q)) {
      echo"<option value='$row[gruppe]'>$row[gruppe]</option>";
  }
    echo"</select><input type=sumbit name=submit value='Videre'></form>";

På ny side, vil $_POST['gruppe'] så indeholde valget i drop-downen...
Avatar billede kennith Nybegynder
24. juni 2004 - 14:25 #16
dejberg > tak for dit indlæg jeg prøver det af hvis ikke jeg får det til at køre med jaws indlæg
Avatar billede kennith Nybegynder
24. juni 2004 - 14:27 #17
jaw > og der er ikke nogen måde jeg kan arbejde med valget uden at skifte side?
Avatar billede kennith Nybegynder
24. juni 2004 - 14:28 #18
ellers må jeg bare smide det ind i et frameset og opdatere en frame af gangen efterhånden som der bliver valgt men vil helst undgå frameset.
Avatar billede jaw Nybegynder
24. juni 2004 - 14:29 #19
Jow, men så er det javascript - nok noget a'la det som dejberg skriver...

Roenving har lavet en guide til javascript, og jeg regner med at det er det du vil have: http://roenving.users.whitehat.dk/index.html?/WD4Selects-beta.html

Men ellers kan du jo, når siden opdateres få den næste dropdown frem når brugeren har valgt. Den behøver ikke skifte side, men den skal opdateres :(
Avatar billede dejbjerg Nybegynder
24. juni 2004 - 14:31 #20
Det er det samme som jaw's, jeg bruger bare onChange i den første select box til at reloade siden med et overført id (?id=) svarende til det der vælges. På den måde reloades siden når du ændrer valg i den første selectbox, og du behøver ikke submitte.
Avatar billede kennith Nybegynder
24. juni 2004 - 14:32 #21
ok det lyder som en god løsning det kan godt være jeg er træls men jeg er stædig og vil have det i PHP *G* hvordan får jeg den så til at opdatere og vise den næste dropdown?
Avatar billede dejbjerg Nybegynder
24. juni 2004 - 14:37 #22
Problemet er, at PHP er serverside...så enten skal du poste valget til en ny side eller en iframe, hvis det skal være ren PHP.
Avatar billede jaw Nybegynder
24. juni 2004 - 14:38 #23
Altså, det her vil være en mulighed, det er bare om den er god nok: http://www.syndicate.dk/exp/513394.php
Avatar billede kennith Nybegynder
24. juni 2004 - 14:43 #24
jaw > det ser ok ud
drejbjerg > skifter din automatisk når der bliver foretaget et valg?
Avatar billede kennith Nybegynder
24. juni 2004 - 14:44 #25
hvis et javascript kan autoopdatere siden så kan det godt være jeg må bøje mig *G* og ligge det ind selv om jeg ikke er meget for at overgive mig
Avatar billede dejbjerg Nybegynder
24. juni 2004 - 14:47 #26
jep
Avatar billede dejbjerg Nybegynder
24. juni 2004 - 14:48 #27
det skal lige rettes igennem, så det passer med dine tabeller/felter
Avatar billede jaw Nybegynder
24. juni 2004 - 14:50 #28
http://www.syndicate.dk/exp/513394.php ser koden sådan her ud:

<?
$q = mysql_query("SELECT DISTINCT vare FROM test") or die(mysql_error());
    if($_POST['gruppe'] != "") {$disabled = "disabled";} else {$disabled= "";}
    echo"<form name=1 method=post action=$PHP_SELF><select name='gruppe' style='WIDTH: 150px' $disabled>";
        while($row = mysql_fetch_array($q)) {
      echo"<option value='$row[vare]'>$row[vare]</option>";
    }
    echo"<input type=submit value=næste></select></form>"; 
 
  if($_POST['gruppe'] != "") {
      $vare = $_POST['gruppe'];
      $q = mysql_query("SELECT vare_valgt FROM test WHERE vare = '$vare'") or die(mysql_error());
    echo"<select name='gruppe2' style='WIDTH: 150px'>";
    while($row = mysql_fetch_array($q)) {
      echo"<option value='$row[vare_valgt]'>$row[vare_valgt]</option>";
    }
    echo"</select>";     
  }
?>

Så må du jo overveje hvad du vil...
Avatar billede kennith Nybegynder
24. juni 2004 - 14:53 #29
ok mange tak for jeres hjælp lig lige et svar så i kan få velfortjente point
Avatar billede jaw Nybegynder
24. juni 2004 - 14:53 #30
Good luck med det :)
Avatar billede dejbjerg Nybegynder
24. juni 2004 - 14:55 #31
syndicate tingen 'glemmer' hvad der er valgt første gang...det skal måske lige rettes.

Ligegyldigt hvad man vælger, står der bord i den første selectbox, når den anden kommer frem.
Avatar billede dejbjerg Nybegynder
24. juni 2004 - 14:56 #32
ok :)
Avatar billede jaw Nybegynder
24. juni 2004 - 14:58 #33
Glemmer gør den jo ikke, men korrekt at den ikke viste det - det havde jeg ikke lige tænkt på :/ Men det kan fikses nemt: http://www.syndicate.dk/exp/513394.php

$q = mysql_query("SELECT DISTINCT vare FROM test") or die(mysql_error());
    if($_POST['gruppe'] != "") {$disabled = "disabled";} else {$disabled= "";}
    echo"<form name=1 method=post action=$PHP_SELF><select name='gruppe' style='WIDTH: 150px' $disabled>";
        while($row = mysql_fetch_array($q)) {
      if($_POST['gruppe'] == $row[vare]){$selected = "selected";}else{$selected = "";}
      echo"<option value='$row[vare]' $selected>$row[vare]</option>";
    }
    echo"<input type=submit value=næste></select></form>"; 
 
  if($_POST['gruppe'] != "") {
      $vare = $_POST['gruppe'];
      $q = mysql_query("SELECT vare_valgt FROM test WHERE vare = '$vare'") or die(mysql_error());
    echo"<select name='gruppe2' style='WIDTH: 150px'>";
    while($row = mysql_fetch_array($q)) {
      echo"<option value='$row[vare_valgt]'>$row[vare_valgt]</option>";
    }
    echo"</select>";     
  }
Avatar billede kennith Nybegynder
24. juni 2004 - 15:04 #34
taak nu virker jaws. men jeg ville nu også gerne have den anden til at virke så jeg kan vælge så jeg tænkte at hvis nu jeg giver jaw 100 point her for hans udemærkede indsats og så laver et nyt spm med 100 nye point gider du så lige hjælpe mig med at få dit til at køre drejbjerg?
Avatar billede kennith Nybegynder
24. juni 2004 - 15:08 #35
Parse error: parse error, unexpected '<' in C:\Server\Apache2\blabla\test3.php on line 29

det er denne linie: <script type="text/javascript">
Avatar billede dejbjerg Nybegynder
24. juni 2004 - 15:10 #36
Pointene er ikke så vigtige, ingen grund til at oprette ny spm.

linierne med
echo"<option value='$row[varegruppe]>$row[varegruppe]</option>";
skal ændres, så de passer.

din form har et navn <form name="formnavn">
det samme har din selectbox.

var id = document.formnavn.selectboxnavn.options[document.formnavn.selectboxnavn.selectedIndex].value
(i scriptet)

skal passe med dit formnavn og navnet på den første selectbox
Avatar billede dejbjerg Nybegynder
24. juni 2004 - 15:11 #37
scriptet skal stå udenfor dine <? php ?> tags
Avatar billede kennith Nybegynder
24. juni 2004 - 15:25 #38
OK nu kan min lille hjerne snart ikke rumme mere på en gang jeg poster lige det hele gider du så kigge på det og fortælle mig hvor jeg skal sætte hvad ind jeg har rettet noget id det men har ikke fået lavet nogen form skal den ind samme sted som i jaws?

<script type="text/javascript">
function Load_id()
{
var id = document.formnavn.varegruppe.options[document.formnavn.varegruppe.selectedIndex].value
var id_txt = "?id="
var url = <? php echo '"'.$_SERVER['PHP_SELF'].'"'; ?> ;
location = url + id_txt + id
}
</script>
<BODY>
<?PHP
// Forbind til server og vælg database
$conn = mysql_connect('localhost', '******', '******')
    or die(mysql_error());
mysql_select_db('*******',$conn) or die (mysql_error());

$q = mysql_query("SELECT DISTINCT gruppe FROM varegrupper") or die(mysql_error());
    echo"<select name='gruppe' onChange='Load_id()'>";
  while($row = mysql_fetch_array($q)) {
      echo"<option value='$row[gruppe]>$row[gruppe]</option>";
  }
    echo"</select>";

$id = $_GET['id'];
$q = mysql_query("SELECT * FROM varergrupper WHERE gruppe_id = $id") or die(mysql_error());
    echo"<select name='vare'>";
  while($row = mysql_fetch_array($q)) {
      echo"<option value='$row[gruppe]>$row[gruppe]</option>";
  }
    echo"</select>";

?>

</BODY>
</HTML>
Avatar billede kennith Nybegynder
24. juni 2004 - 15:27 #39
Jeg er lige væk en times tid men vender frygteligt tilbage
Avatar billede dejbjerg Nybegynder
24. juni 2004 - 15:37 #40
<script type="text/javascript">
function Load_id()
{
var id = document.testform.gruppe.options[document.testform.gruppe.selectedIndex].value
var id_txt = "?gruppe="
var url = <? php echo '"'.$_SERVER['PHP_SELF'].'"'; ?> ;
location = url + id_txt + id
}

//////////////////////////////////////////////////////////

echo "<form name='testform'>";
$q = mysql_query("SELECT DISTINCT gruppe FROM varegrupper") or die(mysql_error());
    echo"<select name='gruppe' onChange='Load_id()'>";
  while($row = mysql_fetch_array($q)) {
      echo"<option value='$row[gruppe]>$row[gruppe]</option>";
  }
    echo"</select>";

$gruppe = $_GET['gruppe'];
$q = mysql_query("SELECT * FROM varer WHERE gruppe = $gruppe") or die(mysql_error());
    echo"<select name='vare'>";
  while($row = mysql_fetch_array($q)) {
      echo"<option value='$row[gruppe]>$row[gruppe]</option>";
  }
    echo"</select></form>";

//////////////////////////////////////

Har ikke PHP på denne maskine, så jeg kan ikke teste det lige nu...men det er tæt på
Avatar billede dejbjerg Nybegynder
24. juni 2004 - 16:59 #41
Det her virker

<html>
<body>
<?php

    $server    = "localhost";    // domæne
    $brugernavn = "******";    // brugernavn
    $password  = "******";      // password
                 
    mysql_connect($server, $brugernavn, $password)
    or die( "Unable to connect\n". mysql_error() );
   
    mysql_select_db("test")
    or die("Unable to select db ".mysql_error()."\n");

$id = $_GET['id'];

echo'<form name="testform">';
$q = mysql_query("SELECT * FROM grupper");
    echo"<select name=\"gruppe\" onChange=\"Load_id()\">";
  while($row = mysql_fetch_array($q)) {
          $selected = ($row["gruppe_id"] == $id)? "SELECTED":"";
      echo"<option value=\"".$row['gruppe_id']."\"". $selected." >".$row['gruppe_navn']."</option>";
  }
    echo"</select>";


$q2 = mysql_query("SELECT * FROM varer WHERE vare_gruppe_id = $id");
    echo"<select name=\"vare\">";
  while($row = mysql_fetch_array($q2)) {
      echo"<option value=\"".$row['vare_id']."\">".$row['vare_navn']."</option>";
  }
    echo"</select></form>";
?>

<script type="text/javascript">
function Load_id()
{
var id = document.testform.gruppe.options[document.testform.gruppe.selectedIndex].value
var id_txt = "?id="
location = id_txt + id
}
</script>
</BODY>
</HTML>

//DB_DUMPS////////////////////////////

CREATE TABLE `grupper` (
  `gruppe_id` int(11) NOT NULL auto_increment,
  `gruppe_navn` varchar(60) NOT NULL default '',
  PRIMARY KEY  (`gruppe_id`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;

INSERT INTO `grupper` VALUES (1, 'testgruppe1');
INSERT INTO `grupper` VALUES (2, 'testgruppe2');


CREATE TABLE `varer` (
  `vare_id` int(11) NOT NULL auto_increment,
  `vare_gruppe_id` int(11) NOT NULL default '0',
  `vare_navn` varchar(60) NOT NULL default '',
  PRIMARY KEY  (`vare_id`)
) TYPE=MyISAM AUTO_INCREMENT=5 ;

INSERT INTO `varer` VALUES (1, 1, 'testvare1');
INSERT INTO `varer` VALUES (2, 1, 'testvare2');
INSERT INTO `varer` VALUES (3, 2, 'testvare3');
INSERT INTO `varer` VALUES (4, 2, 'testvare4');
Avatar billede kennith Nybegynder
24. juni 2004 - 17:36 #42
Tuside tak for jeres hjælp
Avatar billede jaw Nybegynder
24. juni 2004 - 17:37 #43
Det var så lidt :) Tak for point...
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