Avatar billede dd-man Nybegynder
21. juli 2003 - 00:42 Der er 23 kommentarer og
1 løsning

Lave noget onchange på en select box

Hej

Jeg vil gerne have lavet noget ligesom på www.sase.dk <- der er på den side select bokse ude i venstre side.

Jeg vil gerne have lavet det på den måde, men det skal være med kunder, og produkter.

Altså at der vises en liste med kunder... og når man vælger en kunde, kommer de produkter frem, kunden har.

Det som det skal kobles sammen med er:

------------------------
kunde_tabel, indeholder:

kundenr, kontaktperson
------------------------

------------------------
produktoplysninger indeholder:

kundenr, produktnavn (som der kan være flere af, med samme kundenr)
------------------------


Det skal så laves på samme måde som med www.sase.dk, bare med at man vælger en kunde og produkterne kommer frem.

"Skal lige siges, at det er PHP/mySQL som skal lave arrays'ne"
- hvis du bare laver det i Javascript, kan vi tage det derfra ;)


På forhånd mange tak
Avatar billede grunken Nybegynder
21. juli 2003 - 00:48 #1
Avatar billede dd-man Nybegynder
21. juli 2003 - 00:59 #2
Kan du fortælle mig hvordan jeg kobler det sammen med PHP/MySQL?

Noget du skal have at vide for at kunne hjælpe mig? :)
Avatar billede roenving Novice
21. juli 2003 - 01:05 #3
Bare eksempelvis (og php-syntaksen er garanteret forkert -- det kan jeg ikke !-)

<?$t = $row[afd]+1?>
afdelinger = new Array(<?=$t?>); //Antallet af afdelinger + 1
for (i = 0; i < afdelinger.length; i++) afdelinger[i] = new Array();
afdelinger[0][0] = "<--";
<? // her skal du lave opslaget efter afdelinger
?>
afdelinger[1][0] = <?=$row[navn1]?>;
afdelinger[1][1] = <?=$row[navn2]?>;
afdelinger[1][2] = <?=$row[navn3]?>;
osv...
Avatar billede dd-man Nybegynder
21. juli 2003 - 01:30 #4
Jeg har nu:
<script>
afdelinger = new Array(4); //Antallet af afdelinger + 1
for (i = 0; i < afdelinger.length; i++) afdelinger[i] = new Array();
afdelinger[0][0] = "<--";
afdelinger[10001][0] = "produkt1";
afdelinger[10003][1] = "produkt1";
afdelinger[10000][2] = "produkt1";
afdelinger[10005][3] = "produkt1";
afdelinger[10005][4] = "produkt2";
afdelinger[10005][5] = "produkt3";
afdelinger[10005][6] = "produkt4";

function skift(frm) {
ind = frm.dd1.selectedIndex;
frm.dd2.length = afdelinger[ind].length;
for (n = 0; n < afdelinger[ind].length; n++) {
frm.dd2.options[n].text = afdelinger[ind][n];
frm.dd2.options[n].value = afdelinger[ind][n];
}
}
</script>


Men det virker ikke, hvad er der galt?
Avatar billede roenving Novice
21. juli 2003 - 01:37 #5
Index i disse strenge kan _ikke_ ændres -- det er ikke henvisninger il navne eller lignende men en tæller på select-boxene
så det _skal_ hedde
afdelinger[1][0] = "produkt1"; // <-- den 1. afdeling, første produkt
afdelinger[2][0] = "produkt1"; // <-- den 2. afdeling, første produkt
afdelinger[2][1] = "produkt1"; // <-- den 2. afdeling, andet produkt
afdelinger[3][0] = "produkt1"; // <-- den 3. afdeling, første produkt
Avatar billede dd-man Nybegynder
21. juli 2003 - 04:01 #6
Hvordan skal jeg så gøre det... hmm.. altså når det er dynamisk.. fra database
Avatar billede Slettet bruger
21. juli 2003 - 12:10 #7
Du udskriver kunderne i select-boksen:

<select name="dd1" onChange="skift(this.form);">
<option value="">Vælg kunde!</option>
<?
for ($i = 1; $i <= count($KUNDE_ARRAY); $i++)
  echo "<option value=\"" . $KUNDE_ARRAY[$i] . "\">" . $KUNDE_ARRAY[$i] . "</option>\n";
?>
</select>

I scriptet gør du således:

afdelinger[0][0] = "<--";
<?
for ($i = 1; $i <= count($KUNDE_ARRAY); $i++) {
  for ($n = 0; $n < count($PRODUKT_ARRAY_FOR_KUNDE); $n++)
    echo "afdelinger[$i][$n] = \"" . $PRODUKT_ARRAY_FOR_KUNDE[$n] . "\";\n";
}
?>

Det smarteste ville nok være, at lave $PRODUKT_ARRAY_FOR_KUNDE til et todimensionalt array af produkter.
Avatar billede dd-man Nybegynder
21. juli 2003 - 13:42 #8
Jeg har leget med det du skrev, men det lavede ikke andet en mærkelige ting som ikke fungede.. ved ikke hvad jeg lavede forkert.. men jeg skriver her koden, som jeg håber du kan skrive om til at virke for mig.
Dette er min kode jeg har lavet nu et eksempel hvor man vælger en kunde, og den viser hvor mange webhoteller den kunde har.:

--------------------
HEAD
--------------------

<script>
afdelinger = new Array(4); //Antallet af afdelinger + 1
for (i = 0; i < afdelinger.length; i++) afdelinger[i] = new Array();
afdelinger[0][0] = "<--";

<?php
include ("inc/mysql.inc.php");
include ("inc/conf.inc.php");

$hentkunder = mysql_query("SELECT * FROM $sql_webhotel ORDER BY domaene ASC");
$i = 0;

while ($rowkunde = mysql_fetch_array($hentkunder)) {
  echo "afdelinger[". $i. "][$i] = \"". $rowkunde[domaene]. "\";\n";
  $i++;
}

?>

function skift(frm) {
ind = frm.dd1.selectedIndex;
frm.dd2.length = afdelinger[ind].length;
for (n = 0; n < afdelinger[ind].length; n++) {
frm.dd2.options[n].text = afdelinger[ind][n];
frm.dd2.options[n].value = afdelinger[ind][n];
}
}
</script>

--------------------
HEAD-SLUT
--------------------
--------------------
BODY
--------------------


<form action="test.html" method="get">
<select name="dd1" onChange="skift(this.form);">

<?php
include ("inc/mysql.inc.php");
$hent_kunder = mysql_query("SELECT * FROM $sql_kunder ORDER BY kontaktperson ASC");

while ($row = mysql_fetch_array($hent_kunder)) {
  echo "<option value=\"$row[kundenr]\">$row[kontaktperson]</option>";
}

?>
</select>

<select name="dd2">
<option value="intet">&lt;--</option>
</select>
<br><input type="submit" value="Indsend">
</form>

--------------------
BODY-SLUT
--------------------
Avatar billede roenving Novice
21. juli 2003 - 14:45 #9
>>phoenixv

-- jeg har ikke (endnu !-) prøvet at lege med din kode, men umiddelbart har jeg tænkt: Kan den forstå et forskelligt antal options -- altså er den fuldt dynamisk ...

-- à propos er det den næste working demo jeg vil lave -- og een af de ting jeg har tænkt mig at vise er den dynamiske opkobling med php og asp/VB, så det ku' være jeg fik brug for din hjælp til det der ligger ud over javascripten ...
Avatar billede Slettet bruger
21. juli 2003 - 17:25 #10
roenving>> Mit script kan godt klare et dynamisk antal options, men denne linje skal jo opdateres:

afdelinger = new Array(4); //Antallet af afdelinger + 1

dd-man>> Kan du ikke smide et link? Så kan vi sammenligne outputtet med din kode. :)
Avatar billede dd-man Nybegynder
21. juli 2003 - 17:33 #11
Jeg kan ikke få den til at virke...

Jeg kan godt få den til at virke, med alm. HTML/javascript, men når jeg prøver at sætte det sammen med PHP, kan den ikke helt finde ud af det...

Jeg har følgende nu:
afdelinger[0][0] = "<--";
afdelinger[1][0] = "domain1.dk";
afdelinger[2][0] = "domain2.dk";
afdelinger[3][0] = "domain3.dk";
afdelinger[4][0] = "domain4.dk";
afdelinger[5][0] = "domain.com";
afdelinger[6][0] = "hest.kd";
afdelinger[7][1] = "hest.kd";
afdelinger[8][2] = "hest.kd";
afdelinger[9][3] = "hest.kd";
afdelinger[10][4] = "hest.kd";

Men når jeg når 4 kunde, så kommer der javascript fejl:

'afdelinger[...].length' er null eller ikke et objekt

Hvad kan det skyldes?

På forhånd tak.
Avatar billede roenving Novice
22. juli 2003 - 01:34 #12
I denne (oprindelige ,-) er der begrænset på array-størrelse ...

afdelinger = new Array(4); //Antallet af afdelinger + 1

-- da det er fuldstændig ligegyldigt i javascript ændrer du bare til:

afdelinger = new Array();

men så skal du ændre denne linje til at tælle antallet af afdelinger:

for (i = 0; i < antaAfdelinger; i++) afdelinger[i] = new Array();
Avatar billede dd-man Nybegynder
22. juli 2003 - 01:56 #13
Jeg har leget lidt med det du lige skrev, men den siger fejl til det, så jeg skriver bare antallet (Der for der stod 4) ud med det rigtige tal via PHP...

Men den virker stadig ikke som jeg vil have den til...

Er det muligt at du kan få at vide hvad du vil have at vide, for at kunne få den til at virke ordenligt?
Avatar billede roenving Novice
22. juli 2003 - 02:57 #14
checkede du den der + 1 ?-)

javascript er i den grad ligeglad med den oplysning -- uanset hvad du senere bruger er det eneste sted den kan bruge det er en forespørgsel på .length, hvilket du sagtens kan undgå
Avatar billede dd-man Nybegynder
22. juli 2003 - 03:01 #15
Jeg må indrømme at jeg ikke forstår javascript særligt godt, derfor er det ret svært for mig at "bare lige" forstå når du skriver "en forespørgsel på length". :)

Men jeg kan lige vende tilbage igen i morgen... skal også sove lidt engang imellem ;)
Avatar billede roenving Novice
22. juli 2003 - 03:08 #16
for (i = 0; i <= $count; i++) afdelinger[i] = new Array();
Avatar billede Slettet bruger
22. juli 2003 - 11:01 #17
Du har vendt tankegangen om.
Det første tal er kundens nummer. Det andet er produktets nummer. Kundenumre løber fra 1 til n. Produktnummer fra 0 til n:

afdelinger[0][0] = "<--";
afdelinger[1][0] = "Produkt 0 til Kunde 1";
afdelinger[1][1] = "Produkt 1 til Kunde 1";
afdelinger[1][2] = "Produkt 2 til Kunde 1";
afdelinger[2][0] = "Produkt 0 til Kunde 2";
afdelinger[3][0] = "Produkt 0 til Kunde 3";
afdelinger[3][1] = "Produkt 1 til Kunde 3";
Avatar billede dd-man Nybegynder
29. juli 2003 - 17:50 #18
Er der nogen på ICQ, som kan hjælpe mig evt.? det virker slet ikke som det "skal"...

Ellers siger jeg tak fordi i prøvede...

(jeg kan nemlig ikke få den til at gøre præcis som jeg vil have, ev )
Avatar billede Slettet bruger
04. august 2003 - 09:50 #19
(undskyld ventetiden)

Jeg vil da gerne stadig hjælpe, men det allerbedste ville være et link til din kode.
Avatar billede dd-man Nybegynder
07. august 2003 - 23:18 #20
jeg kigger lige tilbage her i morgen, skal smutte nu
Avatar billede dd-man Nybegynder
08. august 2003 - 14:02 #21
Da jeg ikke kunne få svar, lavede jeg det via PHP, server-side, ville bare helst have gjort det via javascript.
Men nu har jeg da en løsning.

Skriv et svar jer der har prøvet at hjælpe mig, så får i point for jeres tid.
Avatar billede Slettet bruger
09. august 2003 - 09:20 #22
Jeg skal ikke få point, hvis jeg ikke har hjulpet.

I fremtiden bør du være klar med et link, for det er den bedste hjælp til brugere, som gerne vil hjælpe dig.
Avatar billede roenving Novice
09. august 2003 - 12:14 #23
Og jeg er ikke så langt fra, at min WD4 er fuldt-flyvende, så du kan prøve at følge med, jeg _håber_ at have den klar med asp- og php-eksempler indenfor en uge:
http://roenving.users.whitehat.dk/ (#4 !-)
Avatar billede dd-man Nybegynder
28. august 2003 - 12:40 #24
Glemte at lukke - sorry
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