Asi es Cluster, ya sabia que el fallo era de las sesiones, ya que un carrito se basa en eso. Me he revisado el articulo que se hace en php.net sobre las mismas pero no acabo de entender como reparar mi fallo.
te explico lo que hace mi codigo, el cliente entra en una pagina ve un producto selecciona un checkbox y envia el formulario, al enviarlo llega a la pagina de envio la que esta arriba, esta crea la sesion con la clase carrito y demas e introduce los productos, entonces, el cliente puede seguir comprando, o ir a facturar donde le sale una lista con lo que ha comprado, y esto se envia por mail.
El problema era que al introducirlo lo hace una, varias o ninguna vez, si un experto como tu dice que puede ser por el tema del SID, pues es lo que tengo que mirar. en ningun momento le indico nada del SID, por lo tanto supongo muchas cosas como tu bien dices.
Que debo hacer? pasarlo por url?
os pongo el codigo donde saco la informacion guardada en la sesion.
Código PHP:
<?
session_start();
if (!isset($_SESSION["carrito"])){
$_SESSION["carrito"] = new carrito();
}
class carrito {
var $num_productos;
var $array_id_prod;
var $array_nombre_prod;
var $array_precio_prod;
var $array_tarifa;
function carrito () {
$this->num_productos=0;
}
function imprime_carrito(){
$suma = 0;
$cadena= "<table width='582' border='1' bordercolor='#000000' cellspacing='0' cellpadding='2' class='txt'>
<tr>
<td align='center' class='txt'><b> Referencia </b></td>
<td align='center' class='txt'><b> Descripcion </b></td>
<td align='center' class='txt'><b> Precio </b></td>
<td align='center' class='txt'><b> Tarifa transporte </b></td>
<td align='center' class='txt'> </td>
</tr>";
for ($i=0;$i<$this->num_productos;$i++){
if($this->array_id_prod[$i]!=0){
$cadena.="<tr>
<td class='txt' align=\"center\">" . $this->array_ref[$i] . "</td>
<td class='txt'>" . $this->array_nombre_prod[$i] . "</td>
<td class='txt' align=\"right\">" . $this->array_precio_prod[$i] . " €</td>
<td class='txt' align=\"right\">".$this->array_tarifa[$i]." €</td>
<td class='txt' align=\"center\"><a class=\"txt\" href='del_prod.php?linea=$i'>Eliminar</a></td>
</tr>";
$suma += $this->array_precio_prod[$i];
$suma2 += $this->array_tarifa[$i];
$subtotal = number_format("$suma+$suma2",2,".","");
//$subtotal1 = round("$suma+$suma2",2);
$iva1= $subtotal * 0.16;
$iva2 = round("$iva1",2);
$iva=number_format("$iva2",2,".","");
$total1=$subtotal + $iva;
$total2 = round("$total1",2);
$total=number_format("$total2",2,".","");
}
}
$cadena.="<tr><td> </td><td> </td><td> </td><td> </td><td> </td></tr>";
//muestro el total
$cadena.="<tr><td> </td><td> </td> <td> </td><td class=\"txt\" align=\"right\"><b>Subtotal:</b></td><td class=\"txt\" align=\"right\"> <b> $subtotal € </b></td></tr>";
//IVA
$cadena.="<tr><td> </td><td> </td><td> </td><td class=\"txt\" align=\"right\"><b>IVA (16%):</b></td><td class=\"txt\" align=\"right\"> <b> " . $iva . " € </b></td></tr>";
$cadena.="<tr><td> </td><td> </td><td> </td><td class=\"txt\" align=\"right\"><b>Total:</b></td><td class=\"txt\" align=\"right\"> <b> " . $total . " € </b></td></tr>";
$cadena.="</table>";
echo $cadena;
return $cadena;
}}
//en otro archivo llamo a la funcion imprime carrito
$_SESSION["carrito"]->imprime_carrito();
?>