www.webdeveloper.com
Results 1 to 3 of 3

Thread: Ajax Cart working on one server and not on another

Hybrid View

  1. #1
    Join Date
    Aug 2006
    Posts
    52

    Ajax Cart working on one server and not on another

    Dear Friends,

    I need your help.

    I have an ajax+php cart that is working fine on one server and not on another to were I want to migrate the account.

    We have the same php version, and the same php.ini file.

    When we click the button add to cart, we get the error:

    PHP Fatal error: Cannot use object of type carrito as array in /home/user/public_html/lib/class/carrito.class.php on line 186

    Here you have the code:
    <?php
    class carrito extends b {
    public $db = null;
    private $limite_prods = 10; // máximo número de unidades que se pueden añadir al carrito
    public $exito = '';
    public $gotourl = '';
    public $alert = false;
    public function __contruct()
    {
    $this->db = new db(_db_on);
    }
    public function add($id,$cantidad,$params='')
    {
    $result = false;
    $this->errors = '';

    // comprobar que no se exceda la cantidad maxima
    if ($cantidad > $this->limite_prods or $cantidad < 1){
    $this->errors = 'No puedes añadir más de '.$this->limite_prods.'uds del mismo artículo.
    Por favor, ponte en contacto con nosotros. <a href="/contacto">Ir a Contacto</a>';
    return false;
    }
    $p = $params;
    $params = explode('|',$params);
    if (count($params)!=2) {
    //$this->errors = 'No ha indicado una talla y color válidos. '.$p;
    $this->errors = 'No ha indicado una talla válida. '.$p;
    return false;
    }
    if (!is_numeric($params[0])/* or !is_numeric($params[1])*/){
    //$this->errors = 'La talla o el color seleccionado no parecen válidos. Por favor, revise el articulo y añadalo nuevamente.';
    $this->errors = 'La talla seleccionada no parece válida. Por favor, revise el artículo y añádalo nuevamente.';
    return false;
    }

    if (!is_numeric($id) and is_numeric(!$cantidad)) {
    $this->errors = 'El articulo o la cantidad que desea añadir a la cesta no son válidos. '.$id.' '.$cantidad;
    return false;
    }
    // comprobar si el articulo existe en la cesta
    $update = false;
    $index = null;
    foreach($_SESSION['carrito'] as $k => $v)
    {
    if (is_numeric($k))
    {
    if (($_SESSION['carrito'][$k]['id'] == $id)
    and ($_SESSION['carrito'][$k]['talla']['id'] == $params[0])
    /*and ($_SESSION['carrito'][$k]['color']['id'] == $params[1])*/)
    {
    $update = true;
    $index = $k;
    }
    }
    }

    if ($update == true) // existe ya en la cesta?
    {
    // el articulo ya está en la cesta
    $this->update($index,$cantidad,'plus');
    }else
    {

    // colores
    //$colores_sql = mysql_query("SELECT * FROM colores WHERE color_id='{$params[1]}'");
    $colores_sql = mysql_query("SELECT * FROM colores WHERE articulo_id='$id'");
    if (mysql_num_rows($colores_sql))
    {
    $colores_sql_ok = mysql_fetch_assoc($colores_sql);
    if ($colores_sql_ok['color_estado'] == 0)
    {
    $this->errors = 'Ups, lo sentimos, este color no está disponible en este momento.';
    return false;
    }else
    {

    // comprobar talla
    //$sql_t = mysql_query("SELECT * FROM tallas WHERE talla_id='$params[0]' and color_id='{$params[1]}'");
    $color_id = $colores_sql_ok['color_id'];
    $sql_t = mysql_query("SELECT * FROM tallas WHERE talla_id='$params[0]' and color_id='$color_id'");
    if (mysql_num_rows($sql_t))
    {
    $sql_t_ok = mysql_fetch_assoc($sql_t);
    $talla['id'] = $sql_t_ok['talla_id'];
    $talla['titulo'] = $sql_t_ok['talla_titulo'];
    if ($sql_t_ok['talla_stock'] < 1)
    {
    $this->errors = 'Ups, lo sentimos, la talla que has seleccionado no se encuentra en stock.';
    return false;
    }else
    {
    if ($sql_t_ok['talla_stock'] < $cantidad)
    {
    $_SESSION['compra']['exito'] = false;
    $this->exito = 'La cantidad deseada del articulo se ha ajustado a la cantidad disponible.';
    $this->alert = true;
    $cantidad = $sql_t_ok['talla_stock'];
    }
    }

    }else
    {
    $this->errors = 'Ups, lo sentimos, no hemos podido encontrar la talla que ha seleccionado.';
    return false;
    }


    $color['id'] = $colores_sql_ok['color_id'];
    $color['titulo'] = $colores_sql_ok['color_nombre'];

    }
    }else
    {
    $this->errors = 'El color que ha seleccionado no se encuentra disponible.';
    return false;
    }

    // obtener los datos del articulo
    $sql = mysql_query("
    SELECT
    articulos.articuloid,
    articulos.articulo_titulo,
    articulos.articulo_descuento,
    articulos.articulo_precio,
    articulos.articulo_precio_oferta,
    articulos.articulo_imagen,
    articulos.articulo_url,
    articulos.articulo_estado,
    categorias.categoria_url
    FROM
    articulos, categorias
    WHERE
    articulos.articuloid='$id' and
    articulos.categoriaid=categorias.categoriaid"
    ,$this->con);
    if (mysql_num_rows($sql))
    {
    $art = mysql_fetch_assoc($sql);
    if ($art['articulo_estado'] == 1)
    {

    // obtener ultimo indice del array carrito
    $i = 0;
    if (count($_SESSION['carrito']))
    {
    foreach($_SESSION['carrito'] as $k => $v)
    {
    if (is_numeric($k))
    {
    $i = $k + 1;
    }
    }

    if ($i == 0) $i = 1;

    }else
    {
    $i = count($_SESSION['carrito']);
    }

    // imagen para mostrar en el carrito
    if ($colores_sql_ok['color_imagen'])
    {
    $imagen = 'colores/'.$colores_sql_ok['color_imagen'];
    }else
    {
    $imagen = $art['articulo_imagen'];
    }

    if ($art['articulo_precio_oferta'] > 0 and $art['articulo_precio_oferta'] != $art['articulo_precio'])
    {
    $precio = $art['articulo_precio_oferta'];
    }else
    {
    $precio = $art['articulo_precio'];
    }

  2. #2
    Join Date
    Aug 2006
    Posts
    52
    // finalmente, despues de todo, añadimos el articulo
    $_SESSION['carrito'][$i]['id'] = $art['articuloid'];
    $_SESSION['carrito'][$i]['titulo'] = $art['articulo_titulo'];
    $_SESSION['carrito'][$i]['dto'] = $art['articulo_descuento'];
    $_SESSION['carrito'][$i]['precio'] = $precio;
    $_SESSION['carrito'][$i]['imagen'] = $imagen;
    $_SESSION['carrito'][$i]['url'] = $art['categoria_url'].'/'.$art['articulo_url'];
    $_SESSION['carrito'][$i]['cantidad'] = $cantidad;
    $_SESSION['carrito'][$i]['talla']['id'] = $talla['id'];
    $_SESSION['carrito'][$i]['talla']['titulo'] = $talla['titulo'];
    $_SESSION['carrito'][$i]['color']['id'] = $color['id'];
    $_SESSION['carrito'][$i]['color']['titulo'] = $color['titulo'];
    if ($_SESSION['user']['dto'] > $art['articulo_descuento'])
    {
    $art['articulo_descuento'] = $_SESSION['user']['dto'];
    $_SESSION['carrito'][$i]['dto'] = $art['articulo_descuento'];
    }
    // total?
    $precio = $this->aplicar_dto($precio,$art['articulo_descuento']);
    $total = $precio[1] * $cantidad;
    $_SESSION['carrito'][$i]['total'] = $total;
    $_SESSION['carrito'][$i]['ahorro'] = $precio[2];
    $result = true;
    $_SESSION['compra']['exito'] = false;
    }else
    {
    // el articulo no está activo
    $this->errors[] = 'Lo sentimos, este artículo no está disponible';
    }
    }else
    {
    $this->errors[] = 'Ups! parece que no hemos encontrado el artículo que buscas...';
    }
    if ($sql) mysql_free_result($sql);
    }
    return $result;
    }
    public function del($index)
    {
    $result = false;
    foreach($_SESSION['carrito'] as $k => $v)
    {
    if ($k == $index)
    {
    $_SESSION['compra']['exito'] = false;
    unset($_SESSION['carrito'][$k]);
    $result = true;
    }
    }
    return $result;

    }
    public function update($id,$cantidad,$params='')
    {
    $result = false;

    if (is_array($params))
    {
    foreach($params as $k=>$v)
    {
    $update_this = true;

    if ($k != 'multiupdate' and is_numeric($v))
    {
    $index = str_replace('sel_cnt_','',$k);
    if (isset($_SESSION['carrito'][$index]))
    {
    if ($_SESSION['carrito'][$index]['talla']['id'] != 0)
    {
    $sql = mysql_query("SELECT talla_stock FROM tallas
    WHERE color_id='{$_SESSION['carrito'][$index]['color']['id']}'
    and talla_id='{$_SESSION['carrito'][$index]['talla']['id']}'");

    $sql_ok = mysql_fetch_assoc($sql);

    if ($v > $sql_ok['talla_stock'])
    {
    $_SESSION['global_error'] = 'Se han ajustado las cantidades de algunos artículos
    al no estar disponibles en Stock. Por favor, revisa tu pedido para verificar las cantidades';
    $update_this = false;
    }

    if ($sql) mysql_free_result($sql);
    }
    }
    }

    if ($update_this)
    {
    $_SESSION['compra']['exito'] = false;
    $_SESSION['carrito'][$index]['cantidad'] = $v;
    $this->update($index,$v);
    $result = true;
    }else
    {
    $result = false;
    }

    }

    }else
    {
    if (is_numeric($id) and is_numeric($cantidad))
    {
    if (isset($_SESSION['carrito'][$id]))
    {

    if ($params == 'plus')
    $new_total = $_SESSION['carrito'][$id]['cantidad'] + $cantidad;
    else
    $new_total = $cantidad;

    $new_total = $_SESSION['carrito'][$id]['cantidad'] + $cantidad;
    $sql = mysql_query("SELECT talla_stock FROM tallas
    WHERE color_id='{$_SESSION['carrito'][$id]['color']['id']}'
    and talla_id='{$_SESSION['carrito'][$id]['talla']['id']}'");


    $sql_ok = mysql_fetch_assoc($sql);

    if ($sql_ok['talla_stock'] < $new_total)
    {
    $this->errors = 'Lo sentimos, en estos momentos no se pueden agregar más de '.$sql_ok['talla_stock'].'ud/s en este artículo';
    return false;

    }else
    {
    $dto = $_SESSION['carrito'][$id]['dto'];
    $precio = $_SESSION['carrito'][$id]['precio'];

    $art_precio = $this->aplicar_dto($precio,$dto);

    $_SESSION['carrito'][$id]['total'] = $art_precio[1] * $_SESSION['carrito'][$id]['cantidad'];
    $_SESSION['carrito'][$id]['ahorro'] = $art_precio[2];

    $_SESSION['compra']['exito'] = false;

    $result = true;
    }

    }else
    {
    $_SESSION['global_error'] = 'EL articulo no se encuentra en tu cesta';
    $result = false;
    }

    }else
    {
    $_SESSION['global_error'] = 'Parece que el articulo seleccionado o la nueva cantidad no son validos '.$id .' '. $cantidad;
    $result = false;
    }
    }
    return $result;
    }
    public function save()
    {

    }
    public function open($id=0)
    {
    }
    /**
    * carrito::get_table()
    * Devuelve un codigo HTML con el desglose completo de la cesta de la compra
    *
    * @return
    */
    public function get_table($args=array())
    {
    $total_arts = 0; // total de articulos)
    if (!count($args))
    {
    $args['imagen']['attr'] = '';
    $args['imagen']['visible'] = true;
    $args['eliminar']['attr'] = ' class="right"';
    $args['eliminar']['visible'] = true;
    $args['titulo']['attr'] = '';
    $args['titulo']['visible'] = true;
    $args['cantidad']['attr'] = ' class="right"';
    $args['cantidad']['visible'] = true;
    $args['cantidad']['select'] = true;
    $args['precio']['attr'] = ' class="right"';
    $args['precio']['visible'] = true;
    $args['dto']['attr'] = ' class="right"';
    $args['dto']['visible'] = true;
    $args['total']['attr'] = ' class="right"';
    $args['total']['visible'] = true;
    }

    if (count($_SESSION['carrito']))
    {
    $subtotal = 0;
    $total = 0; // $subtotal + gastos envio

    $table = '
    <table class="cesta_table">
    <tr class="cesta_table_h">
    ';

    if ($args['imagen']['visible']) $table .= '<td'.$args['imagen']['attr'].'>Imagen</td>';
    if ($args['titulo']['visible']) $table .= '<td'.$args['titulo']['attr'].'>Artículo</td>';
    if ($args['cantidad']['visible']) $table .= '<td'.$args['cantidad']['attr'].'>Cantidad</td>';
    if ($args['precio']['visible']) $table .= '<td'.$args['precio']['attr'].'>Precio</td>';
    if ($args['dto']['visible']) $table .= '<td'.$args['dto']['attr'].'>Dto</td>';
    if ($args['total']['visible']) $table .= '<td'.$args['total']['attr'].'>Total</td>';
    if ($args['eliminar']['visible']) $table .= '<td'.$args['eliminar']['attr'].'>Eliminar</td>';

    $table .= '
    </tr>';

    $zebra = 0;

  3. #3
    Join Date
    Aug 2006
    Posts
    52
    foreach($_SESSION['carrito'] as $key=>$value)
    {
    if (is_numeric($key))
    {
    $total_arts++;
    $dto_color = '';
    if ($_SESSION['carrito'][$key]['dto'] > 0)
    {
    $dto_color = ' red';
    }

    if ($zebra == 1) {
    $zebra_style = ' class="zebra_td"';
    $zebra = 0;
    }else
    {
    $zebra_style = '';
    $zebra = 1;
    }

    // select cantidad
    if ($args['cantidad']['select'] == true)
    {
    $sel_cnt = '<select name="sel_cnt_'.$key.'">';
    for ($i=1; $i<=10; $i++)
    {
    if ($i == $_SESSION['carrito'][$key]['cantidad'])
    {
    $sel_cnt .= '<option selected="selected">'.$i.'</option>';
    }else
    {
    $sel_cnt .= '<option>'.$i.'</option>';
    }

    }
    $sel_cnt .= '</select>';
    }else
    {
    $sel_cnt = $_SESSION['carrito'][$key]['cantidad'];
    }


    $table .= '
    <tr'.$zebra_style.'>
    ';

    // comprobar colores y tallas
    $extra_art = ''; // contiene un string del tipo: Talla 36, Color Negro
    if ($_SESSION['carrito'][$key]['talla']['id'] && $_SESSION['carrito'][$key]['talla']['titulo'] > 0)
    $extra_art = 'Talla '.$_SESSION['carrito'][$key]['talla']['titulo'];
    if ($_SESSION['carrito'][$key]['color']['id'])
    {
    // si hay talla, añadimos un separador
    if ($extra_art) $extra_art .= ' | ';
    $extra_art .= 'Color '.$_SESSION['carrito'][$key]['color']['titulo'];
    }
    if ($extra_art) $extra_art = '<span class="smaller">'.$extra_art.'</span>';

    if ($args['imagen']['visible']) $table .= '
    <td'.$args['imagen']['attr'].'>
    <a href="http://solocomodos.com/img/tienda/'.$_SESSION['carrito'][$key]['imagen'].'" rel="prettyPhoto">
    <img src="/lib/phpthumb/phpThumb.php?src=/img/tienda/'.$_SESSION['carrito'][$key]['imagen'].'&amp;w=50&amp;h=35&amp;zc=B&amp;q=80" alt="" />
    </a>
    </td>
    ';
    if ($args['titulo']['visible'])
    $table .= '<td'.$args['titulo']['attr'].'><a href="http://solocomodos.com/tienda/'.$_SESSION['carrito'][$key]['url'].'">'.$_SESSION['carrito'][$key]['titulo'].'</a>
    <br />'.$extra_art.'</td>';
    if ($args['cantidad']['visible'])
    $table .= '<td'.$args['cantidad']['attr'].'>'.$sel_cnt.'</td>';
    if ($args['precio']['visible'])
    $table .= '<td'.$args['precio']['attr'].'>'.money_format('%.2n',$_SESSION['carrito'][$key]['precio']).'&euro;</td>';
    if ($args['dto']['visible'])
    $table .= '<td'.$args['dto']['attr'].$dto_color.'>'.$_SESSION['carrito'][$key]['dto'].'%</td>';
    if ($args['total']['visible'])
    $table .= '<td'.$args['total']['attr'].'>'.money_format('%.2n',$_SESSION['carrito'][$key]['total']).'&euro;</td>';
    if ($args['eliminar']['visible'])
    $table .= '<td'.$args['eliminar']['attr'].'><a href="/ajax/carrito.php?action=del&amp;id='.$key.'&amp;return=/cesta" class="btnEliminar no-padding" title="Eliminar Producto" rel="'.$key.'">Eliminar</a></td>';

    $table .= '
    </tr>';

    $subtotal += $_SESSION['carrito'][$key]['total'];

    }
    }

    if ($total_arts > 0)
    {
    // comprobar gastos de envio
    $total = $subtotal;
    $gastos_envio = _gastos_envio;
    if ($subtotal < _gastos_envio_min)
    {
    $total = $subtotal + $gastos_envio;
    }else
    {
    $gastos_envio = 0;
    }

    $_SESSION['carrito']['subtotal'] = money_format('%.2n',$subtotal).'';
    $_SESSION['carrito']['total'] = money_format('%.2n',$total).'';
    $_SESSION['carrito']['gastos_envio'] = money_format('%.2n',$gastos_envio).'';

    $table .= '</table>';

    return $table;
    }
    }

    return false;

    }


    /**
    * carrito::get_carrito_box()
    * Devuelve un codigo HTML con el listado reducido de la cesta
    * Utilziado en la caja "Cesta de la Compra" que aparece en el lateral de la pagina.
    *
    * Devuelve false si el carrito no tiene articulos
    *
    * @return mixed
    */
    public function get_carrito_box()
    {
    $num_arts = 0;

    if (count($_SESSION['carrito']))
    {
    $table = '<table class="smaller">';
    foreach($_SESSION['carrito'] as $key=>$value){
    if (is_numeric($key))
    {
    $num_arts++;
    $params = '';
    if ($_SESSION['carrito'][$key]['talla']['id'] > 0 && $_SESSION['carrito'][$key]['talla']['titulo'] > 0)
    $params .= 'Talla: '.$_SESSION['carrito'][$key]['talla']['titulo'];

    if ($_SESSION['carrito'][$key]['color']['id'] > 0)
    {
    if ($params) $params .= ' - ';
    $params .= 'Color: '.$_SESSION['carrito'][$key]['color']['titulo'];
    }

    if ($params)
    $params = '<span class="cesta_params">'.$params.'</span>';
    $table .= '
    <tr>
    <td>'.$_SESSION['carrito'][$key]['cantidad'].'x</td>
    <td><a href="/tienda/'.$_SESSION['carrito'][$key]['url'].'">'.$_SESSION['carrito'][$key]['titulo'].'</a>'.$params.'</td>
    <td>'.money_format('%.2n',$_SESSION['carrito'][$key]['total']).'&euro;</td>
    <td class="right"><a href="/ajax/carrito.php?action=del&amp;id='.$key.'&amp;return=none" class="btnEliminar no-padding" title="Eliminar Producto" rel="'.$key.'" rev="none">Eliminar</a></td>
    </tr>';
    }
    }
    $table .= '</table>';

    return $table;

    }

    if ($num_arts == 0)
    {
    return '<p>Su cesta de la compra está vacía</p>';
    }

    return false;

    }

    public function count_arts()
    {
    $total_arts = 0;
    if (count($_SESSION['carrito'])) {
    foreach($_SESSION['carrito'] as $k => $v)
    if (is_numeric($k))
    $total_arts++;
    }

    return $total_arts;
    }

    }

    ?>


    Any idea of what could be blocking this on one server and not on another???

    Thanks,
    D. Duarte

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles