08. juni 2003 - 20:56Der 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>";
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.
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.
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 :-)
<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'");
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.