Getal van 2 of meer cijfers wordt 1 cijferig na submit
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)
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
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> </td>
<td> </td>
<td> </td>
<td> </td>
<td><a onclick="$('#form').submit();" class="button"><?php echo 'Update' ?></a></td>
<td> </td>
</tr>
<?php } else { ?>
<tr>
<td class="center" colspan="6"><?php echo $text_no_results; ?></td>
</tr>
<?php } ?>
</tbody>
</table>
</form>
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> </td>
<td> </td>
<td> </td>
<td> </td>
<td><a onclick="$('#form').submit();" class="button"><?php echo 'Update' ?></a></td>
<td> </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
Zet error reporting eens aan.
Code (php)
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)
1
2
3
4
5
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 . "'");
}
?>
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.
Dat was precies de oplossing.
Bedankt!