Foros del Web » Programando para Internet » PHP »

Probelma carrito

Estas en el tema de Probelma carrito en el foro de PHP en Foros del Web. Aupa! Este es el codigo para coger los datos de un formulario y procesarlos. Esta mas o menos explicado con los comentariospero si necesitais algo ...
  #1 (permalink)  
Antiguo 20/02/2007, 05:26
 
Fecha de Ingreso: octubre-2006
Mensajes: 204
Antigüedad: 17 años, 6 meses
Puntos: 0
Probelma carrito

Aupa!
Este es el codigo para coger los datos de un formulario y procesarlos. Esta mas o menos explicado con los comentariospero si necesitais algo estare mirando. A ver, en el formulario tengo 5 campos de texto, despues dos combos anidados con los que selecciono los cursos y los meto en una clase carrito y despues tengo un formulario con radiobuttons. Como veis para utilizar los combos llamo a esta pagina y vuelvo a la otra(Diagnostico1.php) mandandole la categoria para que ponga los cursos de esa categoria. Me da un error y creo q es por las sesiones pero no lo se bien. El error que me da es el siguiente:
Fatal error: Call to a member function on a non-object

Código PHP:
<?php
//Empezamos la sesion
session_start();
header("Cache-control:private");
$enviar=$_POST['Enviar'];
//Si no le hemos dado l boton de enviar 
if(!isset($enviar)){
    
//Si la categoria de los combos anidados cambia
    
if ($catant!=$categoria) { 
        
//Guardamos las variables en la sesion
        
$_SESSION['nombre']=$_POST['nombre'];
        
$_SESSION['apellido1']=$_POST['apellido1'];
        
$_SESSION['apellido2']=$_POST['apellido2'];
        
$_SESSION['dni']=$_POST['dni'];
        
$_SESSION['email']=$_POST['email'];
        
//Volvemos a la pagina anterior mandando la categoria
        
header("location:Diagnostico1.php?categoria=$categoria"); 
    }

//Si le hemos dado a Enviar
else{
    
//Cogemos el DNI y comprobamos si esta en la base de datos
    
$dni=$_POST['dni'];
    
$link mysql_connect("localhost","desarrollo","desarrollo");
    
mysql_select_db("COIIE-DESA",$link);
    
mysql_query("SELECT * FROM t_coi_colegiados WHERE DNI=".$dni,$link);
    
$num=mysql_affected_rows($link);
    
//Si no esta
    
if($num==0){
        
//Guardamos en variables de sesion todo lo seleccionado
        
$_SESSION['duracion']=$_POST['duracion'];
        
$_SESSION['tiempo']=$_POST['tiempo'];
        
$_SESSION['metodo']=$_POST['metodo'];
        
$_SESSION['causas']=$_POST['causas'];
        
$_SESSION['situacion']=$_POST['situacion'];
        
$_SESSION['cuenta']=$_POST['cuenta'];
        
$_SESSION['empresa']=$_POST['empresa'];
        
$_SESSION['sector']=$_POST['sector'];
        
$_SESSION['inversion']=$_POST['inversion'];
        
$_SESSION['subvencion']=$_POST['subvencion'];
        
//Volvemos enviando el error de DNI incorrecto
        
header("Location: Diagnostico1.php?error1=error1");
    }
    
//Cogemos la fila del colegiado con sus datos
    
$resul=mysql_query("SELECT * FROM t_coi_colegiados WHERE DNI=".$dni,                $link);
    
$fila=mysql_fetch_array($resul);
    
$numcol=$fila['NCOLEGIADO'];
    
//Guardamos los valores de la encuesta en un array llamado encuesta
    
$encuesta[0]=$_POST['duracion'];
    
$encuesta[1]=$_POST['tiempo'];
    
$encuesta[2]=$_POST['metodo'];
    
$encuesta[3]=$_POST['causas'];
    
$encuesta[4]=$_POST['situacion'];
    
$encuesta[5]=$_POST['cuenta'];
    
$encuesta[6]=$_POST['empresa'];
    
$encuesta[7]=$_POST['sector'];
    
$encuesta[8]=$_POST['inversion'];
    
$encuesta[9]=$_POST['subvencion'];
    
$resul=mysql_query("SELECT * FROM tblenc",$link);
    
$i=0;
    
//Mientras no se acabe la tabla tblenc
    
while($res=mysql_fetch_array($resul)){
        
//Incrementamos el valor del total
        
$total=$res['total']+1;
        
//Miramos que respuesta hemos elegido y la incrementamos
        
if($encuesta[$i]=$res['respuesta1']){
            
$valor=$res['valor1']+1;
            
mysql_query("UPDATE tblenc SET `valor1`='$valor',`total`='$total'",$link);
        }
        elseif(
$encuesta[$i]=$res['respuesta2']){
            
$valor=$res['valor2']+1;
            
mysql_query("UPDATE tblenc SET `valor2`='$valor',`total`='$total'",$link);
        }
        elseif(
$encuesta[$i]=$res['respuesta3']){
            
$valor=$res['valor3']+1;
            
mysql_query("UPDATE tblenc SET `valor3`='$valor',`total`='$total'",$link);
        }
        elseif(
$encuesta[$i]=$res['respuesta4']){
            
$valor=$res['valor4']+1;
            
mysql_query("UPDATE tblenc SET `valor4`='$valor',`total`='$total'",$link);
        }
        
$i++;
    }
    
//Cogemos als observaciones y las metemos en la base de datos
    
$observaciones=$_POST['observaciones'];
    if(!empty(
$observaciones)){
        
mysql_query("INSERT INTO Observaciones(Observacion,NCOLEGIADO) VALUES ('$observaciones','$numcol')",$link);
    }
    
$carrito=$_POST['carrito'];
[
COLOR="Red"]//esta es la linea que da error
    
$total $carrito->saca_total();[/COLOR]?>
    <a href="ver_carrito.php"><font size="2" face="Arial, Helvetica, sans-serif">Ver cursos seleccionados</font></a>
<?

?>
  #2 (permalink)  
Antiguo 20/02/2007, 05:36
 
Fecha de Ingreso: octubre-2006
Mensajes: 204
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: Probelma carrito

La clase carrito es esta y se pasa tambien por sesiones:

Código PHP:
<?
class carrito {
    
//atributos de la clase
       
var $num_productos;
       var 
$array_id_prod;
       var 
$array_nombre_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,$precio_prod){
        
$this->array_id_prod[$this->num_productos]=$id_prod;
        
$this->array_nombre_prod[$this->num_productos]=$nombre_prod;
        
$this->array_precio_prod[$this->num_productos]=$precio_prod;
        
$this->num_productos++;
    }

    
//Muestra el contenido del carrito de la compra
    //ademas pone los enlaces para eliminar un producto del carrito
    
function imprime_carrito(){
        echo 
'<BODY bgcolor="#9ab9bb" leftMargin=0 topMargin=0 MARGINWIDTH="0" MARGINHEIGHT="0">';
        
$suma 0;
        echo 
'<table border=1 cellpadding="3">
              <tr bgcolor="#0b6d8a">
                  <td colspan="3" height="46" bgcolor="#0b6d8a"><div align="center"><strong><font color="#FFFFFF" face="Arial, Helvetica, sans-serif">SUS CURSOS SELECIONADOS SON:</font></strong></div></td>    
              <tr>
                <td><b><font size="3" face="Arial, Helvetica, sans-serif"><div align="center">Nombre producto</div></font></b></td>
                <td><b><font size="3" face="Arial, Helvetica, sans-serif">Precio</font></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_precio_prod[$i] . "</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><b><font size='2' face='Arial, Helvetica, sans-serif'>TOTAL:</font></b></td><td> <b>$suma</b></td><td>&nbsp;</td></tr>";
        
//total más IVA
        
echo '<tr><td><b><font size="2" face="Arial, Helvetica, sans-serif">IVA (16%):</font></b></td><td> <b>' $suma 1.16 '</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;
    }
    
    function 
saca_nombres(){
        return 
$this->array_nombre_prod;
    }
    
    function 
saca_total(){
        return 
$this->num_productos;
    }

//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();
}
?>
  #3 (permalink)  
Antiguo 20/02/2007, 05:37
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Re: Probelma carrito

Da la sensación que la variable $carrito no está definida.
  #4 (permalink)  
Antiguo 20/02/2007, 06:15
 
Fecha de Ingreso: octubre-2006
Mensajes: 204
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: Probelma carrito

En Diagnostico1.php tengo la variable $_SESSION["ocarrito"] que la guardo en carrito y la apso por un campo oculto aunq no se si hara falta pero bueno.
  #5 (permalink)  
Antiguo 20/02/2007, 06:17
 
Fecha de Ingreso: octubre-2006
Mensajes: 204
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: Probelma carrito

Pero aun asi se supone que si yo donde falla pongo:
$total = $_SESSION['carrito']->saca_total();
Deberia de funcionar un no funciona sigue dando un error que pone algod e unknown
  #6 (permalink)  
Antiguo 21/02/2007, 03:30
 
Fecha de Ingreso: octubre-2006
Mensajes: 204
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: Probelma carrito

Alguien sabe que puee pasar?
  #7 (permalink)  
Antiguo 21/02/2007, 07:18
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Re: Probelma carrito

Estás incluyendo la definición de la clase en todos los archivos?
  #8 (permalink)  
Antiguo 22/02/2007, 04:04
 
Fecha de Ingreso: octubre-2006
Mensajes: 204
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: Probelma carrito

Pues no, solo en Diagnostico2.php que es el primer script que os he puesto
ahora miro si es por eso.
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 15:13.