Getal van 2 of meer cijfers wordt 1 cijferig na submit

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Goeny Goegoe

Goeny Goegoe

16/07/2013 21:30:52
Quote Anchor link
Hallo allemaal,

Ik heb het volgende probleem:

Ik ben met een scriptje voor OpenCart bezig. Ik wil hierbij alle producten met een voorraad lager dan 20 weergeven in een tabel, en in deze tabel moet het mogelijk zijn om de voorraad hoeveelheid van de producten aan te passen.

Op zich werkt het allemaal prima, op 1 klein detailtje na... Zodra ik een voorraad hoeveelheid van meer dan 1 cijfer invul, dan wordt alleen het eerste cijfer van dat getal opgeslagen.
Bijvoorbeeld: 26 wordt 2, 48 wordt 4, 934 wordt 9.
Als ik 0 t/m 9 gebruik dan worden de getallen wél goed opgeslagen.

Dit is het script wat ik heb:

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
<?php
public function editProduct($product_id, $data) {
        $this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = '" . (int)$data['quantity'] . "', date_modified = NOW() WHERE product_id = '" . (int)$product_id . "'");
        }

            
            public function update() {
            
        if ($this->request->server['REQUEST_METHOD'] == 'POST') {
            
            foreach($this->request->post['product_id'] as $key=>$product_id){
                if (!empty($this->request->post['quantity'][$key])){
                    $this->editProduct($product_id, $this->request->post['quantity'][$key]);    
                }
            }
    
            
            $url = '';
            
            $this->redirect($this->url->link('common/home', 'token=' . $this->session->data['token'] . $url, 'SSL'));
        }


        $this->getList();
      }

?>




<form action="<?php echo $update; ?>" method="post" enctype="multipart/form-data" id="form">
          <table class="list">
            <thead>
              <tr>
                <td class="left"><?php echo 'Product name'; ?></td>
                <td class="left"><?php echo 'Model'; ?></td>
                <td class="left"><?php echo 'Price' ?></td>
                <td class="right"><?php echo 'Stock' ?></td>
                <td class="left"><?php echo 'Edit' ?></td>
                <td class="right"><?php echo $column_action; ?></td>
              </tr>
            </thead>
            <tbody>
              <?php if ($products) { ?>
              <?php foreach ($products as $product) { ?>
              <tr>
                <td class="left"><?php echo $product['name']; ?></td>
                <td class="left"><?php echo $product['model']; ?></td>
                <td class="left"><?php echo $product['price']; ?></td>
                <td class="right"><?php if ($product['quantity'] <= 0) { ?>
                <span style="color: #FF0000;"><?php echo $product['quantity']; ?></span>
                <?php } elseif ($product['quantity'] <= 5) { ?>
                <span style="color: #FFA500;"><?php echo $product['quantity']; ?></span>
                <?php } else { ?>
                <span style="color: #008000;"><?php echo $product['quantity']; ?></span>
                <?php } ?>
                <input type="hidden" name="product_id[]" value="<?php echo $product['product_id']; ?>"></td>
                <td class="left"><input type="text" name="quantity[]" size="2" />
                </td>
                <td class="right"><?php foreach ($product['action'] as $action) { ?>
                  [ <a href="<?php echo $action['href']; ?>"><?php echo $action['text']; ?></a> ]
                  <?php } ?></td>
              </tr>
              <?php } ?>
                <tr>
                  <td>&nbsp;</td>
                  <td>&nbsp;</td>
                  <td>&nbsp;</td>
                  <td>&nbsp;</td>
                  <td><a onclick="$('#form').submit();" class="button"><?php echo 'Update' ?></a></td>
                  <td>&nbsp;</td>
              </tr>

              <?php } else { ?>
              <tr>
                <td class="center" colspan="6"><?php echo $text_no_results; ?></td>
              </tr>
              <?php } ?>
            </tbody>
          </table>
          </form>


Ik begrijp er helemaal niks meer van.
De code is grotendeels gekopieerd uit de "orginele" code van OpenCart.
En de snippets voor de update is 1 op 1 gekopieeërd met als enige aanpassen de squarebrackets om de id's te kunnen koppelen aan het juiste input field.

Zoals gezegd.. Het werkt prima, zolang ik geen getallen van 10 of hoger gebruik.
Gewijzigd op 16/07/2013 21:34:34 door Goeny Goegoe
 
PHP hulp

PHP hulp

17/11/2024 16:37:40
 
- SanThe -

- SanThe -

17/07/2013 00:34:57
Quote Anchor link
Zet error reporting eens aan.
 
Erwin H

Erwin H

17/07/2013 10:09:52
Quote Anchor link
Dit is hoe je de functie aanroept om de query uit te voeren:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
foreach($this->request->post['product_id'] as $key=>$product_id){
  if (!empty($this->request->post['quantity'][$key])){
    $this->editProduct($product_id, $this->request->post['quantity'][$key]);    
  }
}
  
?>

De tweede parameter moet dus een getal (in een stringvorm) zijn volgens mij. 'quantity' is namelijk een input met de naam 'quantity[]', een array dus, nu pak je daar 1 element uit.

Maar dit is wat je in die functie doet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
public function editProduct($product_id, $data) {
  $this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = '" . (int)$data['quantity'] . "', date_modified = NOW() WHERE product_id = '" . (int)$product_id . "'");
}

?>

Het gaat dan om (int)$data['quantity']. Oftewel, je spreekt het aan als nog een keer een array. De key 'quantity' bestaat echter helemaal niet en blijkbaar krijg je dan alleen het zoveelste karakter eruit. Als je dit vervangt door alleen (int)$data zou het volgens mij wel goed moeten gaan.
 
Goeny Goegoe

Goeny Goegoe

17/07/2013 13:34:01
Quote Anchor link
Soms..... ben ik best wel een beetje dom!

Dat was precies de oplossing.
Bedankt!
 



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.