Avatar billede Slettet bruger
30. november 2004 - 20:46 Der er 20 kommentarer og
1 løsning

php og javascript i select

hej,
Jeg kan vælge på 1 <select>, et cykelmærke, og så skal der, på den næste stå alle de modeller, der findes indenfor dette mærke.

Jeg har i min database tabellerne
maerke:
id
navn

og model
id
maerkeid
navn

men jeg kan ikke helt greje den med at få modeller til at følge maerke...
Avatar billede Slettet bruger
30. november 2004 - 20:51 #1
er det uforståeligt?
Avatar billede googolplex Novice
30. november 2004 - 21:05 #2
http://roenving.users.whitehat.dk/ - Multiple selects

ER det sådan noget ?
Avatar billede Slettet bruger
30. november 2004 - 21:06 #3
jep, men det ser bare MEGET voldsomt ud.. jeg var lige derinde før, da jeg har set siden før googolplex :D
Avatar billede jakoba Nybegynder
30. november 2004 - 21:17 #4
Næe, blot lidt mangelfuldt. Jeg prøver at fulde ud:

id værdien fra din select skal sendes til php. det gøres ved at lave en HTML formular:

<form method='post' action="den_side_der_genererer_modelliste.php">
<select name='cykelmaerke'>
<?php  // her får vi php til at hente id og navn værdier fra tabellen mærke
    $sql_kommando = "SELECT id, navn FROM maerke";
    $resultater = mysql_query( $sql_kommando ) or die(mysql_error());
    while ( $row = mysql_fetch_array( $resultater ) ) {  // en række ad gangen
        extract( $row );          // laver 2 php variable $id og $navn med værdier i
        echo "<option value='$id'>$navn</option>\n";
    }
?>
</select>
<input type='submit' value='vis modeller' name='sendt'>  <!-- bemærk navnet -->
</form>

den formular ligger i den side hvor brugeren vælger. Når brugeren trykker på submitknappen (vis modeller' bliver den valgte id værdi sendt til siden den_side_der_genererer_modelliste.php

i siden den_side_der_genererer_modelliste.php skal vi så have noget phpkode

<?php

if ( isset( $_POST[ 'sendt' ] )  &&  isset( $_POST[ 'cykelmaerke' ] ) {
    $maerkeid = $_POST[ 'cykelmaerke' ];
} else {
    $maerkeid = 1;      // defaultværdi
}

// iog nu kan du så bruge €maerkeid til at finde de modeller der er af det korrekte maerke:

$sql_kommando = "SELECT id, navn FROM model WHERE maerkeid=$maerkeid";
$resultater = mysql_query( $sql_kommando ) or die(mysql_error());

while ( $row = mysql_fetch_array( $resultater ) ) {  // en række ad gangen
    extract( $row );          // laver 2 php variable $id og $navn med værdier i
    echo "maerke = $maerkeid, id=$id, navn=$navn<br>\n";
}

?>

og så smukkeserer du ellers med kønnere opsætning af listen og htmlkode udenom

mvh JakobA
Avatar billede Slettet bruger
30. november 2004 - 21:20 #5
mange tak jakobA, har ikke testet det, men du får point anyways :D

tak for arbejdet, smid svar :P
Avatar billede googolplex Novice
30. november 2004 - 21:22 #6
Jeg bruger selv dette:

http://www.mattkruse.com/javascript/dynamicoptionlist/source.html

Ellers prøv at søg på "multiple selects" i Google :)
Avatar billede Slettet bruger
30. november 2004 - 21:24 #7
her er point til jakoba

http://eksperten.dk/spm/566694
Avatar billede Slettet bruger
30. november 2004 - 21:25 #8
btw kan i se noget galt med:

mysql_query("
        SELECT
        model.navn as model,
        cykelhandlere.navn as forhandler,
        koen.navn as koen,
        maerke.navn as maerke
        FROM
        model,
        maerke,
        koen,
        cykelhandlere
          WHERE
        koen.id=". $row['koen'] ."
        AND model.id=". $row['modelid'] ."
        AND maerke.id=model.maerkeid
        AND cykelhandlere.id=". $row['forhandlerid'] ."
        ORDER BY model.navn ASC")
Avatar billede jakoba Nybegynder
30. november 2004 - 21:33 #9
det er lidt farligt at have en tabel der hedder 'model' santidig med et felt der hedder 'model', ditto med 'maerke'.
hvad med at gøre navnene unikke 'modelnvn' og 'maerkenvn'

mvh JakobA
Avatar billede Slettet bruger
30. november 2004 - 21:35 #10
jeg har jo heller ikke nogle felter der hedder det :S
Avatar billede Slettet bruger
30. november 2004 - 21:38 #11
ellers er jeg ikke med på hvad du siger...
Avatar billede jakoba Nybegynder
30. november 2004 - 21:39 #12
sorry, et alias der er det samme som tabelnavnet
  model.navn as model
FROM model, ...
Avatar billede Slettet bruger
30. november 2004 - 21:42 #13
nåh, så det skal jeg ikke.. ok thx

den er dog stadig utilfreds
Avatar billede Slettet bruger
30. november 2004 - 21:42 #14
Avatar billede Slettet bruger
01. december 2004 - 14:10 #15
jakoba til den post du lavede 30/11-2004 21:17:44

jeg vil godt have, at så snart man vælger et mærke, bliver modeller opdateret!
Avatar billede jakoba Nybegynder
01. december 2004 - 14:38 #16
samme som før, men uden submitknappen, og med lidt javascript i  <select kommandoen

<select name='cykelmaerke' onchange="this.form.submit()">

og i listingsiden skal der så ikke længere checke for  $_POST[ 'sendt' ]  blot
  if ( isset( $_POST[ 'cykelmaerke' ] ) {
      $maerkeid = $_POST[ 'cykelmaerke' ];
  } else {
      $maerkeid = 1;      // defaultværdi
  }

men test og tænk før du gør det, for der er ikke idelt:
  Det giver ventetid til brugeren hvergang han vælger nyt mærke
  hvis han kommer til at klikke galt skal han vente før han kan klikke igen
  hvis han ønsker at vælge det der allerede er valgt sker der ikke noget for det er jo ingen ændring (onchange aktiveres ikke)

det kan gøres kønt ved at sende ALLE mulige data med første gang siden hentes og så bruge javascript til at vælge og vise det rigtige (som googolplex er inde på), men med store datamængder kan det kan også godt blive dyrere end man kan kalde brugervenligt

jeg lavede engang lidt demo på hvordan man kan manipulere en selctbox med java script: http://hjem.get2net.dk/Jakob.Aggernaes/temp/exp66097.html
men til dit formål er roenvings bedre.
Avatar billede Slettet bruger
01. december 2004 - 14:51 #17
jeg tror ikke at man bare kan sige

"<select name='maerke' onchange=" this.form.submit() ">";

den brokker sig over en "unexpected T_STRING "
Avatar billede jakoba Nybegynder
01. december 2004 - 14:55 #18
"-tegn indeni en streng omkranset af "-tegn skal escapes med \

echo "<select name='maerke' onchange=\" this.form.submit() \">";
Avatar billede Slettet bruger
01. december 2004 - 15:24 #19
tak.. det var ellers lidt dårligt af mig at jeg ikke så det
Avatar billede Slettet bruger
01. december 2004 - 15:25 #20
jeg opretter et nyt spg, jeg håber at du gider at svare jakoba
Avatar billede Slettet bruger
01. december 2004 - 15:28 #21
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