09. november 2005 - 14:13Der er
56 kommentarer og 2 løsninger
Hjælp til select box
Hej eksperter.
Jeg har brug for et script som består af 2 select boxe og en knap.
#1: Den første select box skal hente alt hvad der står i mit felt "$bil_maerke" som er i min DB.
#2 Alt efter hvad for et bil mærke man har valgt i min db så kommer der i den næste select alle "$motor" felterne hvor maerke=$maerke ...så hvis jeg vælger BMW så kommer der alle infoerne fra de biler der står BMW i maerke ved frem i boxen.
#3: Knappen man vælger med skal bare sende id'et videre til næste side.. (jo ikke så svært)
du skal bruge javascript til at submitte onchange i din select box 1 og så lave et udtræk til select box 2 med value fra selectbox1 og derefter er det bare en normal form
men hvis du vil have det til at kører uden at skulle "reloade/submitte" siden ved hver valg så skal du indlæse det hele i noget javascript haløj.
jeg kan godt prøve at lave et eksempel til den første løsning
<form action="" method="post" name="frm1"> <select onChange="document.frm1.submit();" name="brand"> <?php //her smider du dit database udtræk // og noget i den her stil // echo "<option value=\"".$row['bil_id']."\">".$row['bil_maerke']."</option>\n" ?> </select> </form> <form action="" method="post" name="frm2"> <select onChange="document.frm2.submit();"> <?php if (isset($_POST['brand'])) { // lav dit andet udtræk her } ?> </select> </form>
Hey... et udkast til en kode... som kunne bruges... skal self... rettes lidt til... så¨den passer bedere til dit system... koden gør det at når du har vælgt en bil så submitter den, og så henter den alle motore som passer til den bil ud fra databasen.
<?php
echo "<form action='til din fil.php' method='post'>";
Eller også skal du lave sådan du læser alle muligheder ud i et javascript array. Så kan du lave det uden at skulle submitte til serveren igen! Dog vil det så kræve et stort udtræk.
egentlig for mig er det lige meget, så længe den bare kan sortere i det hehe.. og bare hvad der er nemmest at lave, for skal nemlig snart være færdig med det..
du kan lave et tjek på den øverste form at hvis $row[id] er lig med $_POST['brand'] så skal den skrive SELECTED i det <option> tag
i $sql2 = "SELECT * FROM db_bil WHERE id = '".$_POST["maerkeid"]."'"; skal du bruge $_POST['brand'] da denne indeholder dit id så: $sql2 = "SELECT * FROM db_bil WHERE id = '".$_POST["brand"]."'";
hvis du skal bruge den første forms resultat til noget senere kan du smide et hidden felt ind i den næste form <input type="hidden" name="brandid" value="<?php echo $_POST['brand'];?>"> <select ...
du skal lave din database lidt om hvis du vil have det på den måde lav 2 tabeller 1 med bil mærkerne og 1 med motorene og i tabelen motor der laver du et felt der hedder maerke og i det felt skal der så stå id nummeret for det mærke du har i tabellen biler
okay, men jeg har flere ting i den tabel.. f.eks. aargang, billede,dato, bruger,kommentar, stoej_motor osv.. skal de placeres inde i tabellen hvor motorne lægger? + et felt mere der hedder bil_maerke hvor id'et fra bilmærket står?
stadig ingen forskel.. altså jeg kan godt lave det med 2 tabeller det er ikke noget problem.. men det andet kan måske løses hvis den starter på et tomt felt heletiden.. så bliver folk da ikke i tvivl :)
Hmm måske jeg skulle gøre det med de 2 tabeller, for så slipper jeg for at folk kan gå ind og oprette et eller andet mærker der ikke findes.. så skal de bare selv vælge det når de opretter en bil.. er det besværligt at ændre det så den henter med de 2 tabeller ?
nej det er ikke svært men mange gange meget lettere at have det i 2 eller flere tabeller og hvis du så skal lave en forspørgsel hvor du vil have både navnet fra den ene tabel og info fra den anden kan du bruge LEFT JOIN i sql sætningen, det der er fordelen ved at have det i 2 tabeller er at hvis du har stavet forkert eks. BMV og først opdager det efter du har oprettet en masse BMV'er så kan du bare ændre den ene række i din tabel med mærker til BMW og så er alle posterne i info tabellen der referrer til det ID rettet
og der virker det fint med jeg kan gå ind og vælge et mærke og den så finder det den skal i den select under... men så vil jeg gerne have at den:
#1: Sender id'et videre til den header jeg har lavet ovenover, det gøres vel med en hidden boks ikke?
#2: Når man nu har valgt et mærke og trykker på den, så springer den op på "vælge mærke" igen, men jeg vil gerne høre om den kan BLIVE på det mærke man har valgt, så folk er sikre, ellers så sætter jeg bare noget ind i den anden select så de kan se den.. men ville være bedst det andet :)
db_bil_maerke: `id` int(11) NOT NULL auto_increment, `maerke` text NOT NULL,
og db_bil_motor: `id` int(11) NOT NULL auto_increment, `aargang` text NOT NULL, `motor` text NOT NULL, `km` text NOT NULL, `bruger` text NOT NULL, `komm` text NOT NULL, `dato` text NOT NULL, `upfile` text NOT NULL, `stoej_motor` text NOT NULL, `stoej_kabin` text NOT NULL, `bil_maerke` text NOT NULL,
hvad indeholder feltet bil_maerke i tabellen db_bil_motor? og er det ID nummeret fra tabellen db_bil_motor eller db_bil_maerke du vil have eller er det begge?
Lige nu der tager den efter navnet på bilen i feltet "bil_motor" og det er id nummeret i db_bil_motor jeg skal bruge på den næste side :)..
altså, den kan jo godt bare have navnet på bilmærket i feltet "bil_maerke" i TB "db_bil_motor" for så slipper jeg for at lave 2 quereys på den næste side, som først skal ind og hente bil mærket i "db_bil_maerke" og efter alt hvad der står i db_bil_motor ..hvis du forstår
ja men så er meningen med 2 tabeller tabt men det er intet problem for ved din query på næste side laver du et LEFT JOIN det skal jeg nok hjælpe dig med men bil_maerke i db_bil_motor skal være et ID nummer fra db_bil_maerke
og når du poster det hele kan du med SELECT * FROM db_bil_motor LEFT JOIN db_bil_maerke ON db_bil_maerke.id = db_bil_motor.bil_maerke WHERE id='".$_POST['motor']."'
hvis du lige tester siden igen, og så vælger "audi" så kan du se der er 2 forskellige punkter, i den nederste form.. hvis du så vælger det sidste punkt i den selection så taber den vist alt info..
men hvis du sætter <input type="hidden" name="brand" value="<?php echo $_POST['brand'];?>"> ind i den nederste form så burde den ikke tabe informationerne
ja okay, rigtigt nok, der sender den jo også infoet videre... men det med hvis du vælger audi og så den sidste ting i select feltet der er det som om siden bliver refreshet.. det kan være du lige har test mens jeg har været igang med noget..
Men den skal bruge submit knappen, for jeg vil gerne have det vi er ved at lave her, skal være 2 gange på siden, så man kan vælge 2 forskellige biler og sammeligne dem på den næste side :)
Hvis du vil have en perfekt løsning uden at reloade siden, skal du oprette dit spørgsmål i Javascript. Der er muligvis en som kan hjælpe dig med at lave en løsning med noget AJAX.
jo men det kan jeg også gøre, men så skal jeg til at oprette et til her efter, når jeg skal have de faktisk 4 former til at arbejde sammen og overføre infoet
Jeg skal jo have lavet så man kan vælge 2 forskellige biler og sammenligne dem.. Er det bedst at lave siden på den måde at man man først vælger bil 1 og så går videre til næste side, hvor man så kan vælge bil 2 og så til sidst se sammenligne den .. eller er det hvor den er på samme side? jeg ville helst have den var på samme side, men skal submit knappen så være i sin egen form ?
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.