Por lo pronto, en la medida de lo posible no uses comillas simples para html, no es estándar. Aquí te he retocado el código que tienes (sin modificar nada):
Código PHP:
function imprime_carrito(){
$suma = 0;
echo '<FORM ACTION="insertar_pedido.php" enctype="multipart/form-data" method="post">
<table border=1 cellpadding="4" width="100%" align="center" bordercolor="#000000">
<tr bordercolor="#1D3A62">
<td class="titulo_menu" align="center">Cantidad</td>
<td class="titulo_menu" align="center">Referencia</td>
<td class="titulo_menu" align="center">Precio (unidad)</td>
<td class="titulo_menu" align="center">Acción</td>
</tr>';
for ($i = 0; $i < $this->num_productos; $i++) {
if ($this->array_id_prod[$i] != 0) {
echo '<tr bordercolor="#000000">
<td class="volver">
<input name="textfield" type="text" name="cantidad" id="cantidad" size="3" maxlength="5" value="1" style="height: 19px">
</td>
<td class="texto">'
.$this->array_referencia_prod[$i]. '<input type="hidden" name="referencia" id="referencia" value="' .$this->array_referencia_prod[$i]. '">
</td>
<td class="texto" align="center">'
.$this->array_precio_prod[$i]. '<input type="hidden" name="precio" id="precio" value="' .$this->array_precio_prod[$i]. '">
<input type="hidden" name="estado" id="estado" value="on">
</td>
<td><a href="eliminar_producto.php?linea=$i">Eliminar producto</td>
</tr>';
$suma += $this->array_precio_prod[$i];
}
}
# Muestro el total
echo '<tr></td><td>
<td class="texto"><b>TOTAL (€):</b></td><td class="texto" align="center"> <b>' .$suma. '</b></td><td bordercolor="#FFFFFF"> </td></tr>';
# Total más IVA
echo '<tr bordercolor="#FFFFFF"><td bordercolor="#FFFFFF" colspan="4" align="center" class="volver">
<input type="submit" name="boton" value="realizar pedido" style="height: 17px" /></td></tr>
</table>';
}
Lo que te ocurre es que cada vez que itera el FOR escribes nuevos INPUT con mismos names/ids; deberías añadirle el índice de la iteración para diferenciarlos, por ejemplo:
Código PHP:
$name_input = 'referencia_' . $i;
echo '<input name="' .$name_input. '" type="text" />';
Y luego, en la parte del código donde recoges el post, como a priori no sabes cúantos input pueden llegarte, puedes jugar con las funciones array_values() y array_keys(), que te devuelven los valores de las variables y los nombres de las mismas respectivamente. O también recorriento el array $_POST.