Avatar billede kristianv Nybegynder
08. juni 2003 - 20:56 Der er 4 kommentarer og
1 løsning

Opdater form med <select>

Forsøger at lave en form med 2 select. Begge henter data fra min database. Vil gerne at når man har valgt værdien i den første select, så opdatere den den anden select. Håber i kan hjælpe



  <form action="retsy.php" method="post">
<?php
dbforbind();
echo "Vælg system:<br><select name='systemnavn'>";
$query = mysql_query("SELECT systemnavn,beskrivelse FROM system ORDER BY systemnavn");
while ($row = mysql_fetch_array($query)){
echo "<option value='$row[systemnavn]' '$row[beskrivelse]'>$row[systemnavn] - $row[beskrivelse]</option>";
}
echo "</select>";


echo "Vælg brugernavn:<br><select name='brugernavnid'>";
$query = mysql_query("SELECT brugernavn_id, bruger,beskrivelse FROM brugernavn where system_id ='$sysid';");
while ($row = mysql_fetch_array($query)){
echo "<option value='$row[brugernavn_id]', '$row[beskrivelse]'>$row[bruger] - $row[beskrivelse]</option>";
}
echo "</select>";

?>
<input type="submit" name="naeste" value="Næste"> </td>
</form>
Avatar billede jakoba Nybegynder
08. juni 2003 - 21:30 #1
Det kan gøres på to måder, og vi skal have klart hvilken metode du ønsker at bruge.

Metode 1:
    Når der vælges i første selectboks bliver det valg sendt til serveren, der svarer med at sende en ny version af siden hvor valgmulighederne i den anden select-boks er opdateret.
    fordele er at serveren hele tiden følger med og ikke sender flere data end nødvendig.
    bagdele er at sådan en rundtur til serveren tage tid. brugeren skal vente lidt hvergang han vælger noget, det kan være irriterende, især i en selectboks hvor man forventer at kunne teste og ombestemme sig uden at skulle vente.

Metode 2:
    Alle de mulige seleckboks nr 2 menuer bliver sendt med som javascript data  når siden hentes. Når valget i første selectboks ændres ommøbleres den anden selectboks lokalt på serveren.
    fordele er at nu reagerer selectboksen så hurtig at aman aldrig føler nogen ventetid.
    bagdele er at ALLE data skal sendes med i den oprindelige side. Hvis der er 100 valg i første selectboks og igen 100 valg i hver af de sekundære selectbokste der skal vises bliver det 100 + 10000 option data værdier der skal sendes med. Det kan blive så meget at siden føles tung.

metode 2 er en ren lavascript løsning, og som regel ville jeg nok foretrække den fremfor at rode php ind i det.

mvh JakobA
Avatar billede kristianv Nybegynder
08. juni 2003 - 21:42 #2
Nu er java ikke lige min stærke side. Skal kun bruge 2 select bokse i formen, men i den første select kan der godt blive optil 200 værdier, lidt mindre i den anden select.
Vente tiden i php løsningen, er ikke noget problem.
Hvis du mener at jeg kan implementere java metoden, vil jeg da gøre et forsøg, men er som sagt ikke så stærk i det.

Mvh.Kristian
Avatar billede jakoba Nybegynder
08. juni 2003 - 22:57 #3
Med så mange options vil metode 1 nok være bedst.

tilføj et skjult felt i din formular. i det felt står der enten "delvis" eller "fuld". Idet du laver siden med php skriver du altid 'fuld'

echo "<input type='hidden' name='skjultfelt' value='fuld'>";

i din første selcetboks laver du så en onchange handeler:

echo "Vælg system:<br><select name='systemnavn'
      onchange=\"this.form.sjultfelt.value='delvis';this.form.submit();\">";

så kan du teste på den værdi om formen blev submittet fordi brugeren valgte noget andet i første select ('delvis') eller fordi han trykkede på send-knappen ('fuld').

hvis det er 'delvis' skal du så blot opdatere værdierne til nummer 2 selectboks.
hvis det er 'fuld' skal du gøre det formulatern er lavet til at gøre.

mvh JakobA

PS: det hedder javaSCRIPT, det er et helt andet programmeringssprog end java :-)
Avatar billede kristianv Nybegynder
09. juni 2003 - 09:41 #4
<form action="retsy.php" method="post">

<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber2">
  <tr>
    <td width="50%">
<p align="center"><b>Ret systembrugernavn</b></p>
Okay java script:o). Har kigget lidt på din løsning, men kan ikke helt gennemskue den. Kan ikke se hvordan jeg skal opdatere den anden select.
Mvh Kristian

    <p align="center">

<?php
dbforbind();
echo "Vælg system:<br><select name='systemnavn'
      onchange=\"this.form.sjultfelt.value='delvis';this.form.submit();\">";
$query = mysql_query("SELECT systemnavn,beskrivelse FROM system ORDER BY systemnavn");
while ($row = mysql_fetch_array($query)){
echo "<option value='$row[systemnavn]' '$row[beskrivelse]'>$row[systemnavn] - $row[beskrivelse]</option>";
}
echo "</select>";
echo "<input type='hidden' name='skjultfelt' value='fuld'>";



$resultat = mysql_query("select system_id from system where systemnavn ='$systemnavn'");

while ($raekke = mysql_fetch_array($resultat)) {
extract($raekke);
$sysid = "$system_id <br />";
}

echo "Vælg brugernavn:<br><select name='brugernavnid'>";
$query = mysql_query("SELECT brugernavn_id, bruger,beskrivelse FROM brugernavn where system_id ='$sysid';");
while ($row = mysql_fetch_array($query)){
echo "<option value='$row[brugernavn_id]', '$row[beskrivelse]'>$row[bruger] - $row[beskrivelse]</option>";
}
echo "</select>";


?>

<br>
<br>
<input type="submit" name="naeste" value="Næste"> </td>
</DIV>

</form>
</table>
Avatar billede kristianv Nybegynder
02. september 2003 - 22:14 #5
Lukker
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