Gå til innhold

"Dynamisk" form, basert på inhold i database


Anbefalte innlegg

Jeg skal lage en søke/registrere/slette form mot en database.

Der vil jeg at man først skal kunne velge i en dropdown feks Land, og hvis man da velger Norge, skal neste dropdown boks oppdateres med alle kommuner i dette landet.

 

Forhold mellom land og kommuner legger jeg i en mysql base.

 

Vet hvordan man lager en dropdown, men hvordan baserer jeg valgene på innholdet i basen?

Lenke til kommentar
Videoannonse
Annonse

Du har vel 2 varianter som jeg kommer på, begge innvolverer javascript. Det ene er at du først populeren den første gardinmenyen din. Velger du norge her så lastes siden på nytt og det gjøres en ny spørring som populerer neste gardinmeny.

Dette kan velg gjøres med noe onSelect action=form.submit(), du må lese litt om javascript, husker ikek detaljene.

 

Den andre som jeg er litt skeptisk til er at du laster hele databasen inn i arrays som du bruker ved hjelp av javascript til å dynamisk endre innholdet i rullegardinmenyene.

Lenke til kommentar

Både ja og nei... AJAX består av mer enn bare JS... ;)

 

Det "MrNeeon" foreslår er nok at du legger inn ajax-funksjonalitet som sender landet man velger til et PHP-script i bakgrunnen (asynkront) og som igjen henter ut alle de kommunene som gjelder for det landet og sender tilbake (som XML), som igjen da ajax "tolker" og legger inn i den andre select-menyen. :)

Lenke til kommentar

Hei. Jeg lurer også på dette. Jeg tenker å bruke AJAX, men skjønner ikke helt hvordan jeg får verdien fra den første POST'en inkludert i fila med form'en, slik at jeg får gjort om på spørringen i fohold til hva som blir valgt i den første SELECTEN..

 

Noen som kan forklare prosessen, evt. vise til en tutorial som gjør dette. De fleste tut'ene jeg finner viser prosessen frem til at verdien som tastes inn skrives ut i en <div>. Hvordan får jeg denne verdien inn i en variabel jeg kan håndtere i begynnelsen av fila?

Lenke til kommentar

Jeg skjønte ikke helt hva du prøvde å gjøre... Men følgende (pseudo) kode bør funke greit.

 

I den originale fila (la oss kalle den form.php) så populerer du Land-comboen som normalt.

 

Så registrerer du en funksjon på "onselect" eller hva eventen heter. Denne funksjonen gjør et "ajax"-kall til en annen fil som vi kan kalle hentFylker.php. Denne filen har _kun_ følgende enkle kode

<?php

mysql_connect (<MySQLserver>, <username>, <password>);

mysql_select_db (<dbname>);

$land = $_GET['land'];

$result = mysql_query ("SELECT fylke_id, fylke_navn FROM fylker	
WHERE land = $land");

if ($row = mysql_fetch_array($result)) {

do {
$id = $row["fylke_id"];
$navn = $row["fylke_navn"];
print "<option value='$id'>$navn</option>";
} while($row = mysql_fetch_array($result));
} else {print "<option>Ingen fylker funnet</option>";
}

?>

 

Og når du får den teksten tilbake (via ajax kallet) så gjør du noe sånt som:

var select_land = document.getElementById('select_land');
select_land.innerHTML = result.responseText;

 

Så blir boksen fyllt med fylker og tilhørende id...

 

Som sagt så er dette utestet semi-pseudo-kode... Jeg er ikke spesiellt god i php :)

 

Se også på Prototype eller lignende for å forenkle javascript biten.

 

-C-

Endret av ChristianW
Lenke til kommentar
Jeg skjønte ikke helt hva du prøvde å gjøre... Men følgende (pseudo) kode bør funke greit.

 

I den originale fila (la oss kalle den form.php) så populerer  du Land-comboen som normalt.

 

Så registrerer du en funksjon på "onselect" eller hva eventen heter. Denne funksjonen gjør et "ajax"-kall til en annen fil som vi kan kalle hentFylker.php. Denne filen har _kun_ følgende enkle kode

<?php

mysql_connect (<MySQLserver>, <username>, <password>);

mysql_select_db (<dbname>);

$land = $_GET['land'];

$result = mysql_query ("SELECT fylke_id, fylke_navn FROM fylker	
WHERE land = $land");

if ($row = mysql_fetch_array($result)) {

do {
$id = $row["fylke_id"];
$navn = $row["fylke_navn"];
print "<option value='$id'>$navn</option>";
} while($row = mysql_fetch_array($result));
} else {print "<option>Ingen fylker funnet</option>";
}

?>

 

Og når du får den teksten tilbake (via ajax kallet) så gjør du noe sånt som:

var select_land = document.getElementById('select_land');
select_land.innerHTML = result.responseText;

 

Så blir boksen fyllt med fylker og tilhørende id...

 

Som sagt så er dette utestet semi-pseudo-kode... Jeg er ikke spesiellt god i php :)

 

Se også på Prototype eller lignende for å forenkle javascript biten.

 

-C-

9632690[/snapback]

 

Ser ut til at du har forstått hva jeg mente.

 

La oss si du skal ha 2 dropdown lister, den første har 4-5nivåer. Basert på hva du velger her skal valgene i neste dropdown liste endres.

 

Velger jeg f.eks Volvo i den første skal jeg få opp V40, S60, Xc90 osv i den neste.

Velger jeg Opel i den første får jeg Astra, Vectra, Corsa osv i den andre.

 

Skal teste ut koden din.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...