Avatar billede rasmusdegnbol Nybegynder
11. maj 2005 - 21:47 Der er 10 kommentarer

Udregning af ordre

Er igang med at lave et beregnings program. Alt bliver hentet fra DB via PHP. Kunden vælger et produkt som derefter henter en pris som er "grundprisen".
Herefter skal man kunne vælge extra udstyr via. checkbox. Dette skal igen opdaterer den samlede pris. Slår man igen boxen fra skal dette jo så igen trækkes fra totalprisen.

Totalprisen ska jeg gerne kunne hive ud af scriptet så den kan blive gemt med sessiondata i PHP.

Jeg har absolut INGEN større forstand på JS og håber at der findes nogle kyndige herinde der har lyst til at hjælpe. :)
Avatar billede skovenborg Nybegynder
11. maj 2005 - 22:49 #1
nu ved jeg ikke præcis hvilke varer det drejer sig om eller hvordan din nuværende form ser ud, men hvis det nu var biler det drejede sig om kunne dette nok være tilstrækkeligt:
<script type="text/javascript">
  var price = 0;
  var currency = " kr.";
  function changePrice(outputElm,addPrice) {
        price += addPrice;
        outputElm.value = price+currency;
  }
  function convertPriceString(str) {
        return Number(str.substr(str.lastIndexOf("_")+1));
  }
</script>

<body>
<form name="form1">
  <select name="produkt" onchange="if (this.selectedIndex > 0) {changePrice(this.form.samlet_pris,convertPriceString(this.value));}">
  <option value="">--Vælg en bil--</option>
  <option value="opel_kadett_50000">Opel Kadett</option>
  <option value="ferrari_10000">Ferrari</option>
  <option value="folkevogn_600000">Folkevogn</option>
  </select>
  <br>
  Servostyring: <input type="checkbox" name="servostyring" value="3000" onclick="p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br>
  Rat: <input type="checkbox" name="rat" value="10" onclick="p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br>
  Dyre dæk: <input type="checkbox" name="dyre_daek" value="10000" onclick="p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br>
  Raketmotor: <input type="checkbox" name="raketmotor" value="5" onclick="p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br>
  <hr>
  Samlet pris: <input type="text" name="samlet_pris">
</form>
</body>
Avatar billede skovenborg Nybegynder
11. maj 2005 - 22:53 #2
Som du måske kan se ud fra html-koden, så skrives beløbet til sidst i value-attributen. Den kan derfor enten stå alene, som nede ved checkboxene, eller stå efter det sidste underscore, som oppe i select-boksen.
Om du vil benytte denne funktion med at skrive en tekst før prisen (som opel_kadett_50000) ved jeg ikke, og hvis du ikke gør det kunne det laves en anelse lettere. Men det er til at overse.
Avatar billede rasmusdegnbol Nybegynder
15. maj 2005 - 16:47 #3
tak for hjælpen so far! :)

Pt. har jeg følgende spørgsmål.
1) Hvordan kan man få den til at start med at skrive et beløb, altså f.eks. 0 kr inden man vælger extra udstyr. (Jeg har slettet det med at vælge bil, da det ikke er nødvendigt).

2) Hvordan kan jeg lave output uden at det bliver i en input boks, og hvordan kan jeg lave dette sådan at jeg kan få beløbet + valgte extra udstyr ud ved at klikke videre til bestilling?
Avatar billede skovenborg Nybegynder
15. maj 2005 - 21:40 #4
Jeg tror umiddelbart dette vil kunne gøre det:
<script type="text/javascript">
  var price = 0;
  var currency = " kr.";
  var outputId = "pris_ialt";
  function changePrice(outputElm,addPrice) {
        price += addPrice;
        outputElm.value = price;
        document.getElementById(outputId).innerHTML = price+currency;
  }
  function convertPriceString(str) {
        return Number(str.substr(str.lastIndexOf("_")+1));
  }
</script>
</head>
<body onload="changePrice(document.form1.samlet_pris,0);">
<form name="form1">
  <br>
  Servostyring: <input type="checkbox" name="servostyring" value="3000" onclick="p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br>
  Rat: <input type="checkbox" name="rat" value="10" onclick="p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br>
  Dyre dæk: <input type="checkbox" name="dyre_daek" value="10000" onclick="p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br>
  Raketmotor: <input type="checkbox" name="raketmotor" value="5" onclick="p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br>
  <hr>
  Samlet pris: <span id="pris_ialt"></span><input type="hidden" name="samlet_pris">

</form>
</body>

1) Her kan du starte med at skrive <body onload="changePrice(document.form1.samlet_pris,0);">
hvor 0-tallet kan udskiftes med startbeløbet
eller evt.
<body onload="changePrice(document.form1.samlet_pris,price);">
hvor du så istedet for kan ændre price-variablen fra starten af (evt. via serverside som php/asp) til at være startprisen.

2) Her har jeg lavet en enkel lille variabel som hedder
var outputId = "pris_ialt";
Denne henviser så til id'en på det output-element du gerne vil have:
Samlet pris: <span id="pris_ialt"></span><input type="hidden" name="samlet_pris">

Læg mærke til at det som førhen var input-boksen er nu blevet en hidden boks. Dvs. at du ved at klikke videre til bestilling (via en submit-boks formoder jeg) får den samlede pris med samt ekstra-udstyret. Du får ved submit til en anden side også oplysningerne med om hvilke ekstraudstyr der er valgt.
Avatar billede rasmusdegnbol Nybegynder
16. maj 2005 - 20:49 #5
super det virker bare! :)
Avatar billede rasmusdegnbol Nybegynder
16. maj 2005 - 20:53 #6
sagde jeg lidt for tidligt! ;)

Hvordan får man info ud om hvilke checkboxe der er checked på næste side? (bliver lavet med en submit..)
Avatar billede rasmusdegnbol Nybegynder
16. maj 2005 - 21:12 #7
skal lige nævnes at name er dynamisk og bliver lavet af et MySQL array.
Avatar billede skovenborg Nybegynder
16. maj 2005 - 23:24 #8
Hvis du prøver at submitte og på den side du submitter til skriver:
<?php
  print_r($_POST);
?>
Så kan du se strukturen af det data, som bliver sendt videre. (Jeg antager du bruger PHP - hvilket jo tit passer meget godt sammen med MySQL).

Her kan du se at det kun er de checkboxe, som er valgt, der bliver sendt videre, så du kan evt. gennemløbe $_POST-arrayet og hente informationerne ud om hvilke ekstraudstyr, der er valgt.

En anden metode er at lave et enkelt hidden-felt til:
<input type="hidden" name="samlet_pris"><input type="hidden" name="ekstraudstyrsListe">
og tilføje disse to funktioner:
var eUdstyr = {}
  function ekstraudstyr(chkBox) {
      eUdstyr[chkBox.name] = chkBox.checked;
  }
  function submitEkstraudstyr(outputElm) {
      for (i in eUdstyr) {
          outputElm.value += (eUdstyr[i]) ? i+"," : "";
      }
      outputElm.value = outputElm.value.substring(0,outputElm.value.length-1);
      return true;
  }

Den første skal kaldes ved hver enkel checkbox:
Servostyring: <input type="checkbox" name="servostyring" value="3000" onclick="ekstraudstyr(this);p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br>
  Rat: <input type="checkbox" name="rat" value="10" onclick="ekstraudstyr(this);p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br>
  Dyre dæk: <input type="checkbox" name="dyre_daek" value="10000" onclick="ekstraudstyr(this);p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br>
  Raketmotor: <input type="checkbox" name="raketmotor" value="5" onclick="ekstraudstyr(this);p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br>

og den sidste skal kaldes oppe i selve form-elementet:
<form name="form1" action="etSted.php" method="post" onsubmit="return submitEkstraudstyr(this.ekstraudstyrsListe);">
Avatar billede skovenborg Nybegynder
16. maj 2005 - 23:28 #9
foresten:
Hvis din value kun består af et tal, kan du reducere din kode til:
Servostyring: <input type="checkbox" name="servostyring" value="3000" onclick="ekstraudstyr(this);changePrice(this.form.samlet_pris,((this.checked) ? Number(this.value) : -Number(this.value)));"><br>
  Rat: <input type="checkbox" name="rat" value="10" onclick="ekstraudstyr(this);changePrice(this.form.samlet_pris,((this.checked) ? Number(this.value) : -Number(this.value)));"><br>
  Dyre dæk: <input type="checkbox" name="dyre_daek" value="10000" onclick="ekstraudstyr(this);changePrice(this.form.samlet_pris,((this.checked) ? Number(this.value) : -Number(this.value)));"><br>
  Raketmotor: <input type="checkbox" name="raketmotor" value="5" onclick="ekstraudstyr(this);changePrice(this.form.samlet_pris,((this.checked) ? Number(this.value) : -Number(this.value)));"><br>

Altså hvor vi lige dropper convertPriceString-funktion (hvilken du så også kan slette fra det øvrige script). Bare så du ved det :-)
Avatar billede rasmusdegnbol Nybegynder
22. maj 2005 - 23:01 #10
Nu har jeg lige prøve den der.

<?php
  print_r($_POST);
?>

Den gav følgende resultat.

Array ( )

Ser ud til at der er noget galt så?
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