Optellen value in Checkboxes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

John Cena

John Cena

02/03/2011 11:32:25
Quote Anchor link
He people,

Ik wil van een x aantal checkboxes die ik display de waarde realtime optellen.
Maar ik wil dat de waarde alleen meegenomen wordt in de berekening wanneer de checkbox is aangevinkt.

Nu denk/gok/vermoed ik dat dat met jQuery te doen moet zijn, maar ik heb geen idee met welke functie.
Wie helpt me op weg?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<tr>                                        
<td colspan="2" value="4">&nbsp;</td>                            
<td colspan="2"><input type="checkbox" id="4" name="product" value="mes" /> 1 mes</td>                                        
<td>&euro; 98</td>

</tr>
<tr>                                        
<td colspan="2" value="3">&nbsp;</td>                                        
<td colspan="2"><input type="checkbox" id="3" name="product" value="ansett_pin" /> Ansett Pin</td>                                        
<td>&euro; 2</td>                                
</tr>
<tr>
<td colspan="2">&nbsp;</td>
<td colspan="2"><b>Totaal</b></td>            
<td style="border-top: 3px solid black;">berekening output</td>
Gewijzigd op 02/03/2011 11:34:20 door John Cena
 
PHP hulp

PHP hulp

23/11/2024 23:31:11
 

02/03/2011 11:51:22
Quote Anchor link
Formulieren horen niet in tabellen vorm gegeven zijn. Ik zie geen waardes.
 
Kris Peeters

Kris Peeters

02/03/2011 12:48:06
Quote Anchor link
De vraag die je stelt, komt niet overeen met de code die je toont.

Doe je iets met je formulier? Stuur je dat ergens op?
Indien wel: twee checkboxes met de zelfde name, is onzin.

Wat zou je willen dat opgeteld wordt?

ansett_pin + mes ?
(is er een wiskundige in de zaal?)

Herformuleer eens.
Gewijzigd op 02/03/2011 12:49:15 door Kris Peeters
 
John Cena

John Cena

02/03/2011 13:31:25
Quote Anchor link
Ik zou willen dat de waardes van de checkboxes, die ik in value meegeef, bij elkaar opgeteld worden, maar alleen wanneer de checkbox ook daadwerkelijk gechecked is.
De code staat er eigenlijk voor piet snot, want bovenstaande gebruik ik niet.

Groeten.
 
Kris Peeters

Kris Peeters

02/03/2011 13:46:25
Quote Anchor link
Ja, okay, dan zet je ons wel op een serieus dwaalspoor.
Als ik een hint mag geven: als je nog eens een vraag hebt en een stuk code dat daar niets mee te maken heeft, houd die code dan voor jou.

Aan de hand van geposte code proberen wij te achterhalen waar je naartoe wil gaan.
We halen er ook uit wat het algemene niveau is van de vragensteller.
Antwoorden die perfect juist zijn en geschikt zijn voor gevorderden zijn vaak totaal waardeloos voor een beginner.
We proberen een antwoord te geven dat wat in de zelfde stijl is geschreven als die van de geposte code.

Bon, wat moet er gebeuren met die opgetelde waarde?
Je spreekt over jQuery. Geen probleem, dat kan inderdaad.
Wil je een alert venster met die waarde? Iets anders?
Zijn het gehele getallen of floats?
 
John Cena

John Cena

02/03/2011 14:20:52
Quote Anchor link
Het zijn floats, en de opgetelde waarde wil ik in een inputfield echo'n.

Ja sorry, zal het nooit meer doen ;)
 
Kris Peeters

Kris Peeters

02/03/2011 14:44:14
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php

$body
= '<form method="post" action="">
  <input name="sum" id="sum"/><br/>
  <hr>
  <input type="checkbox" name="my_name[]" class="product" value="12.3"/> 12.323 <br/>
  <input type="checkbox" name="my_name[]" class="product" value="7.13"/> 7.13 <br/>
  <input type="checkbox" name="my_name[]" class="product" value="3.14"/> 3.14<br/>
  <input type="checkbox" name="my_name[]" class="product" value="200.25"/> 200.25<br/>
  <input type="button" value="OPTELLEN!" id="optellen_button"/><br/>
</form>'
;


echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//NL" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <title> Optellen value in Checkboxes </title>
    <link rel="stylesheet" type="text/css" href="style.css"/>
    <script type="text/javascript" src="jquery.js"></script>
    <script>
    
    // wordt getriggerd als de pagina (DOM) geladen is
    $(document).ready(function() {
      // bind een onClick event aan de button
      $("#optellen_button").click(function(e) {
        
        var selected_checkboxes = $(".product:checked");
        var sum = 0;
        for (var i=0; i<selected_checkboxes.length; i++) {
          sum += Number( $(selected_checkboxes[i]).val() );
        }
        // som in de input steken
        $("#sum").val(sum);
        
      });
    });
    
    </script>
  </head>
  <body>
  '
. $body .'
  </body>
</html>'
;
?>
 
John Cena

John Cena

02/03/2011 15:48:18
Quote Anchor link
Das opzich mooi inderdaad, maar ik wil geen button, ik wil dat ie het instantly doet :$
 

02/03/2011 15:55:12
 
Kris Peeters

Kris Peeters

02/03/2011 16:03:33
Quote Anchor link
Vervang dan mijn lijn 25 door

$(".product").change(function(e) {


(en verander de commentaar op lijn 24, uiteraard)
Gewijzigd op 02/03/2011 16:06:32 door Kris Peeters
 
John Cena

John Cena

02/03/2011 16:40:54
Quote Anchor link
Kheb em iets aangepast aan mijn situatie en het werkt als een tiet. Alleen, nu wil ik eigenlijk dat er automatisch ook nog een euroteken in de input wordt gepoept.
Als ik die keihard bij value zet bij het definieren gaat dat wel goed, tot (uiteraard) er wat berekend wordt, want de value wordt vervangen.

Hoe gooi ik die er nu in?
 
Kris Peeters

Kris Peeters

02/03/2011 17:01:51
Quote Anchor link
lijn 33

$("#sum").val(sum + " €");
Gewijzigd op 02/03/2011 17:11:35 door Kris Peeters
 
John Cena

John Cena

03/03/2011 10:22:14
Quote Anchor link
Ah, bedankt! Nu nog 1 vraag.
Wanneer ik nou in de value iets anders wil zetten, kan ik dan bijvoorbeeld de waarde die nu in value staat in bijv een ID plaatsen?
 
Kris Peeters

Kris Peeters

03/03/2011 15:48:02
Quote Anchor link
Sorry, ik ben de draad kwijt.

Welke id (HTML id?)?
Welke value (van welk element)?
 
John Cena

John Cena

04/03/2011 09:04:04
Quote Anchor link
Nou, ik wil in de value eigenlijk een andere waarde meegeven als wat er nu staat.
Wat ik nu krijg is dat ik in de volgende pagina (tzit in een form namelijk) niet kan zien welke nou allemaal aangevinkt zijn, alleen maar de prijzen van de aangevinkten kan zien.

Die zijn wel eens gelijk, en dus kan ik niet zien welke er nou besteld is.
Dus ik wil graag de value aanpassen en daar de naam van het artikel van maken, en de prijs op een andere manier meenemen, maar wel op de eerste pagina (zoals nu) berekenen.
 
Kris Peeters

Kris Peeters

04/03/2011 12:49:50
Quote Anchor link
Ah, ik wou daar al over beginnen in mijn eerste reactie hier.

Hoe werkt een checkbox?
Je kan aan een checkbox een naam geven, een value en een caption (tekst die je naast de checkbox ziet)

bv. je hebt een checkbox <input type="checkbox" name="mijn_checkbox"/>
Indien je (de client) die checkbox aanvinkt en het formulier opstuurt, wordt $_POST['mijn_checkbox'] = 'on'
Indien je die checkbox niet aanvinkt, wordt er niets opgestuurd. Het is niet zo dat $_POST['mijn_checkbox'] dan 'off' wordt of 0 of false of wat dan ook.

Je kan ook een value toevoegen aan een checkbox. Dan krijgt $_POST['mijn_checkbox'] die value.
Maar denk daar eens over na. In feite is dat vrij zinloos
Wat wil je op php niveau weten? Je wil weten of de gebruiker de checkbox heeft aangevinkt of niet. Meer hoef je niet te weten.

Jij - de scripter - weet namelijk zelf wat die value is, aangezien je die checkbox net zelf hebt gegenereerd.
Dus inderdaad, het enige wat je wil weten, is de id van de checkbox die aangevinkt en opgestuurd is geweest. Waaruit haal je die? uit de name van de checkbox.

Nu - we komen tot een conclusie - iets interessant: je kan in checkboxes met arrays werken. In de key van die array kan je gerust een id kwijt.

Voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  print_r($_POST);
}

echo '<form method="post" action="">
    <input type="checkbox" name="mijn_checkbox[5]"/> foo <br/>
    <input type="checkbox" name="mijn_checkbox[8]"/> bar <br/>
    <input type="checkbox" name="mijn_checkbox[11]"/> Hello <br/>
    <input type="checkbox" name="mijn_checkbox[25]"/> World <br/>
    <input type="submit" value="GO!"/>
</form>
'
;
?>


Bedenk eens dat je een prijslijst hebt en een winkelmandje met checkboxes.
Stel dat je de totale prijs zou berekenen aan de hand van de value die de client opstuurt ... Het is een fluitje van een cent voor een gebruiker om die value aan te passen.
De gebruiker kan dus die prijs op 0 zetten. Als je dan die prijs zou factureren, wordt je als verkoper zwaar in de zak gezet.

Houd dus nooit rekening met een value van een checkbox die verzonden is, hou enkel rekening met de id.

Controleren, doe je bv. zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
...
  foreach ($_POST['mijn_checkbox'] as $key => $selected_checkbox) {
    $id = $key;
    // $selected_checkbox is nu dus de value van de checkbox, maar die hebben we niet nodig
    echo $id .'<br/>';
    // dan doe je maar wat je moet doen met die id
  }
...

?>
Gewijzigd op 04/03/2011 12:55:51 door Kris Peeters
 
John Cena

John Cena

04/03/2011 14:20:28
Quote Anchor link
Dat zou inderdaad goed werken, was het niet dat de checkbox'n uit een database worden gevuld. Ik weet dus niet van te voren hoe de naam van de checkbox is.
 

04/03/2011 14:25:35
Quote Anchor link
In een sessie bijhouden wat allemaal in de form is geplaatst? Later als de form gepost is vergelijken?
 
John Cena

John Cena

04/03/2011 14:35:01
Quote Anchor link
Ja, klinkt allemaal goed. Maar hoe?
 
Kris Peeters

Kris Peeters

04/03/2011 14:44:41
Quote Anchor link
Chi Lion op 04/03/2011 14:20:28:
Dat zou inderdaad goed werken, was het niet dat de checkbox'n uit een database worden gevuld. Ik weet dus niet van te voren hoe de naam van de checkbox is.


Probeer me daar eens van te overtuigen.

De gegevens - die in de database staan - die je gebruikt om de checkboxes te maken, heb je nog nog steeds, op die zelfde plaats in de database, wanneer dat formulier ( enkele seconden later ) opgestuurd wordt.

In tussentijd hebben die records nog steeds de id, zijn die prijzen niet aangepast, ...
 
John Cena

John Cena

04/03/2011 14:50:16
Quote Anchor link
Hmmja, maar nu zie ik dan niet hoe ik vervolgens alle aangevinkte checkboxes op een rijtje krijg?

Ik echo de boxxjes ongeveer zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

echo '<input type="checkbox" id="'.$i.'" class="product" value="'.$row['price'].'" name="'.$row['name'].'"/> '.$row['description'];

?>
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.