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:
<?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>
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.