Avatar billede danic Nybegynder
11. marts 2004 - 15:10 Der er 11 kommentarer

Overfører en variabel fra en selectbox til en anden og reload

Jeg har lavet 2 dropdown boxe som bliver dannet ud fra en mysql/php funktion.

Jeg ønsker at når man vælge et produkt i den første box så bliver variablen productid overført til den næste box som så henter dataerne.

Hvad skal det til?

Her er min form:

<FORM onsubmit="return checkValgtSelectbox();" name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="send" value="1">


<SELECT name="productid">
<?php
$optionblock = makeDropDownSelectBox (productname, "Select product");
echo "$optionblock";
?>
</SELECT>
<br>       
<SELECT NAME="choice" onChange="this.form.submit();">
<?php
$optionblock = makeDropDownSelectBox2 (retailers, country, $productid,  "Select country");
echo "$optionblock";
?>
</SELECT>
</FORM>
Avatar billede roenving Novice
11. marts 2004 - 15:15 #1
Hvis du skal undgå reload, skal du overføre dine data til en javascript-database, hvor du så kan hente dem, når der ændres !o]

-- du kan se et (overdrevet komplceret i dette tilfælde !-) eksempel på:

http://roenving.users.whitehat.dk/WD4Selects-beta.html
Avatar billede danic Nybegynder
11. marts 2004 - 15:18 #2
Det er en stor database så reload er ok, så længe det sker automatik med javascript.
Avatar billede grunken Nybegynder
11. marts 2004 - 15:19 #3
roenvings metode er god hvis det ikke drejer sig om kæmpe opslag :o)

jeg har selv indtil flere gange løst problematikken ved at lave opslaget i databasen i en "skjult" frame, eller en iframe :o)
Avatar billede danic Nybegynder
11. marts 2004 - 15:47 #4
Hvis det er lavet før, der der så en som har et kode eksempel?
Avatar billede grunken Nybegynder
11. marts 2004 - 17:32 #5
her er en muligehed :o)

lad din side med formen forblive næsten uændret :o)

<FORM onsubmit="return checkValgtSelectbox();" name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="send" value="1">
<SELECT name="productid" onchange="skjult.location = 'lavselect.php?val'+this[this.selectedIndex].value;">
  <?php
  $optionblock = makeDropDownSelectBox (productname, "Select product");
  echo "$optionblock";
  ?>
</SELECT>

<br>       
<SELECT NAME="choice" onChange="this.form.submit();">
  $optionblock = makeDropDownSelectBox2 (retailers, country, $productid,  "Select country")
  echo "$optionblock";
</SELECT>
</FORM>

<iframe name="skjult" style="height:0px;width:0px;border:0px;"></iframe>

derefter laver du eks. en fil mere der hedder eks. "lavselect.php"

i denne skal der være følgende indhold

<html>
<head>
<script type="text/javascript">
elm = parent.document.form.choise.options;
for (i=0;i<elm.length;i++){
  elm[i] = null;
}

<?
  lav et udtræk fra databasen der smider tingene i et javascriptarray udfra værdien i $_GET['val'] der ser sådan ud!
  sel2 = new Array("value1|tekst1","value2|tekst2" osv);
?>

for (i=0;i<sel2.length;i++){
  str = sel2[i].split("|")
  elm.options[i]= new Option(str[1],str[0]);
}
</script>
</head>
</html>

For værd udvikler findes der også en metode at lave ovenstående stunt på, men jeg vælger personligt noget ligende ovenstående vha. en "skjult" frame, så jeg er fri for at hente hele pivtøjet ind på en gang :o)

men værd sin smag jo :o)

f.eks.
fungerer denne her form (indtast et postnummer) på samme måde

http://www.trumfrejser.dk/files/forms.php?do=addEnquery
Avatar billede danic Nybegynder
11. marts 2004 - 19:52 #6
vil det sige at jeg skal flytte mit database query fra formen:
  $optionblock = makeDropDownSelectBox (productname, "Select product");
  echo "$optionblock";
til:
<?
  lav et udtræk fra databasen der smider tingene i et javascriptarray udfra værdien i $_GET['val'] der ser sådan ud!
  sel2 = new Array("value1|tekst1","value2|tekst2" osv);
?>
Avatar billede grunken Nybegynder
12. marts 2004 - 02:00 #7
-nej ikke helt, det skal ændres lidt :o)

men fortæl mig hvilke felter den henter text og værdi fra, så skal jeg nok lave udtrækket for dig :o)
Avatar billede grunken Nybegynder
12. marts 2004 - 02:17 #8
og dog filen der bliver loadet i iframen burde se sådan ud :-)

håber du ser logikken i udtrækket :o)


<html>
<head>
<script type="text/javascript">
elm = parent.document.form.choise.options;
for (i=0;i<elm.length;i++){
  elm[i] = null;
}

  <?php
    $sel = $_GET['sel'];
    $query = mysql_query("SELECT textfelt,værdifelt FROM database WHERE kategorifelt=$sel");

    echo "sel2 = new Array(";
    while($row = mysql_fetch_assoc($query)){
    echo $row "\"".['værdifelt']."|".$row['textfelt']."\";}
    echo ");";
?>

for (i=0;i<sel2.length;i++){
  str = sel2[i].split("|")
  elm.options[i]= new Option(str[1],str[0]);
}
</script>
</head>
</html>

det du skal ændre i udtrækket er alle de steder hvor jeg har skrevet database, og værdifelt, samt textfelt :o)

-håber du ser den dybere logik i det (jeg gør) :o)

ellers sig til!
Avatar billede danic Nybegynder
12. marts 2004 - 07:04 #9
Men query kommer så til at se sådan her ud:
<?php
    $sel = $_GET['sel'];
    $query = mysql_query("SELECT
    retailerproducts.retailerid,
    retailerproducts.productid,
    retailers.retailerid,
    retailers.name,
    retailers.country FROM
    retailers, retailerproducts WHERE
    kategorifelt=$sel AND
    retailerproducts.productid = '1' ORDER BY country ASC;

    echo "sel2 = new Array(";
    while($row = mysql_fetch_assoc($query)){
    echo $row "\"".['productid']."|".$row['country']."\";}
    echo ");";
?>

Men når jeg har kørt queryen en gang så skal denne linie vel også ændres på hoved siden:

<SELECT NAME="choice" onChange="this.form.submit();">
  $optionblock = makeDropDownSelectBox2 (retailers, country, $productid,  "Select country")
  echo "$optionblock";
</SELECT>
Avatar billede danic Nybegynder
12. marts 2004 - 07:05 #10
ups retailerproducts.productid = '$productsid' ORDER BY country ASC;
hvor $productsid kommer fra den første query.
Avatar billede danic Nybegynder
12. marts 2004 - 07:08 #11
CREATE TABLE products (
  productid int(100) NOT NULL auto_increment,
  productname varchar(255) NOT NULL default '',
  PRIMARY KEY  (productid)
) TYPE=MyISAM COMMENT='Product Information';

# Struktur dump for tabellen `retailerproducts`

CREATE TABLE retailerproducts (
  retailerproductsid int(11) NOT NULL auto_increment,
  retailerid int(11) NOT NULL default '0',
  productid int(11) NOT NULL default '0',
  PRIMARY KEY  (retailerproductsid),
  KEY extraID (retailerproductsid)
) TYPE=MyISAM;

# --------------------------------------------------------

#
# Struktur dump for tabellen `retailers`
#

CREATE TABLE retailers (
  retailerid int(11) NOT NULL auto_increment,
  name varchar(55) NOT NULL default '',
  country varchar(55) NOT NULL default '',
  PRIMARY KEY  (retailerid)
) TYPE=MyISAM COMMENT='Retailer Information';
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