Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Recibir y grabar una matriz

Estas en el tema de Recibir y grabar una matriz en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola Muy buenas a todos. Bueno, estoy en un lio para grabar un matriz en una tabla, les explico mejor : Tengo 3 tablas Tabla1 ...
  #1 (permalink)  
Antiguo 26/03/2007, 16:47
Avatar de JuanKa  
Fecha de Ingreso: septiembre-2004
Mensajes: 468
Antigüedad: 19 años, 7 meses
Puntos: 1
Recibir y grabar una matriz

Hola Muy buenas a todos.

Bueno, estoy en un lio para grabar un matriz en una tabla, les explico mejor :

Tengo 3 tablas

Tabla1
Nivel (id_niv, nombre, ......)

Tabla2
Actividad (id_act, modulo...) (Des esta tabla solo hago la consulta para tener la relacion de actividades ---> TODO BIEN CON ESTA TABLA)

Tabla3
Nivel_Actividad (id_niv, id_act) --->(Aca es el problema con la segunda variable id_act)

Tengo un formulario donde coloco los datos del Nivel como por ejemplo :
Nombre, Descripcion, etc y mas abajo hago una consulta a una tabla mediante una funcion que esta en una clase y me arroja todas las actividades que puede hacer el usuario y cada uno con su respectivo check box. es decir :
<input type="checkbox" name="chk_col[]" value="<?=$acc_act->getId()?>">

Hasta aqui todo Bien.

Incluso cuando le digo grabar solo me graba en la Tabla Nivel y la tabla Nivel_Actividad no me lo graba (Claro por que tengo el problema que no recibo la matriz chk_col[]).

Al parecer, creo que estoy recibiendo mal la matriz de chk_col[] en la clase de Nivel_Actividad

de la funcion guardar lo llamo de la siguiente manera

Código PHP:
function alta_guardar(){
    
    
$activ=getParametro("chk_col");

    try{
        
$niv_acc=new Nivel($nombre$descripcion);
        
$niv_acc->guardar(); // con esto guardo en la tabla Nivel y no tengo problemas
        
        
$acc_act= new Nivel_Actividad($niv_acc->getId(), $activ);
        
$acc_act->guardar();
            
        } 

Como puede enviar el parametro $activ como Array a la clase Nivel_Actividad
la Clase es:

Código PHP:
class Nivel_Actividad {

  protected 
$Id_niv// este parametro lo recibo bien
  
protected $Id_act// ESTE PARAMETRO ES EL QUE NO LO RECIBO BIEN
  
  
public function setId_niv($id_niv){
      
$this->id_niv $id_niv;
  }

  public function 
getId_niv(){
    return 
$this->id_niv;
  }

  public function 
setId_act($id_act){
      
$this->id_act $id_act;
      echo 
"Codigo Actividad ".$this->id_act."<BR>"//aca quiero comprobar si recibo esa matriz

  
}
  public function 
getId_act(){
    return 
$this->id_act;
  }
    
  
//CONSTRUCTOR
  
function __construct($id_niv=null$id_act=null) {
    
$this->setId_niv($id_niv);
    
$this->setId_act($id_act);
  }

Espero haberme descrito bien mi problema.

Graciasy Saludos para todos
  #2 (permalink)  
Antiguo 26/03/2007, 19:53
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: Recibir y grabar una matriz

Si mostrar el código de la función getParametro() puede que encontremos algo.

Saludos.
  #3 (permalink)  
Antiguo 27/03/2007, 01:20
Avatar de JuanKa  
Fecha de Ingreso: septiembre-2004
Mensajes: 468
Antigüedad: 19 años, 7 meses
Puntos: 1
Re: Recibir y grabar una matriz

Alli va:

Esta funcion es para ver si las variables han sido declaradas y almacenarlas en un variable.

Código PHP:
function getParametro($param$default=null){
  
$valor $default;
  if(isset(
$_SESSION[$param])){ $valor $_SESSION[$param]; }
  if(isset(
$_GET[$param])){     $valor $_GET[$param]; }
  if(isset(
$_POST[$param])){    $valor $_POST[$param]; }
  return 
$valor;

Saludos
  #4 (permalink)  
Antiguo 27/03/2007, 09:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Recibir y grabar una matriz

Primero, estas seguro que cuando recibes:
Código PHP:
$activ=getParametro("chk_col"); 
Es un array? prueba hacer esto:
Código PHP:
var_dump$activ ); 
Luego aca en tu clase Nivel_Actividad prueba esto para ver si llega bien el parametro:

Código PHP:
public function setId_act($id_act){
      
$this->id_act $id_act;
      
var_dump$id_act );
  } 
  #5 (permalink)  
Antiguo 27/03/2007, 09:21
Avatar de JuanKa  
Fecha de Ingreso: septiembre-2004
Mensajes: 468
Antigüedad: 19 años, 7 meses
Puntos: 1
Re: Recibir y grabar una matriz

con la funcion var_dump obtengo esto:

he seleccionado 4 check box y me sale esto:

array(4) { [0]=> string(1) "1" [1]=> string(1) "3" [2]=> string(1) "4" [3]=> string(1) "6" }

???
  #6 (permalink)  
Antiguo 27/03/2007, 09:23
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Recibir y grabar una matriz

En que parte de tu script recibes eso?
  #7 (permalink)  
Antiguo 27/03/2007, 09:55
Avatar de JuanKa  
Fecha de Ingreso: septiembre-2004
Mensajes: 468
Antigüedad: 19 años, 7 meses
Puntos: 1
Re: Recibir y grabar una matriz

En la clase Nivel_Actividad !!!
  #8 (permalink)  
Antiguo 27/03/2007, 10:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Recibir y grabar una matriz

Entonces si estas recibiendo bien tu parametro, el problema es que PHP si es case sensitive, y no me habia dado cuenta pero en tu definicion de tu clase estas poniendo:
Código PHP:
protected $Id_act// ESTE PARAMETRO ES EL QUE NO LO RECIBO BIEN 
Pero en tu funcion haces referencia como $id_act; si estudias un poco el manual de PHP podras ver que $Id_act != $id_act;

Asi que tienes que cambiar tu funcion asi:
Código PHP:
public function setId_act($id_act){
      
$this->Id_act $id_act;
  } 
  #9 (permalink)  
Antiguo 28/03/2007, 06:20
Avatar de JuanKa  
Fecha de Ingreso: septiembre-2004
Mensajes: 468
Antigüedad: 19 años, 7 meses
Puntos: 1
Re: Recibir y grabar una matriz

Hola GatorV

Ya he obtenido el valor del array e inclusive ya puedo grabar en la tabla:
Nivel_Actividad (id_niv, id_act), y lo hize de esta manera, derrepente alguien lo puedo modificar a su gusto


Código PHP:
            foreach($this->getId_act() as $activ){
                
$inserta$db->prepare"INSERT INTO NivelAcceso_Actividad VALUES(?,?)" );
                
$db->execute$inserta, array($this->getId_niv(),$activ) );
            } 

como por ejemplo:

id_niv ....................... id_act
2..............................1
2..............................4
2..............................5
3..............................2
3..............................4
3..............................5

Es decir un nivel puede tener muchas actividades(el 2 es operario ytienes las activiades 1,4 y 5 y asi sucesivamente)

Ahora el problema, es cuando quiero modificar las activiades para un determinado Nivel, me devuelva TODAS LAS ACTIVIDADES que hay, es decir, que me los muestre en checkbox y si el nivel tiene tres actividades, éstas deben de venir marcadas de la consulta a la tabla.

Por ejemplo tengo 50 actividades en total pero para un nivel solo tengo 15 actividades asociadas a ese id seleccionado. En otras palabras me los debe mostras las 50 actividades de las cuales solo tendran que estar seleccionadas 15 y el resto desmarcadas para poder modifcarlas.

Lo que pasa es que es la primera vez que uso la Libreria PEAR que tiene sus propias funciones y estoy entrando al mundo de la POO y se me hace un poco dificil.

Te agradeceria bastante si me puedieras ayudar en esto.

Gracias y saludos


Tabla1
Nivel (id_niv, nombre, ......)

Tabla2
Actividad (id_act, modulo...)

Tabla3
Nivel_Actividad (id_niv, id_act)
  #10 (permalink)  
Antiguo 28/03/2007, 08:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Recibir y grabar una matriz

Para hacer eso necesitas hacer otra clase, esta clase seria operativa y le pasas como parametro los checkbox que estan seleccionados, esta clase debe de sacar todas las actividades y checar si alguna esta seleccionada e imprimirla seleccionada.
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 02:10.