Meerdere inputvelden met dezelfde classnaam posten samen met hun ids

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Snelle Jaap

Snelle Jaap

15/03/2018 15:05:01
Quote Anchor link
Ik heb een winkelmandoverzicht waarin een aantal producten kunnen staan samen met hun hoeveelheid, deze hoeveelheid is erin gezet als een inputveld waar het id in staat (de productnaam) en dezelfde class om deze met jquery te kunnen aanroepen.

Onderop staat een 'Wijzig winkelmand' knop, die het hele gebeuren moet posten naar een PHP script wanneer erop wordt geklikt.

Wat zou de beste manier zijn om dit op te lossen? Misschien alle ids opsturen samen met de hoeveelheid, en dan kijken of deze aanwezig is in de sessie array, zo ja deze vervangen?

Wanneer ik nu klik op wijzig winkelmand wordt er maar 1 product gepost, ipv allemaal, hoe kan ik deze allemaal posten? En wat zou de beste manier zijn om dit te doen? Misschien de waardes in een array/object stoppen en deze mergen met de sessie array waar alle producten in zitten?

Mijn code zoals ik het nu heb:

Mijn winkelmand tabel
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<div class="col-md-8">
   <div class="kl-title-block clearfix text-left tbk-symbol--line  tbk-icon-pos--after-title">
      <h2 class="tbk__title montserrat fs-34 fw-semibold black winkelmandtitle">Uw Winkelmand</h2>
      <span class="tbk__symbol ">
      <span></span>
      </span>
      <h4 class="tbk__subtitle fs-22 fw-thin">Bent u niets vergeten?</h4>
   </div>
   <div class="table-responsive">
      <table class="table carttable">
         <thead>
            <tr>
               <th>Verwijder</th>
               <th>Afbeelding</th>
               <th>Product</th>
               <th>Prijs</th>
               <th>Aantal</th>
               <th>Totaal</th>
            </tr>
         </thead>
         <tbody>
            <tr>
               <td><a href="#" class="remove" id="Bad 13" title="Verwijder dit product"></a></td>
               <td>
                  <a href="baden/bad-13" class="product-title">
                  <img class="attachment-shop_thumbnail" src="images/defaultimage.jpg" alt="Bad 13" title="Bad 13">
                  </a>
               </td>
               <td>
                  <a href="baden/bad-13" class="product-title">
                  Bad 13
                  </a>
               </td>
               <td> 1500</td>
               <td>
                  <div class="quantity">
                     <input type="number" step="1" min="0" name="quantity" id="Bad 13" value="1" title="Qty" class="input-text qty quantityclass text" size="4">
                  </div>
               </td>
               <td> 1500</td>
            </tr>
         </tbody>
         <tbody>
            <tr>
               <td><a href="#" class="remove" id="Bad 14" title="Verwijder dit product"></a></td>
               <td>
                  <a href="baden/bad-14" class="product-title">
                  <img class="attachment-shop_thumbnail" src="images/defaultimage.jpg" alt="Bad 14" title="Bad 14">
                  </a>
               </td>
               <td>
                  <a href="baden/bad-14" class="product-title">
                  Bad 14
                  </a>
               </td>
               <td> 800</td>
               <td>
                  <div class="quantity">
                     <input type="number" step="1" min="0" name="quantity" id="Bad 14" value="1" title="Qty" class="input-text qty quantityclass text" size="4">
                  </div>
               </td>
               <td> 800</td>
            </tr>
         </tbody>
         <tbody>
            <tr>
               <td><a href="#" class="remove" id="Bad 1" title="Verwijder dit product"></a></td>
               <td>
                  <a href="baden/bad1" class="product-title">
                  <img class="attachment-shop_thumbnail" src="cms/images/bad.jpg" alt="Bad 1" title="Bad 1">
                  </a>
               </td>
               <td>
                  <a href="baden/bad1" class="product-title">
                  Bad 1
                  </a>
               </td>
               <td> 1000</td>
               <td>
                  <div class="quantity">
                     <input type="number" step="1" min="0" name="quantity" id="Bad 1" value="1" title="Qty" class="input-text qty quantityclass text" size="4">
                  </div>
               </td>
               <td> 1000</td>
            </tr>
         </tbody>
      </table>
      <input type="submit" class="button updatebutton" name="update_cart" value="Wijzig winkelmand">
   </div>
</div>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
//Wijzig winkelmand met het aantal producten
tpj('.cartsection').on('click', '.updatebutton', function(event) {
  var $edit = tpj('.quantityclass').attr('id'),
  $aantal = tpj('.quantity').find( "input[name='quantity']" ).val(),
  url = 'includes/cartoverzicht.php';

  var posting = tpj.post( url, { edit: $edit, aantal: $aantal} );

  posting.done(function( data ) {
    var content = tpj( data );
    tpj( "#cartresult" ).empty().append( content );
  });
});


Wanneer ik nu klik op de knop pakt hij altijd het eerste product, het aantal post hij wel gewoon netjes.

Dus kort samengevat: wat is de beste manier om alle productaantallen te posten en deze te vervangen voor de huidige quantity waardes in de sessie array?
 
PHP hulp

PHP hulp

26/09/2020 00:31:11
 
Thomas van den Heuvel

Thomas van den Heuvel

15/03/2018 16:04:38
Quote Anchor link
Maar dat is toch je hele actuele winkelmand? Ik zou bij het bijwerken dan ook de oorspronkelijke winkelmand leegkieperen en gewoon opnieuw vullen met de zojuist verstuurde data.

Er wordt maar 1 ding gepost omdat de veldnamen allemaal hetzelfde zijn: quantity. Dan moet je blijkbaar nog een textueel id uit een veld peuteren... dit lijkt mij allemaal hopeloos complex? Ik hoop dat je ook echte (auto-increment) id's voor producten gebruikt? Dan wordt het simpel. Hanteer de array-vorm voor naamgeving van inputvelden en de hoeveelheid voor waarden, dus zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="text" name="products[<product id>]" value="12">

Dit kun je rechtstreeks serializen en geeft je direct de informatie die je wilt: 12 x product met id <product id>, die allemaal netjes terug te vinden zijn in het array $_POST['products'].
Gewijzigd op 15/03/2018 16:05:40 door Thomas van den Heuvel
 
Snelle Jaap

Snelle Jaap

16/03/2018 10:26:50
Quote Anchor link
Thomas van den Heuvel op 15/03/2018 16:04:38:
Maar dat is toch je hele actuele winkelmand? Ik zou bij het bijwerken dan ook de oorspronkelijke winkelmand leegkieperen en gewoon opnieuw vullen met de zojuist verstuurde data.

Er wordt maar 1 ding gepost omdat de veldnamen allemaal hetzelfde zijn: quantity. Dan moet je blijkbaar nog een textueel id uit een veld peuteren... dit lijkt mij allemaal hopeloos complex? Ik hoop dat je ook echte (auto-increment) id's voor producten gebruikt? Dan wordt het simpel. Hanteer de array-vorm voor naamgeving van inputvelden en de hoeveelheid voor waarden, dus zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="text" name="products[<product id>]" value="12">

Dit kun je rechtstreeks serializen en geeft je direct de informatie die je wilt: 12 x product met id <product id>, die allemaal netjes terug te vinden zijn in het array $_POST['products'].

Bedankt voor je reactie, ik heb het anders opgelost. Namelijk alle quantities en productnamen posten in een json object, deze decoden in mijn php script en waar de productnaam gelijk is aan de key van de array (dat zijn namelijk de productnamen) past hij de quantity aan.
 



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.