Foros del Web » Programando para Internet » PHP »

condicional en esta funcion de clases

Estas en el tema de condicional en esta funcion de clases en el foro de PHP en Foros del Web. Hola amigos... Tengo el siguiente problema al intentar condicionar esta funcion.. Código PHP: function  introduce_producto ( $id_prod ,  $nombre_prod ,  $col_prod ,  $tam_prod ,  $cant_prod ...
  #1 (permalink)  
Antiguo 20/02/2007, 14:42
 
Fecha de Ingreso: enero-2007
Mensajes: 49
Antigüedad: 17 años, 3 meses
Puntos: 0
Exclamación condicional en esta funcion de clases

Hola amigos...

Tengo el siguiente problema al intentar condicionar esta funcion..

Código PHP:
function introduce_producto($id_prod$nombre_prod$col_prod$tam_prod$cant_prod$pu_prod){
        
$this->array_id_prod[$this->num_productos]!=$id_prod;
        
$this->array_nombre_prod[$this->num_productos]=$nombre_prod;
        
$this->array_col_prod[$this->num_productos]=$col_prod;
        
$this->array_tam_prod[$this->num_productos]=$tam_prod;
        
$this->array_cant_prod[$this->num_productos]=$cant_prod;
        
$this->array_pu_prod[$this->num_productos]=$pu_prod;
        
$this->array_precio_prod[$this->num_productos]= $this->array_cant_prod[$this->num_productos] * $this->array_pu_prod[$this->num_productos];
        
$this->num_productos++;
                } 
No manejo muy bien los vectores ni el POO... entonces ahi es donde esta mi dilema.. necesito poner un condicional que me diga que si el producto (id_prod) ya esta no me lo duplique si no que me actualice las cantidades y precios... esto es para un "carrito de compras"...

relativamente este es el unico detalle q me falta para que funcione completamente...

Gracias...!

PD: Edypu me estubo orientando pero realmente no logre entenderlo... de todas formas le agrezco su colaboracion...
  #2 (permalink)  
Antiguo 20/02/2007, 19:11
 
Fecha de Ingreso: enero-2007
Mensajes: 49
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: condicional en esta funcion de clases

alguien que me de una mano????????
  #3 (permalink)  
Antiguo 20/02/2007, 19:22
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Re: condicional en esta funcion de clases

1. Ok... si tienes los datos cargados e instanciados lo unico que tienes que hacer es preguntar si tu variable en la clase es igual a la variable que traes. Por ejemplo:
Código PHP:
if ($this->array_id_prod[$this->num_productos] != $id_prod
Luego llamas al procedimiento de actualizar si es false o de insertar si es true.

2. Si tus datos no estan cargados debes instanciar la clase con los datos de tu base de datos y luego hacer el paso 1...

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #4 (permalink)  
Antiguo 20/02/2007, 20:19
 
Fecha de Ingreso: enero-2007
Mensajes: 49
Antigüedad: 17 años, 3 meses
Puntos: 0
Mensaje Re: condicional en esta funcion de clases

Hola Marvin... estoy trabajando mi "carrito" sin BD... solo con variables de sesion por los momentos... mientras logro que me funcione perfectamente...

aki te dejo todo el codigo completo de la libreria para q comprendas mejor lo q tengo...

lib_carrito.php
Código PHP:
class carrito {
    
//atributos de la clase
       
var $num_productos;
       var 
$array_id_prod;
       var 
$array_nombre_prod;
    var 
$array_col_prod;
    var 
$array_tam_prod;
    var 
$array_cant_prod;
    var 
$array_pu_prod;
       var 
$array_precio_prod;

    
//constructor. Realiza las tareas de inicializar los objetos cuando se instancian
    //inicializa el numero de productos a 0
    
function carrito () {
           
$this->num_productos=0;
    }
    
    
//Introduce un producto en el carrito. Recibe los datos del producto
    //Se encarga de introducir los datos en los arrays del objeto carrito
    //luego aumenta en 1 el numero de productos
    
function introduce_producto($id_prod$nombre_prod$col_prod$tam_prod$cant_prod$pu_prod){
        
$this->array_id_prod[$this->num_productos]=$id_prod;
        
$this->array_nombre_prod[$this->num_productos]=$nombre_prod;
        
$this->array_col_prod[$this->num_productos]=$col_prod;
        
$this->array_tam_prod[$this->num_productos]=$tam_prod;
        
$this->array_cant_prod[$this->num_productos]=$cant_prod;
        
$this->array_pu_prod[$this->num_productos]=$pu_prod;
        
$this->array_precio_prod[$this->num_productos]= $this->array_cant_prod[$this->num_productos] * $this->array_pu_prod[$this->num_productos];
        
$this->num_productos++;
                }

    
//Muestra el contenido del carrito de la compra
    //ademas pone los enlaces para eliminar un producto del carrito
    
function imprime_carrito(){
        
$suma 0;
        echo 
'<table border=1 cellpadding="3">
              <tr>
                <td><b>Nombre producto</b></td>
                <td><b>Tamaño</b></td>
                <td><b>Cantidad</b></td>
                <td><b>P/U</b></td>
                <td><b>Precio</b></td>
                <td>&nbsp;</td>
              </tr>'
;
        for (
$i=0;$i<$this->num_productos;$i++){
            if(
$this->array_id_prod[$i]!=0){
                echo 
'<tr>';
                echo 
"<td>" $this->array_nombre_prod[$i] . "</td>";
                echo 
"<td>" $this->array_tam_prod[$i] . "</td>";    
                echo 
"<td>" $this->array_cant_prod[$i] . "</td>";
                echo 
"<td>" $this->array_pu_prod[$i] ." \$us</td>";    
                echo 
"<td>" $this->array_precio_prod[$i] . " \$us</td>";
                echo 
"<td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>";
                echo 
'</tr>';
                
$suma += ($this->array_precio_prod[$i]);
            }
        }
        
//muestro el total
        
echo "<tr><td colspan='4'><b>TOTAL:</b></td><td> <b>$suma</b></td><td>&nbsp;</td></tr>";
        
//total más IVA
        
echo "<tr><td colspan='4'><b>IVA (14%):</b></td><td> <b>" $suma 1.14 "</b></td><td>&nbsp;</td></tr>";
        echo 
"</table>";
    }
    
    
//elimina un producto del carrito. recibe la linea del carrito que debe eliminar
    //no lo elimina realmente, simplemente pone a cero el id, para saber que esta en estado retirado
    
function elimina_producto($linea){
        
$this->array_id_prod[$linea]=0;
    }

//inicio la sesión
session_start();
//si no esta creado el objeto carrito en la sesion, lo creo
if (!isset($_SESSION["ocarrito"])){
    
$_SESSION["ocarrito"] = new carrito();

en el archivo que llama la libreria para insertar los datos tengo lo siguiente

Código PHP:
include("lib_carrito.php");
$_SESSION["ocarrito"]->introduce_producto($_GET["id"], $_GET["nombre"], $_GET["col"], $_GET["tam"], $_GET["cant"], $_GET["precio"]); 
ya con esto podrias mostrarme bien como es lo que me dices? tengo ya casi todo listo, solo me falta esto y me queda como lo necesito ;)
  #5 (permalink)  
Antiguo 20/02/2007, 21:00
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Re: condicional en esta funcion de clases

Okales... Tonces hay que hacer otro arreglo... te muestro:

Código PHP:
<?
class carrito 
    
//atributos de la clase 
    
var $num_productos
    var 
$array_id_prod
    var 
$array_nombre_prod
    var 
$array_col_prod
    var 
$array_tam_prod
    var 
$array_cant_prod
    var 
$array_pu_prod
    var 
$array_precio_prod

    
//constructor. Realiza las tareas de inicializar los objetos cuando se instancian 
    //inicializa el numero de productos a 0 
    
function carrito () {
        
$this->num_productos=0
    } 
     
    
//Introduce un producto en el carrito. Recibe los datos del producto 
    //Se encarga de introducir los datos en los arrays del objeto carrito 
    //luego aumenta en 1 el numero de productos 
    
function introduce_producto($id_prod$nombre_prod$col_prod$tam_prod$cant_prod$pu_prod){ 
        
$this->array_id_prod[$this->num_productos]=$id_prod
        
$this->array_nombre_prod[$this->num_productos]=$nombre_prod
        
$this->array_col_prod[$this->num_productos]=$col_prod
        
$this->array_tam_prod[$this->num_productos]=$tam_prod
        
$this->array_cant_prod[$this->num_productos]=$cant_prod
        
$this->array_pu_prod[$this->num_productos]=$pu_prod;
        
$this->array_precio_prod[$this->num_productos]= $this->array_cant_prod[$this->num_productos] * $this->array_pu_prod[$this->num_productos];
        
$this->num_productos++;
    } 

    
//Chequea si los datos del producto existen  
    
function check_producto($id_prod$nombre_prod$col_prod$tam_prod$cant_prod$pu_prod){ 
        for(
$i=0;$i<$this->num_productos;$i++){
            if(
$this->array_id_prod[$i] == $id_prod){
                
$this->array_id_prod[$i]        = $id_prod
                
$this->array_nombre_prod[$i]    = $nombre_prod
                
$this->array_col_prod[$i]        = $col_prod
                
$this->array_tam_prod[$i]        = $tam_prod
                
$this->array_cant_prod[$i]        = $cant_prod
                
$this->array_pu_prod[$i]        = $pu_prod;
                
$this->array_precio_prod[$i]    = $this->array_cant_prod[$i] * $this->array_pu_prod[$i];
                return 
"actualizado";//listo
            
}else{
                return 
"no existe el producto";//no existe
            
}
        }
        return 
"no existen productos en el carrito";//por si lo necesitas saber
    
}

    
//Muestra el contenido del carrito de la compra 
    //ademas pone los enlaces para eliminar un producto del carrito 
    
function imprime_carrito(){ 
        
$suma 0
        echo 
'<table border=1 cellpadding="3"> 
              <tr> 
                <td><b>Nombre producto</b></td> 
                <td><b>Tamaño</b></td> 
                <td><b>Cantidad</b></td> 
                <td><b>P/U</b></td> 
                <td><b>Precio</b></td> 
                <td>&nbsp;</td> 
              </tr>'

        for (
$i=0;$i<$this->num_productos;$i++){ 
            if(
$this->array_id_prod[$i]!=0){ 
                echo 
'<tr>'
                echo 
"<td>" $this->array_nombre_prod[$i] . "</td>"
                echo 
"<td>" $this->array_tam_prod[$i] . "</td>";     
                echo 
"<td>" $this->array_cant_prod[$i] . "</td>"
                echo 
"<td>" $this->array_pu_prod[$i] ." \$us</td>";     
                echo 
"<td>" $this->array_precio_prod[$i] . " \$us</td>"
                echo 
"<td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>"
                echo 
'</tr>'
                
$suma += ($this->array_precio_prod[$i]); 
            } 
        } 
        
//muestro el total 
        
echo "<tr><td colspan='4'><b>TOTAL:</b></td><td> <b>$suma</b></td><td>&nbsp;</td></tr>"
        
//total más IVA 
        
echo "<tr><td colspan='4'><b>IVA (14%):</b></td><td> <b>" $suma 1.14 "</b></td><td>&nbsp;</td></tr>"
        echo 
"</table>"
    } 
     
    
//elimina un producto del carrito. recibe la linea del carrito que debe eliminar 
    //no lo elimina realmente, simplemente pone a cero el id, para saber que esta en estado retirado 
    
function elimina_producto($linea){ 
        
$this->array_id_prod[$linea]=0
    } 
}  
//inicio la sesión 
session_start(); 
//si no esta creado el objeto carrito en la sesion, lo creo 
if (!isset($_SESSION["ocarrito"])){ 
    
$_SESSION["ocarrito"] = new carrito(); 
}  
?>
Código PHP:
<?
include("lib_carrito.php"); 
$LibCarrito = new carrito();
if(
$LibCarrito->check_producto($_GET["id"], $_GET["nombre"], $_GET["col"], $_GET["tam"], $_GET["cant"], $_GET["precio"]) == "actualizado"){
    
$LibCarrito->imprime_carrito();
    
}elseif(
$LibCarrito->check_producto($_GET["id"], $_GET["nombre"], $_GET["col"], $_GET["tam"], $_GET["cant"], $_GET["precio"]) == "no existe el producto"){
    
$_SESSION["ocarrito"]->introduce_producto($_GET["id"], $_GET["nombre"], $_GET["col"], $_GET["tam"], $_GET["cant"], $_GET["precio"]);
    
$LibCarrito->imprime_carrito();
}elseif(
$LibCarrito->check_producto($_GET["id"], $_GET["nombre"], $_GET["col"], $_GET["tam"], $_GET["cant"], $_GET["precio"]) == "no existen productos en el carrito"){
    
$LibCarrito->imprime_carrito();
}
?>
Espero funcione (pk no lo probe)
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #6 (permalink)  
Antiguo 21/02/2007, 10:09
 
Fecha de Ingreso: enero-2007
Mensajes: 49
Antigüedad: 17 años, 3 meses
Puntos: 0
Exclamación Re: condicional en esta funcion de clases

Hola amigo... la verdad reemplace el codigo que tenia por el que me diste... pero no me funciona :(... te voy a pasar los otros archivos para que los pruebes bien y asi veas q paso okis ?


index.php
Código HTML:
<?
include("lib_carrito.php");
?>

<html>
<head>
	<title>Trabajando con el carrito</title>
</head>

<body>

<table width="600" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
  <form action="mete_producto.php" method="get">
 <input name="id" type="hidden" value="12">
  <input name="nombre" type="hidden" value="Silla Modelo Jupiter">
   <input name="col" type="hidden" value="Azul">
    <input name="tam" type="hidden" value="S">
	 <input name="precio" type="hidden" value="80">
  
    <th width="50%" height="25" scope="col"><div align="left"><a href="mete_producto.php?id=12&nombre=silla+modelo+jupiter&col=Azul&tam=S&cant=1&precio=80">Silla modelo jupiter 80 euros </a></div></th>
    <th width="50%" height="25" scope="col"><div align="right">Cant.
        <input name="cant" type="text" id="cant" value="1" size="3" maxlength="3">
        <input type="submit" name="Submit" value="A&ntilde;adir a Carrito">
    </div></th>
  </form></tr>
  <tr>
    <th width="50%" height="25" scope="col"><div align="left"><a href="mete_producto.php?id=16&nombre=mesa+camilla+oferta&col=Verde&tam=M&cant=2&precio=29">Mesa camilla en oferta 29 euros</a></div></th>
    <th width="50%" height="25" scope="col"><div align="right"></div></th>
  </tr>
  <tr>
    <th width="50%" height="25" scope="col"><div align="left"><a href="mete_producto.php?id=18&nombre=Silla+oficina&col=Gris&tam=XL&cant=1&precio=102">Silla oficina 102 euros</a></div></th>
    <th width="50%" height="25" scope="col"><div align="right"></div></th>
  </tr>
  <tr>
    <th width="50%" height="25" scope="col"><div align="left"><a href="mete_producto.php?id=98&nombre=Aparador+cocina+blanco&col=Marron&tam=M&cant=3&precio=200">Aparador cocina blanco 200 euros</a></div></th>
    <th width="50%" height="25" scope="col"><div align="right"></div></th>
  </tr>
  <tr>
    <th width="50%" height="25" scope="col"><div align="left">- <a href="ver_carrito.php">Ver carrito</a></div></th>
    <th width="50%" height="25" scope="col"><div align="right"></div></th>
  </tr>
</table>
</body>
</html> 
ver_carrito.php

Código HTML:
<?
include("lib_carrito.php");
?>

<html>
<head>
	<title>Introduce Producto</title>
</head>

<body>

<?
$_SESSION["ocarrito"]->imprime_carrito();
?>
<br>
<br>
<a href="index.php">Volver</a>


</body>
</html> 
mete_producto.php

Código HTML:
<?
include("lib_carrito.php");
$_SESSION["ocarrito"]->introduce_producto($_GET["id"], $_GET["nombre"], $_GET["col"], $_GET["tam"], $_GET["cant"], $_GET["precio"]);
?>

<html>
<head>
	<title>Introduce Producto</title>
</head>

<body>

Producto introducido.
<br>
<br>
<a href="index.php">- Volver</a>
<br>
<br>
<a href="ver_carrito.php">- Ver carrito</a>

</body>
</html> 
bueno espero q ahora si puedas dar con lo q te digo... recuerda que lo q basicamente necesito es q no se me dupliquen los registros si no q me actualice las cantidades y precios si ya el producto existe dentro de la SESSION...

GRACIAS
  #7 (permalink)  
Antiguo 21/02/2007, 18:21
 
Fecha de Ingreso: enero-2007
Mensajes: 49
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: condicional en esta funcion de clases

Marvin estas por ahi???

a ver quien quien me colabora amigos?
  #8 (permalink)  
Antiguo 21/02/2007, 20:54
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Re: condicional en esta funcion de clases

Sorry men... no encontraba el post entre tantos xD...

La cosa es que si no te muestra nada trata de poner en todas las paginas el comando "error_reporting(E_ALL);".

Te mostrara todos los errores, warnings y sirve para depurar las paginas.

Tambien recomiendo que lo uses para todo desarrollo... asi cuando lo pases a produccion funcione como camion.
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
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 00:19.