Foros del Web » Programando para Internet » PHP » CodeIgniter »

Actualizar Carro en Codeigniter

Estas en el tema de Actualizar Carro en Codeigniter en el foro de CodeIgniter en Foros del Web. Muy buenas a tod@s! Os pongo está consulta para ver si me podéis echar una mano. Soy nuevo en codeigniter. Hace muy poco que lo ...
  #1 (permalink)  
Antiguo 17/06/2012, 16:57
 
Fecha de Ingreso: noviembre-2010
Ubicación: Castellón
Mensajes: 13
Antigüedad: 14 años
Puntos: 0
Actualizar Carro en Codeigniter

Muy buenas a tod@s!
Os pongo está consulta para ver si me podéis echar una mano.

Soy nuevo en codeigniter. Hace muy poco que lo estoy usando y me he planteado un proyecto que incluye un carrito de compra. Pero estoy teniendo un problema.

Por ahora tengo dos productos para hacer pruebas.

Cuando los introduzco no hay ningún problema. Y si los actualizo no lo hay tampoco... la primera vez. Es decir, puedo poner un producto o los dos. Pero después de que haga una actualización, me si quiero volver a actualizar me falla.

La cantidad de advertencias que me da el navegador, es mayor cuanto más alta es la cantidad que quiero incrementar el producto.



Mis códigos son los siguientes:

modelo de la cesta o el carro (carro.php):
Código PHP:
<?php
    
Class Carro_model extends CI_Model
    
{
        public function 
agregar_al_carro($id)
        {    
            
$pagina 'carro';
            
            
$this->load->model('usuarios_model');
            
$this->load->model('productos_model');

            
$producto = array(
                            
'id'      => $this->input->post('id'),
                            
'qty'     => 1,
                            
'price'   => $this->input->post('precio'),
                            
'name'    => $this->input->post('nombre'),
                            
'options' => array('description' => $this->input->post('nombre'))
                        );
            
            
$data['carro'] = $this->cart->insert($producto);    
        }
        
        public function 
vaciar_carro()
        {
            
$this->cart->destroy();
        }
        
        public function 
actualizar_carro()
        {
            
// Obtenemos el número total de items en el carro  
            
$total $this->cart->total_items();  
          
            
// Seleccionamos la información que necesitamos  
            
$item $this->input->post('rowid');  
            
$qty $this->input->post('qty');  
          
            
// Hacemos un loop para acutalizarla  
            
for($i 0$i $total$i++)
            {  
                
// Creamos un array de productos con sus rowid y cantidades.  
                
$data = array(   
                      
'rowid' => $item[$i],
                      
'qty' => $qty[$i]
                   );  
          
                
// Actualizamos el carro con la nueva información.  
                
$this->cart->update($data);  
            }
        }
    }
Controlador del carro (carro.php)
Código PHP:
<?php 
    
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    
session_start(); //we need to call PHP's session object to access it through CI

    
class Carro extends CI_Controller
    
{

          function 
__construct()
          {
            
parent::__construct();
          }

          function 
index()
          {    
            
$pagina 'carro';
            
            
$this->load->model('usuarios_model');
            
$this->load->model('productos_model');
            
$this->load->model('carro_model');
            
            
$session_data $this->session->userdata('logged_in');
            
            
$data['productos'] = $this->productos_model->obtener_productos();
            
$data['username'] = $session_data['username'];
        
            if ( ! 
file_exists('application/views/publico/' $pagina '.php'))
             {
                   
// Oh-oh... no tenemos una pagina para esto!
                   
show_404();
             }

            
// Capitaliza la primera letra
             
$data['titulo'] = ucfirst($pagina);
         
            
$this->load->view('plantillas/publico_cabecera'$data);
             
$this->load->view('publico/' $pagina$data);            
        }
        
        public function 
agregar_al_carro($id)
        {    
            
$pagina 'carro';
            
            
$this->load->model('usuarios_model');
            
$this->load->model('productos_model');
            
$this->load->model('carro_model');

            
$this->carro_model->agregar_al_carro($id);     
            
            
redirect('carro''refresh');
        }
        
        public function 
vaciar_carro()
        {
            
$this->load->model('carro_model');

            
$this->carro_model->vaciar_carro();
            
            
redirect('inicio''refresh');
        }
        
        public function 
actualizar_carro()
        {
            
$this->load->model('usuarios_model');
            
$this->load->model('productos_model');
            
$this->load->model('carro_model');
            
            
$this->carro_model->actualizar_carro();
            
            
// Volvemos al carro
            
redirect('carro''refresh');
        }
    }
Vista (carro.php):
Código PHP:
<?php if(!$this->cart->contents()):
    echo 
'Todavía no has añadido ningún producto.';
else:
?>

<?php echo form_open('carro/actualizar_carro'); ?>
<table width="100%" cellpadding="0" cellspacing="0">
    <thead>
        <tr>
            <td>Cantidad</td>
            <td>Descripción</td>
            <td>Precio</td>
            <td>Sub-Total</td>
        </tr>
    </thead>
    <tbody>
        <?php $i 1?>
        <?php foreach($this->cart->contents() as $items): ?>
        
        <?php echo form_hidden('rowid[]'$items['rowid']); ?>
        <tr <?php if($i&1){ echo 'class="alt"'; }?>>
              <td>
                  <?php echo form_input(array('name' => 'qty[]''value' => $items['qty'], 'maxlength' => '3''size' => '5')); ?>
              </td>
              
              <td><?php echo $items['name']; ?></td>
              
              <td>&euro;<?php echo $this->cart->format_number($items['price']); ?></td>
              <td>&euro;<?php echo $this->cart->format_number($items['subtotal']); ?></td>
          </tr>
          
          <?php $i++; ?>
        <?php endforeach; ?>
        
        <tr>
            <td</td>
              <td></td>
              <td><strong>Total</strong></td>
              <td>&euro;<?php echo $this->cart->format_number($this->cart->total()); ?></td>
        </tr>
    </tbody>
</table>

<p><?php echo form_submit('''Actuarlizar Carro'); echo anchor('carro/vaciar_carro''Vaciar Carro''class="empty"');?></p>
<p><small>Si la cantidad introducida en un producto es 0, el item será borrado.</small></p>
<?php 
echo form_close(); 
endif;
?>
Bueno, creo que esa es toda la información que puedo daros.
Si os hiciese falta alguna cosa más, pedídmelo. Vale??

Muchas gracias!

Un saludo,

SeiyaJapon.
  #2 (permalink)  
Antiguo 13/08/2012, 14:14
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 9 meses
Puntos: 177
Respuesta: Actualizar Carro en Codeigniter

pareceria que no se está recibiendo bien esto:

$item = $this->input->post('rowid');
$qty = $this->input->post('qty');
__________________
la la la
  #3 (permalink)  
Antiguo 13/08/2012, 16:11
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años, 6 meses
Puntos: 34
Respuesta: Actualizar Carro en Codeigniter

tambien soy nuevo en codeigniter, pero me supongo que el error es:

Código PHP:
Ver original
  1. $item = $this->input->post('rowid');
  2.             $qty = $this->input->post('qty');
vienen por post, al actualizar dejan de existir, y por eso te da el error que estas fuera de los datos que contiene porque no contienen nada

Etiquetas: cesta, php, carrito
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:10.